本文主要分享英特尔和京东在基于Spark和BigDL的深度学习技术在搭建大规模图片特征提取框架上的实战经验。

背景

图像特征提取被广泛地应用于相似图片检索,去重等。在使用BigDL框架(下文即将提到)之前,我们尝试过在多机多GPU卡、GPU集群上分别开发并部署特征抽取应用。但以上框架均存在比较明显的缺点:

  • 在GPU集群中,以GPU卡为单位的资源分配策略非常复杂,资源分配容易出问题,如剩余显存不够而导致OOM和应用崩溃。
  • 在单机情况下,相对集群方式,需要开发者手动做数据分片、负载和容错。
  • GPU模式的应用以Caffe为例有很多依赖,包括CUDA等等,增加了部署和维护的难度,如碰到不同操作系统版本和GCC版本有问题时,都需要重新编译打包。

以上问题使得基于GPU的前向程序从架构上面临诸多技术应用挑战。

再来看看场景本身。因为很多图片的背景复杂,主体物体占比通常较小,所以为了减少背景对特征提取准确性的干扰,需要将主体从图片中分离出来。自然地,图片特征提取的框架分为两步,先用目标检测算法检测出目标,然后用特征提取算法提取目标特征。在这里,我们采用SSD[1] (Single shot multibox detector) 进行目标检测,并用DeepBit[2]网络进行特征提取。

京东内部有海量的(数亿张以上)商品图片存在于主流的分布式的开源数据库里。因此如何高效地在大规模分布式环境下进行数据检索和处理,是图片特征提取流水线一个很关键的问题。现有的基于GPU的方案在解决上述场景的需求中面临着另外一些挑战:

  • 数据下载耗费很长的时间,基于GPU的方案不能很好地对其进行优化。
  • 针对分布式的开源数据库中的图片数据,GPU方案的前期数据处理过程很复杂,没有一个成熟的软件框架用于资源管理,分布式数据处理和容错性管理等。
  • 因为GPU软件和硬件框架的限制,扩展GPU方案去处理大规模图片有很大的挑战性。

BigDL集成方案

在生产环境中,利用现有的软件和硬件设施,将大幅提高生产效率(如减少新产品的研发时间),同时降低成本。基于在这个案例中,数据存储在大数据集群中主流的分布式开源数据库上,如果深度学习应用能利用已有的大数据集群(如Hadoop或Spark集群)进行计算,便可非常容易地解决上述的挑战。

Intel开源的BigDL项目[3],是在Spark上的一个分布式深度学习框架,提供了全面的深度学习算法支持。BigDL借助Spark平台的分布式扩展性,可以方便地扩展到上百或上千个节点。同时BigDL利用了Intel MKL数学计算库以及并行计算等技术,在Intel Xeon服务器上可以达到很高的性能(计算能力可取得媲美主流GPU的性能)。

在我们的场景中,BigDL为支持各种模型(检测,分类)进行定制开发;模型从原来只适用于特定 环境移植到了支持通用模型(Caffe,Torch,Tensorflow)BigDL大数据环境 ;整个pipeline全流程获得了优化提速。

通过BigDL在spark环境进行特征提取的流水线如Figure 1所示 :

  • 使用Spark从分布式开源数据库中读入上亿张原始图片,构建成RDD
  • 使用Spark预处理图片,包括调整大小,减去均值,将数据组成Batch
  • 使用BigDL加载SSD模型,通过Spark对图片进行大规模、分布式的目标检测,得到一系列的检测坐标和对应的分数
  • 保留分数最高的检测结果作为主题目标,并根据检测坐标对原始图片进行裁剪得到目标图片
  • 对目标图片RDD进行预处理,包括调整大小,组成Batch
  • 使用BigDL加载DeepBit模型,通过Spark对检测到的目标图片进行分布式特征提取,得到对应的特征
  • 将检测结果(提取的目标特征RDD)存储在HDFS上


Figure 1 Image FeatureExtraction Pipeline Based on BigDL

整个数据分析流水线,包括数据读取,数据分区,预处理,预测和结果的存储,都能很方便地通过BigDL在Spark中实现。在现有的大数据集群(Hadoop/Spark)上,用户不需要修改任何集群配置,即可使用BigDL运行深度学习应用。并且,BigDL利用Spark平台的高扩展性,可以很容易地扩展到大量的节点和任务上,因此极大地加快数据分析流程。

除了分布式深度学习的支持,BigDL也提供了很多易用的工具,如图片预处理库,模型加载工具(包括加载第三方深度学习框架的模型)等,更方便用户搭建整个流水线。

图片预处理

BigDL提供了基于OpenCV[5]的图像预处理库[4], 支持各种常见的图像转换和图像增强的功能,用户可以很容易地使用这些基本功能搭建图像预处理的流水线。此外,用户也可以调用该库所提供的OpenCV操作自定义图像转换的功能。

这个样例的预处理流水线将一个原始RDD通过一系列的转换,转成一个Batch的RDD。其中,ByteToMat把Byte图片转换成OpenCV的Mat存储格式,Resize将图片的调整为300x300的大小,MatToFloats将Mat里的像素存成Float数组的格式,并减去对应通道的均值。最后,RoiImageToBatch把数据组成Batch,作为模型的输入,用于预测或训练。

加载模型

用户可以方便地使用BigDL加载预训练好的模型,在Spark程序中直接使用。给定BigDL模型文件,即可调用Module.load得到模型。

另外,BigDL也支持第三方深度学习框架模型的导入,如Caffe,Torch,TensorFlow。

用户可以很方便地加载已经训练好的模型,用于数据预测,特征提取,模型微调等。以Caffe为例,Caffe的模型由两个文件组成,模型prototxt定义文件和模型参数文件。如下所示,用户可以很容易地将预训练好的Caffe模型加载到Spark和BigDL程序中。

性能

我们对基于Caffe的GPU集群解决方案和基于BigDL的Xeon集群解决方案进行了性能基准测试,测试均运行在京东的内部集群环境里。

测试标准

端到端的图片处理和分析流水线,包括:

  • 从分布式的开源数据库中读取图片(从图片源下载图片到内存)
  • 输入到目标检测模型和特征提取模型进行特征抽取
  • 将结果(图片路径和特征)保存到文件系统

注:下载因素成为端到端总体吞吐率的重要影响因素,在这个案例里面,这部分耗时占处理总耗时(下载+检测+特征)约一半。GPU服务器对下载这部分的处理是无法利用GPU加速的。

测试环境

GPU: NVIDIA Tesla K40,20张卡并发执行
CPU: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz,共1200个逻辑核 (每台服务器有24个物理核,启用超线程,配置成YARN的50个逻辑核)

测试结果

Figure 2显示了Caffe在20个K40并发处理图片的吞吐量约为540图片/秒,而BigDL在1200个逻辑核的YARN(Xeon)集群上对应的吞吐量约为2070图片/秒。BigDL在Xeon集群上吞吐量上约是GPU集群的3.83倍,极大地缩短了大规模图片的处理时间。

测试结果表明,BigDL在大规模图片特征提取应用中提供了更好的支持。BigDL的高扩展性,高性能和易用性,帮助京东更轻松地应对海量,爆炸式增长的图片规模。基于这样的测试结果,京东正在将基于GPU集群的Caffe图片特征提取实现,升级为基于Xeon集群的BigDL方案部署到Spark集群生产环境中。


Figure 2比较 K40和Xeon在图片特征提取流水线的吞吐量

结论

BigDL的高扩展性,高性能和易用性,帮助京东更容易地使用深度学习技术处理海量图片。京东会继续将BigDL应用到更广泛的深度学习应用中,如分布式模型训练等。

引用

[1]. Liu, Wei, et al. “SSD: Single Shot Multibox Detector.” European conference on computer vision. Springer, Cham, 2016.
[2]. Lin, Kevin, et al. “Learning compact binary descriptors with unsupervised deep neural networks.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2016.
[3]. https://github.com/intel-analytics/BigDL
[4]. https://github.com/intel-analytics/analytics-zoo/tree/master/transform/vision
[5]. http://opencv.org/

解析京东大数据下高效图像特征提取方案相关推荐

  1. 大数据下机械智能诊断的机遇与挑战,阅读文献系列(一)

    阅读文献系列一 论文题目:大数据下机械智能诊断的机遇与挑战 1.大数据时代下的故障诊断的挑战: 2.机械大数据的特性: 3.应该怎么做: 4.现有工作: 5.故障诊断三方面研究: 5.1 信号获取 5 ...

  2. 大量的数据做字符串匹配_Python Flashtext 实现大数据集下高效的关键词查找和替换...

    通常,我们使用Python 在文本中进行关键词查找或替换时,会使用 re 模块以正则的形式实现.在文本数量.文本内容.关键词数量较小时,该方法能够满足我们程序的功能.性能需要.但当在大规模的文本或者对 ...

  3. 对话翁志:京东大数据如何让技术真正落地

    1. 2013年是翁志职业生涯的重要节点. 在那之前,翁志自1996年离开中国.赴国外留学,直到2003年底回国,主要从事数据库方面工作,包括数据基础架构等.较为成功的案例是网络通信数据架构,在90年 ...

  4. 直播:京东大数据的应用!

    前言:由CSDN主办的SDCC 2017之大数据技术实战线上峰会将在CSDN学院举行.作为SD系列技术峰会的一部分,本次线上峰会秉承干货实料(案例)的内容原则,将邀请圈内顶尖的布道师.技术专家和技术引 ...

  5. Java job interview:项目架构研发京东大数据价值最大化的应用实践

    "大数据"的经典定义是可以归纳为4个V:海量的数据规模(volume).快速的数据流转和动态的数据体系(velocity).多样的数据类型(variety)和巨大的数据价值(val ...

  6. 浅谈大数据下的机器学习

    大数据和机器学习是目前信息行业快速增长的两大热门领域.从过去的信息闭塞发展到现在数据爆炸,各个领域的数据量和数据规模增长速度都以惊人的速度增长.根据美国国家安全局的统计,互联网每天处理1826PB字节 ...

  7. 大数据下的BI新特性

    大数据下的BI新特性 大数据BI的新需求包括大量化(多个大数据集并行分析).多样化(结构化.半结构化.非结构化).快速化(Velocity)和价值(易用性).而计算分层(流计算.块计算.全局计算).快 ...

  8. 【报告分享】转变与机遇:从京东大数据看2020消费市场与品牌成长.pdf(附下载链接)...

    大家好,我是文文(微信:sscbg2020),今天给大家分享京东大数据研究院于2020年10月发布的报告<转变与机遇:从京东大数据看2020消费市场与品牌成长.pdf>. 本报告共25页, ...

  9. 【报告分享】2020成人用品报告-京东大数据研究院.pdf(附下载链接)

    大家好,我是文文(微信:sscbg2020),今天给大家分享京东大数据研究院于2020年8月份发布的报告<2020成人用品报告.pdf>. 在经济发展.生活水平提高的大背景下,人们对&qu ...

  10. 【报告分享】京东大数据202女性消费趋势报告.pdf(附下载链接)

    今天给大家分享的报告是京东大数据研究院于2020年3月发布的<2020女性消费趋势报告.pdf>,报告包含两大部分:1.疫情中的女性群像:2.年度女性消费趋势报告:希望对您有用. 该报告已 ...

最新文章

  1. python可以做什么开发-python适合做什么开发_python未来发展怎么样
  2. composer php 使用方法,Composer的基本使用方法
  3. web服务器采用的是什么协议,webservice中采用协议Http,它是指什么意思
  4. cae计算机仿真分析技术,厉害了 揭秘汽车设计中CAE仿真技术
  5. 菜鸟nginx源码剖析
  6. 博客园里如何防垃圾评论
  7. java io 机器名_java IO最让初学者误解的取名方式
  8. java随机抽样算法_随机抽样一致性(RANSAC)算法详解
  9. Django__WSGI
  10. 计算机桌面背景在哪里调整,电脑中怎么设置桌面背景
  11. 日化行业DMS全渠道商城系统
  12. 一周热图|陈飞宇成天梭表形象代言人;朱一龙赵丽颖登陆欧舒丹星球;张信哲代言欧宝娱乐...
  13. OPC DA调研报告
  14. IP代理proxy试用
  15. 腾讯云tcp架构认证适合什么人群?费用是多少?需要什么资质能力?
  16. Oracle JDK各版本下载汇总
  17. html5 div平移,使用JavaScript平移DIV元素
  18. java基于微信小程序的美容美发预约系统 uniapp 小程序
  19. shuffle过程简介
  20. 虎年到,新年用Python与人工智能一起写春节对联 python+pytorch+Transformer+BiLSTM+ATTN+CNN

热门文章

  1. AR和VR是什么,浅看一下吧
  2. [蓝桥杯]第39级台阶(Python实现)
  3. 交换机端口mtu值最大_-【SDN】交换机MTU配置总结
  4. 睡觉、吃饭、打豆豆。
  5. xp系统配置打印服务器,xp系统打印机纸张大小的自定义设置方法
  6. Tensorflow概念详解
  7. Swing界面设计工具
  8. @Value设置默认值
  9. 一场别开生面的黑客面基大会
  10. ScrollView嵌套Tablaout与ViewPager联动(标签)(ScrollView与ViewPager冲突)