当前位置: 首页 > 科技观察

基于PaddlePaddle构建工业级ICNET应用,预测速度比TensorFlow快20%

时间:2023-03-16 10:09:57 科技观察

简介说到ICNET,就不得不说说ICNET的初衷——解决图像语义分割的挑战——时间应用。图像语义分割(semanticsegmentation)将图像分类和目标检测相结合,实现对图像中每个像素的细粒度分类。如下图所示,它可以对闭合形状区域进行分类!得益于深度学习技术的爆发式发展,图像语义分割也进入了高速发展阶段。图1图像语义分割示例技术状态全卷积网络(FCN)J.Long等人。(2015)首先将全卷积网络(FCN)应用于图像分割的端到端训练。FCN将VGG6等网络修改为具有非固定大小的输入以生成具有相同大小的分割图像,同时将所有全连接层替换为卷积层。由于网络生成多个具有小尺寸和密集表示的特征图,因此需要上采样来创建相同尺寸的特征。基本上,它由一个步长不小于1的卷积层组成。它通常被称为反卷积,因为它创建的输出比输入大。在这种情况下,整个网络是基于像素的损失函数进行训练的。此外,J.Long向网络添加了跳跃连接,以将高级特征图表示与网络顶部更具体和密集的特征表示相结合。FCN用卷积层代替了CNN***的全连接层,这也是它名字的由来。图2FCN网络结构ParseNetW。刘等人。(2015)对J.Long的FCN模型进行了两步改进。第一步使用模型生成特征图,将其简化为具有池化层特征向量的单个全局特征图。这个上下文向量使用L2EuclideanNormalForm进行归一化,并取出(输出是输入的扩展版本)以生成与初始值大小相同的新特征图。第二步然后使用L2欧几里德范式对整个初始特征图进行归一化。最后一步连接前两步生成的特征图。归一化有助于缩放连接的特征图值以获得更好的性能。图3ParseNet网络结构PyramidSceneParsingNetwork(PSPNet)H。赵等。(2016)开发了金字塔场景解析网络(PSPNet)以更好地学习场景的全局内容表示。PSPNET使用具有扩展网络策略的特征提取器从输入图像中提取模式。这些特征被提供给金字塔池化模块以区分不同尺度的模式。它们与四个不同的尺度合并,每个尺度对应一个金字塔级别,并通过1x1卷积层处理以减小它们的尺寸。以这种方式,每个金字塔级别分析具有不同位置的图像的子区域。金字塔级别的输出被上采样并连接到初始特征图,最终包含局部和全局上下文信息。然后它们由卷积层处理以生成像素级预测。图4PSPNet网络结构ICNETH。赵等。(2018)提出了一种基于PSPNet的图像级联网络(ICNET),用于高清图像的实时语义分割,解决了基于像素标签推理问题的实际应用中需要大量计算的问题。ICNET可以在单GPU卡上实现实时推理,在Cityscapes、CamVid等数据验证上有比较好的效果。当今基于深度学习的各种网络架构不断提升图像语义分割的性能,但距离行业实际应用还有一定距离。比如在Cityscapes数据集中取得不错成绩的ResNet和PSPNet,至少需要1024*1024张图片。远远不能满足自动驾驶、在线视频处理,甚至移动计算的实时性要求。在这样的背景下,ICNET实现了毫秒级的响应,同时又不会过多降低预测效果以满足实时处理的要求。在Cityscapes数据集上,ICNET可以实现33ms的响应时间,30.3fps的处理能力,以及70.6%的mIoU分数的准确率。图5在Cityscapes数据集上的结果表ICNET的主要贡献是开发了一种用于实时语义分割的新颖独特的图像级联网络,它有效地利用了低分辨率语义信息和高分辨率图像细节信息;其中,级联特征融合模块和级联标签引导模块能够以较小的计算代价完成语义推理,并可实现5倍推理加速和5倍内存缩减。ICNET需要级联图像输入(即低、中、高分辨率)图像,采用级联特征融合单元(CFF)并基于级联标签引导进行训练。对全分辨率的输入图像进行1/2和1/4比例下采样,形成特征输入向中分辨率和高分辨率的分支,逐步提高精度。图6ICNET架构我们使用低分辨率输入获取语义提取,如上图最上面的分支所示,使用8的下采样率将1/4大小的图像输入PSPNet,获取1/32分辨率的特征。为了获得高质量的分割,中高分辨率分支有助于恢复和重新处理粗略的推理;CFF的作用是引入中分辨率和高分辨率图像的特征,从而逐渐提高准确率。CFF的结构如下图所示。图7CFF结构这样,只有低分辨率的图像通过了最深的网络结构,而其他两个分支通过的层数逐渐减少,从而提高了网络的速度。为了降低网络的复杂度,ICNET在网络的每一层都采用剪枝核来实现模型压缩。对于每个过滤器,首先计算L1范式的内核总和,然后按降序排序以仅保留一些排名靠前的内核。ICNET的实现与应用自ICNET问世以来,各种深度学习架构迅速推出了相应的模型实现,包括PaddlePaddle、tensorflow和pytorch。下面将主要基于精密零件的智能分拣场景,比较ICNET网络在PaddlePaddle和tensorflow中的应用性能。PaddlePaddle简介PaddlePaddle(并行分布式深度学习)最初由百度深度学习实验室于2013年创建,目前已被百度内部研发工程师使用。在2016百度世界大会上对外开放,是国内首个开源机器学习平台。从一开始,它就专注于充分利用GPU集群的性能来加速分布式环境中的并行计算,因此在AI训练和大规模数据应用方面比TensorFlow快很多。同时对国内用户特别友好,有全面的中文文档支持。在开发效率和易用性方面具有明显的优势。它可以使用一两行代码来实现TensorFlow需要几行代码才能实现的功能,从而让开发人员专注于构建深度学习模型的高层部分。ICNET在PaddlePaddle的行业应用截至目前,PaddlePaddle已成功部署应用于互联网行业点击率预测、搜索排序、大规模图片分类等数亿用户的产品和服务中。当前,传统产业正在发生深刻变革。利用AI技术赋能,实现传统产业工作的自动化、智能化,使工作人员的工作内容更具技术性、人性化,从而推动传统产业现代化改造和产业化。升级改造对工厂运营效率和效益的提升有很大的帮助和意义。就在近日,领邦智能携手百度飞桨团队,对公司精密零部件质检工作进行了AI赋能升级。在精密零件的人工质量检测中,工人每天需要8到12个小时,在高浓度、强光条件下目视检查直径小于45mm的零件质量。.目前基于PaddlePaddle平台实现的ICNET模型在机器质检应用中已经达到了人工质检的精度。从机器换人的角度进行经济测算,平均可降低工厂生产成本15%,提高效率15%;由于机检水平稳定,产品交付质量大幅提升,交付投诉率平均降低30%。由于精密零件的质量检测数据是保密和非公开的,我们使用公共数据集cityscape来介绍如何在PaddlePaddle上训练和应用ICNET来实现图像语义分割。整个过程仅需几天时间即可完成。开发环境操作系统:Linuxx86_64CPU版本:Intel(R)Xeon(R)CPUE5-2640v4@2.40GHzGPU版本:Nvidia-P40(运行状态如下图)图8GPU运行状态数据准备-CityscapesCityscapes(https:http://www.cityscapes-dataset.com/)包含从50个城市不同季节收集的5,000张高质量像素级精细注释图像(定义了19个类别)。每个都有2975/500/1525张图像用于训练/验证/测试。下载后,您将获得cityscape数据集。下载的文件结构如下:图9cityscapes数据集结构安装PaddlePaddlePaddlePaddle支持Ubuntu14.04/16.04/18.04;中央操作系统7/6;苹果系统;Windows7/8/10。具体请参考官方教程(http://staging.PaddlePaddle.org/documentation/docs/zh/0.14.0/new_docs/beginners_guide/install/install_doc.html),因为PaddlePaddle已经在pip中打包了自己的安装包,我这里选择搭建虚拟环境,直接pipfool安装。如果不使用gpu,直接通过pip安装pipinstallPaddlePaddle。如果使用gpu,需要先查看系统的cuda和cudnn版本。检查cuda版本。cat/usr/local/cuda/version.txt查看cudnn版本。cat/usr/local/cuda/include/cudnn.h|grepCUDNN_MAJOR-A2根据系统Image的cuda和cudnn版本选择要安装的PaddlePaddle-gpu版本,然后通过CCF融合逐步提高精度:模型训练使用已经编写好的模型构建trainer:执行如下命令进行训练,并指定checkpoint保存路径:pythontrain.py--batch_size=16--checkpoint_path="./chkpnt/"--use_gpu=True--random_mirror=True--random_scaling=True加载提供的预训练模型可以加快训练进度。(不过这里官方的预训练模型缺少一些参数文件,会降低最终的效果。)执行以下命令加载预训练模型进行训练,并指定checkpoint保存路径:pythontrain.py--batch_size=16--init_model="./model_1000/”--checkpoint_path="./chkpnt/"--use_gpu=True--random_mirror=True--random_scaling=True图10Trainingloss下降图测试完成模型训练后,进行效果测试:在cityscapeTest中对测试数据集执行如下命令:pythoneval.py--model_path="./chkpnt/30000/"--use_gpu=True经过30000次迭代后,在验证数据集上验证的模型为:mean_IoU=67.25%。符合论文中~67%的效果预期,这个实验是在p40上完成的,用了近20个小时完成了30000次迭代。框架对比下表为PaddlePaddle1.3和TensorFlow1.12的性能对比。下面对比实验使用的输入数据是分辨率为1024x2048的图片,batchsize为16:对比PaddlePaddle1.3和Tensorflow1.12,推理速度为45ms/image65ms/image总结本文介绍了图像语义分割的主流技术,并在PaddlePaddle上应用ICNET实现城市景观数据集的语义分析实践。此外,我们将PaddlePaddle的ICNET应用到灵邦精密零件智能分选机项目中,实现了AI技术在行业的落地。即基于PaddlePaddle实现ICNET模型训练和部署,建立客户自主数据标注->云端训练模型->下载模型->本地部署的全流程。与TensorFlow相比,我们的预测速度在相同精度(25毫秒:33毫秒)下快20%以上。PaddlePaddle框架不仅是一款性能卓越的深度学习框架,更是基于对中国本土企业深度学习需求的深入挖掘,更好地满足国内企业用户的需求。希望PaddlePaddle为传统产业的AI赋能和现代化改造贡献更多力量。参考https://github.com/PaddlePaddle/Paddlehttps://github.com/tensorflow/tensorflowhttps://github.com/hszhao/ICNethttps://arxiv.org/abs/1704.08545https://arxiv.org/abs/1411.4038https://arxiv.org/abs/1506.04579https://arxiv.org/abs/1612.01105