Jarvis-拍立淘里面的深度学习引擎-之持续优化

本文涉及的产品
推荐全链路深度定制开发平台,高级版 1个月
简介: 介绍 Jarvis是一款专门为手机端而设计研发的深度学习引擎,它比我们目前已知的所有开源产品都要快。在使用高通芯片的安卓手机上,其他产品在性能上甚至还没有接近于我们的。小小骄傲一下。在最开始的时候,Jarvis was heavily influenced by Caffe2 and borrowed quite a bit of code from it. 但是随着时间的推移以及业务的演进,Jarvis离Caffe2也越来越远,所以,我们最终决定发布独立的产品。

介绍

Jarvis是一款专门为手机端而设计研发的深度学习引擎,它比我们目前已知的所有开源产品都要快。在使用高通芯片的安卓手机上,其他产品在性能上甚至还没有接近于我们的。小小骄傲一下。在最开始的时候,Jarvis was heavily influenced by Caffe2 and borrowed quite a bit of code from it. 但是随着时间的推移以及业务的演进,Jarvis离Caffe2也越来越远,所以,我们最终决定发布独立的产品。

Jarvis由淘宝的 拍立淘 业务而生,已持续稳定服役一年。

性能

距离上次介绍Jarvis又过去了三个月的时间,现在的Jarvis相比之前又有了很多进步,在端上承载的拍立淘业务也逐渐增多。不知不觉间,Jarvis已经成为了最快的那一款。之前我们的CPU实现比ncnn要慢,现在已经超过了。而GPU的实现在之前的高起点上又有了更大的提高,之前GPU的性能大约是ncnn的两倍,现在已经到了4倍。

在下表中,我列出了几款常见的端上深度学习引擎的SqueezeNet耗时(毫秒)对比。

Jarvis(GPU) Jarivs(CPU) Caffe2(Facebook) ncnn(Tencent) mdl(Baidu)
Samsung S8 30 80 110 120 150
Huawei P10 - 110 160 140 180
iPad pro 23 56 140 65 -
iPhone 6sp 35 58 160 80 -

在我们测试几款高中低端手机上,Jarvis的CPU实现的性能表现都是最好的。GPU就不用说了。

下面这幅图是在Samsung S8上,换算成FPS(每秒处理图片数)的对比结果。

TB1XjMLXGmWBuNjy1XaXXXCbXXa-822-621.png

使用

编译打包

已经随源码一起提供了预编译包,参考目录里面的android和iOS demo工程。也可以使用里面的工程自己编译打包。

模型生成

为了平衡性能、包大小以及便利程度,Jarvis采用flatbuffers作为模型文件格式。

示例里面带有SqueezeNet和MobileNet两个已经生成好的model,tools目录下面有转化caffe和caffe2模型的工具。

如果需要,你也可以可以使用C++,包含public目录下的schema_generated.h头文件通过代码动态生成模型。

当然,你也可以使用Objective-C++来包含这个文件。事实上,如果你想,你甚至可以根据schema.fbs文件生成Java类来做同样的事儿。

API

Jarvis提供了android(Java),iOS(Objective-C)和C++三套API,都很简单。Jarvis在设计时已尽量屏蔽掉烦人的东西,而只提供给你极速的体验。

查看一下Java类,Objective-C interface或者public目录里面的header file,即可知道Jarvis为数不多的API了。

android

// 构建网络,modelBuffer是包含jarvis模型文件的ByteBuffer
Session session = new Session(modelBuffer);

// Where amazing happens, jarvis会根据网络配置的输入大小对testBitmap做缩放
Tensor[] results = session.inference(testBitmap);

// 得到结果
float[] values = results[0].readFloats();


// 更通用的调用方式
Tensor input = session.input(0);
float[] data = new float[input.size()];
// put some values...
input.write(data);
// run
session.inference();
// got result
Tensor output = session.output(0);
float[] results = output.readFloats();

iOS

// model是包含模型的NSData *
JVSSession *session = [[JVSSession alloc] initWithModel:model];
NSArray<JVSTensor *> *results = [session inferenceWithImage:testImage];

C++

std::unique_ptr<jarvis::Session> session(new jarvis::Session(model_buffer));
auto results = session->inference_rgba(p_rgba, width, height, stride);

目前我们在运行的业务

  1. 用户行为特征端上实时计算
  2. 拍立淘活动页面扫商品/logo抠图
  3. 拍立淘多主体拍照识别和智能识别

这一阶段我们所完成的工作

  1. 性能优化,iOS和Android都有较大提升
  2. 统一了iOS和Android的基础代码
  3. 完善了caffe model的转化工具
  4. 多数据类型支持,现在已经可以运行float32和float16网络
  5. 更多的线上业务

接下来的安排

  1. int8的支持,下一个必需攻克的难关。有了它,安卓低端机无忧
  2. Mali GPU优化,能达到和高通GPU同样的水平吗
相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
10天前
|
机器学习/深度学习 数据处理 网络架构
基于深度学习的图像识别优化策略
【4月更文挑战第30天】 在当前的计算机视觉领域,深度学习已成为推动图像识别技术革新的核心动力。本文旨在探讨并提出一系列优化策略,以增强现有深度神经网络模型在处理复杂图像数据时的性能和效率。通过分析网络架构、训练过程和数据处理流程,我们提出了改进的模型正则化方法、高效的训练技巧以及针对特定问题的适应性调整。这些策略不仅在理论上具有创新性,而且在实践中已被证明能够显著提高模型的准确率和泛化能力,为图像识别领域的研究与应用提供了新的视角和技术路径。
|
2天前
|
机器学习/深度学习 算法 调度
深度学习|改进两阶段鲁棒优化算法i-ccg
深度学习|改进两阶段鲁棒优化算法i-ccg
|
2天前
|
机器学习/深度学习 边缘计算 算法
基于深度学习的图像识别优化策略研究
【5月更文挑战第8天】 本研究旨在探索提高深度神经网络在图像识别任务中性能的有效策略。通过分析现有模型的局限性,本文提出了一系列优化技术,包括数据增强、网络结构调整和损失函数改进。实验结果表明,这些策略显著提升了模型的准确率和泛化能力,尤其在处理高复杂度图像时表现突出。此外,针对计算资源消耗问题,我们还探讨了模型压缩和加速方法,以期实现高效率的实时图像识别应用。
|
3天前
|
机器学习/深度学习 边缘计算 算法
基于深度学习的图像识别优化策略研究
【5月更文挑战第7天】 在计算机视觉领域,图像识别作为核心任务之一,其性能的提升一直是研究的热点。随着深度学习技术的不断发展,卷积神经网络(CNN)已成为图像识别的主要工具。然而,模型复杂度和计算资源的大量需求限制了其在实际应用中的推广。本文围绕减少模型参数、提高运算效率和保持识别准确率等方面展开,提出了一种结合深度可分离卷积与注意力机制的图像识别优化策略。通过实验验证,该策略在多个标准数据集上取得了与传统卷积网络相媲美的结果,同时显著降低了参数数量和计算成本。
26 4
|
4天前
|
机器学习/深度学习 人工智能 开发框架
构建未来:基于深度学习的图像识别优化策略
【5月更文挑战第6天】随着人工智能技术的飞速发展,深度学习在图像识别领域已经取得了显著的成就。然而,为了进一步提升系统的识别效率和准确性,本文提出了一种结合最新神经网络架构与数据增强技术的图像识别优化策略。通过引入自适应学习率调整机制和混合精度训练方法,该策略旨在降低模型训练过程中的时间成本,同时提高模型在复杂环境下的泛化能力。
|
4天前
|
机器学习/深度学习 监控 算法
利用深度学习优化图像识别准确性的探索
【5月更文挑战第6天】 在数字图像处理领域,随着数据量的激增和算法复杂度的提升,传统图像识别技术面临巨大挑战。本文通过构建一个基于深度卷积神经网络(CNN)的模型,探讨了如何提高图像识别的准确性。我们详细分析了网络结构、激活函数和优化器的选择对模型性能的影响,并通过实验验证了所提出方法的有效性。结果表明,采用适当的数据增强技术和调整网络参数,可以显著提升模型在复杂数据集上的识别精度。
|
5天前
|
机器学习/深度学习 边缘计算 计算机视觉
基于深度学习的图像识别优化技术研究
【5月更文挑战第5天】 在当前的计算机视觉领域,图像识别技术已取得显著进展,尤其是深度学习方法的广泛应用。然而,随着数据量的日益增加和模型复杂度的提升,如何提高图像识别的效率与准确性成为新的挑战。本文提出了一种基于改进卷积神经网络(CNN)的图像识别优化技术,旨在减少模型参数量、加速推理过程,并保持甚至提升识别精度。通过引入深度可分离卷积、注意力机制以及量化剪枝策略,该技术在多个标准数据集上显示出了卓越的性能。
|
7天前
|
机器学习/深度学习 算法 大数据
利用深度学习优化图像识别处理流程
【5月更文挑战第3天】 在当前的计算机视觉领域,图像识别的准确性与处理速度是衡量系统性能的重要指标。随着人工智能技术的飞速发展,深度学习模型尤其是卷积神经网络(CNN)在图像识别任务中取得了显著成果。本文旨在探讨如何通过优化深度学习模型的结构和参数,以及采用高效的算法来提高图像识别的处理效率和准确率。我们将介绍几种有效的技术手段,包括网络结构简化、权重共享、多尺度训练等,并通过实验验证这些方法的有效性。最终目的是为读者呈现一种平衡计算成本与识别性能的优化策略,推动深度学习在实际应用中的高效部署。
|
7天前
|
机器学习/深度学习 数据采集 人工智能
利用深度学习优化图像识别处理流程
【5月更文挑战第3天】 在现代技术环境中,图像识别作为人工智能的一个关键应用领域,其发展速度和准确性要求不断提高。本文将探讨利用深度学习技术优化图像识别处理流程的方法,包括数据预处理、模型选择、训练策略及最终的测试与部署。通过分析现有文献和最新研究成果,我们提出了一套改进的卷积神经网络(CNN)架构,该架构能够有效提升图像识别的准确率和处理速度。此外,文章还讨论了模型过拟合、数据增强以及迁移学习等关键技术的应用,并展示了这些技术如何帮助构建一个更为健壮和高效的图像识别系统。
21 5
|
9天前
|
机器学习/深度学习 人工智能 计算机视觉
基于深度学习的图像识别技术优化策略
【5月更文挑战第1天】 在当前的人工智能领域,图像识别技术已经取得了显著的进步,特别是随着深度学习方法的应用。然而,为了实现更高效准确的图像处理,本文探讨了几种可能的优化策略。这些策略旨在提高模型的性能、减少计算成本以及增强模型对不同数据集的泛化能力。我们将重点讨论数据增强、网络结构调整、知识蒸馏和迁移学习等技术,并通过实验验证所提出策略的有效性。
24 1