HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

基于 PaddlePaddle 搭建工业级 ICNET 应用,预测速度超 TensorFlow 20%

  • 2019-04-19
  • 本文字数:5413 字

    阅读完需:约 18 分钟

基于PaddlePaddle搭建工业级ICNET应用,预测速度超TensorFlow 20%

引言

提起 ICNET,就不得不说说 ICNET 构建的初衷-解决图像语义分割在实时应用中的挑战。图像语义分割(semantic segmentation)是结合了图像分类和对象检测,对图像中的每个像素实现细粒度的分类,就像下面的图中看到的那样,可以对封闭形状区域进行类别标记!得益于深度学习技术的爆发式发展,图像语义分割也进入高速的发展阶段。



Figure 1 图像语义分割示例


技术现状

Fully convolutional network(FCN)

J. Long et al. (2015) 首先将全卷积网络(FCN)应用于图像分割的端到端训练。FCN 修改了 VGG6 等网络使其具有非固定大小的输入生成具有相同大小的分割图像,同时通过卷积层替换所有完全连接的层。由于网络生成具有小尺寸和密集表示的多个特征映射,因此需要进行上采样以创建相同大小的特征。基本上,它包含于一个步幅不小于 1 的卷积层。它通常称为反卷积,因为它创建的输出尺寸大于输入。这样的话,整个网络是基于像素点的损失函数进行训练的。此外,J. Long 在网络中添加了跳过连接,以将高层级特征映射表示与网络顶层更具体和密集的特征表示相结合。FCN 把 CNN 最后的全连接层换成卷积层,这也是其名字的由来。



Figure 2 FCN 网络结构


ParseNet

W. Liu et al. (2015) 针对 J. Long 的 FCN 模型进行了两步改进,第一步使用模型生成要素图,这些要素图被缩减为具有池化层的单个全局特征向量。使用 L2 欧几里德范式对该上下文向量进行归一化,并且将其取出(输出是输入的扩展版本)以生成具有与初始值相同的大小的新特征映射。第二步再使用 L2 欧几里德范式对整个初始特征映射进行归一化。最后一步连接前两个步骤生成的要素图。规范化有助于缩放连接的要素图值,从而获得更好的性能。



Figure 3 ParseNet 网络结构


Pyramid Scene Parsing Network (PSPNet)

H. Zhao et al. (2016) 开发了金字塔场景解析网络(PSPNet),以更好地学习场景的全局内容表示。PSPNET 使用具有扩张网络策略的特征提取器从输入图像中提取模式。特征提供给金字塔池化模块以区分具有不同比例的模式。它们与四个不同的尺度合并,每个尺度对应于金字塔等级,并由 1x1 卷积层处理以减小它们的尺寸。这样,每个金字塔等级分析具有不同位置的图像的子区域。金字塔等级的输出被上采样并连接到初始特征图以最终包含局部和全局的上下文信息。然后,它们由卷积层处理以生成逐像素的预测。



Figure 4 PSPNet 网络结构


ICNET

H. Zhao et al. (2018)针对高清图像的实时语义分割,提出了一个基于 PSPNet 的图像级联网络(ICNET),它解决了现实应用中的基于像素标签推断需要大量计算的难题。ICNET 可以在单块 GPU 卡上实现实时推断并在 Cityscapes,CamVid 等数据验证有相对不错的效果。


当今基于深度学习的各种网络架构不断提升图像语义分割的性能,但是都距离工业界的实际应用有一定距离,像在 Cityscapes 数据集取得不错效果的 ResNet 和 PSPNet 针对 1024*1024 的图像至少需要 1 秒钟做出推断,远远不能满足自动驾驶,在线视频处理,甚至移动计算等领域实时的要求,ICNET 即是在这样的背景下,在不过多降低预测效果的基础上实现毫秒级相应以满足实时处理的要求。在 Cityscapes 数据集上,ICNET 的响应时间可以达到 33ms,处理能力达到 30.3fps,准确率达到 70.6%的 mIoU 分数。



Figure 5 在 Cityscapes 数据集上的结果表


ICNET 的主要贡献在于开发了一种新颖独特的图像级联网络用于实时语义分割,它高效的利用了低分辨率的语义信息和高分辨率图像的细节信息;其中级联特征融合模块与级联标签引导模块能够以较小的计算代价完成语义推断,可以取得 5 倍的推断加速和 5 倍的内存缩减。


ICNET 需要级联图像输入(即低,中和高)分辨率图像,采用级联特征融合单元(CFF)并基于级联标签指导进行训练。具有全分辨率的输入图像通过 1/2 和 1/4 比例进行下采样,形成特征输入到中分辨率和高分辨率的分支,逐级提高精度。



Figure 6 ICNET 架构


我们使用低分辨率输入得到语义提取,如上图顶部分支所示使用下采样率为 8 的比例将 1/4 大小的图像输入 PSPNet,得到 1/32 分辨率的特征。获得高质量的分割,中高分辨率分支有助于恢复并重新处理粗糙的推断;CFF 的作用就是引入中分辨率和高分辨率图像的特征,从而逐步提高精度,CFF 的结构如下所示。



Figure 7 CFF 结构


这样只有低分辨率的图像经过了最深的网络结构,而其他两个分支经过的层数都逐渐减少,从而提高了网络的速度。


为了降低网络的复杂度,ICNET 采用了修剪网络每层中的内核来实现模型压缩。对于每个过滤器,首先计算内核 L1 范式的求和,然后降序排列仅保留部分排名靠前的内核。

ICNET 的实现及应用

自 ICNET 问世以来,各家深度学习架构都快速的推出了相应的模型实现,包括 PaddlePaddle,tensorflow 和 pytorch。以下将主要基于精密零件智能分拣场景对比 PaddlePaddle 和 tensorflow 中 ICNET 网络的应用性能。

PaddlePaddle 介绍

PaddlePaddle (PArallel Distributed Deep LEarning) 最初由百度深度学习实验室于 2013 年创建,一直被百度内部的研发工程师们所使用。在 2016 年百度世界大会上对外开放,它是国内第一个开源的机器学习平台。它从一开始就专注于充分利用 GPU 集群的性能,为分布式环境的并行计算进行加速,所以在对大规模数据进行 AI 训练和应用上要比 TensorFlow 要快得多。同时,它对国内用户尤其友好,有完善的中文文档支持,它在开发效率和易用性方面有较明显的优势,它可以使用一两行代码实现 TensorFlow 需要数行代码才能实现的功能,从而使开发者将工作的重点放在构建深度学习模型的高层部分。

PaddlePaddle 中 ICNET 在工业界的应用

截至目前, PaddlePaddle 已在互联网行业 CTR 预测、搜索排序、大规模图像分类等数亿级用户量的产品和服务上成功部署使用。当下,传统行业正在进行深度变革,利用 AI 技术赋能,实现传统行业工作的自动化,智能化,使其工作人员的工作内容技术含量更高、更人性化,从而促进传统行业的现代化转型和产业升级,对工厂经营效率和效益的提高有很大的帮助和意义。


就在最近,领邦智能联合百度 PaddlePaddle 团队对公司的精密零件质检工作进行了 AI 赋能升级。在精密零件的人工质检工作中,工人每天需要 8~12 小时在注意力高度集中亮光的条件下目视检查直径 45mm 以内零件的质量,工作的强度非常大,对工人视力也有很大的伤害。目前基于 PaddlePaddle 平台实现的 ICNET 模型在机器质检的应用上已经达到了人工质检的准确度,从机器代人这个角度进行经济测算,可使工厂生产成本平均降低 15%,效益提升 15%;由于机器检验水平稳定,大大提高了产品的交付质量,交付投诉率平均降低了 30%。由于精密零件质检数据的是保密非公开的,所以我们用公开数据集 cityscape 来介绍一下如何在 PaddlePaddle 上训练和应用 ICNET 实现图像语义分割,整个流程可以仅在几天内完成。


开发环境


操作系统:Linux x86_64


CPU 版本:Intel® Xeon® CPU E5-2640 v4 @ 2.40GHz


GPU 版本:Nvidia-P40(运行状况如下图所示)



Figure 8 gpu 运行状况


数据准备-Cityscapes


Cityscapes( https://www.cityscapes-dataset.com/ )包含从 50 个城市收集的不同季节的 5,000 个高质量像素级精细注释图像(定义了 19 个类别)。各有 2975/500/1525 张图用于训练/验证/测试。


下载后得到 cityscape 数据集,下载后的文件结构如下:



Figure 9 cityscapes 数据集结构


安装 PaddlePaddle


PaddlePaddle 支持 Ubuntu 14.04/16.04/18.04;CentOS 7/6;MacOS;Windows7/8/10。具体请参考官方教程,非常详细:


http://staging.PaddlePaddle.org/documentation/docs/zh/0.14.0/new_docs/beginners_guide/install/install_doc.html


因为 PaddlePaddle 已经在 pip 封装了自己的安装包,我这里选择构建虚拟环境,并直接从 pip 傻瓜式安装。


  • 如果不使用 gpu,直接通过 pip 安装


pip install PaddlePaddle


  • 如果是使用 gpu,需要先查看系统的 cuda 和 cudnn 版本


查看 cuda 版本


cat /usr/local/cuda/version.txt



查看 cudnn 版本


cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2



按照系统的 cuda 和 cudnn 版本选择需要安装的 PaddlePaddle-gpu 版本


pip install PaddlePaddle-gpu==1.3.0.post97


构建模型


根据 ICNET 网络结构构建模型,创建不同比例采样的低分辨率图像,再通过 CCF 融合逐步提高精度:



模型训练


利用已经写好的 model 构建 trainer:



执行以下命令进行训练,同时指定 checkpoint 保存路径:


python train.py --batch_size=16 --checkpoint_path="./chkpnt/" --use_gpu=True --random_mirror=True --random_scaling=True


加载提供的预训练模型可以加快训练进度。(不过这里官方的预训练模型缺少部分参数文件,会导致最终的效果降低)


执行以下命令加载预训练模型进行训练,同时指定 checkpoint 保存路径:


python train.py --batch_size=16 –-init_model=”./model_1000/” --checkpoint_path="./chkpnt/" --use_gpu=True --random_mirror=True --random_scaling=True



Figure 10 训练损失下降图


测试


完成模型的训练后, 进行效果测试:



执行以下命令在 cityscape 测试数据集上进行测试:


python eval.py --model_path="./chkpnt/30000/" --use_gpu=True



在进行 30000 次迭代后得到的模型在验证数据集上验证的结果为:mean_IoU=67.25%。符合论文中~67%的效果预期,本次实验在 p40 上完成,完成 30000 次迭代共耗时近 20 个小时。


框架对比


下表展示了 PaddlePaddle1.3 和 TensorFlow1.12 的性能对比,以下对比实验使用的输入数据是 1024x2048 分辨率的图片,batch size 为 16:


小结

本文介绍了图像语义分割实现的主流技术,并在 PaddlePaddle 上应用 ICNET 实现 cityscape 数据集的语义分析实践。另外,我们已经将 PaddlePaddle 的 ICNET 应用于领邦精密零件智能分拣机项目,实现了 AI 技术在产业落地。即基于 PaddlePaddle 实现了 ICNET 模型训练、部署,建立了客户自主数据标注->云端训练模型->下载模型->本地部署的全部流程。


对比 TensorFlow,在相同精度下我们的预测速度要快 20%以上(25ms:33ms)。PaddlePaddle 框架,不仅是一个性能优秀的深度学习框架,更能够基于对中国本土企业的深度学习需求的深入发掘,从而能够更好的满足国内企业用户的需求。希望 PaddlePaddle 在传统行业的 AI 赋能和现代化转型中贡献更多的力量。

参考

  1. https://github.com/PaddlePaddle/Paddle

  2. https://github.com/tensorflow/tensorflow

  3. https://github.com/hszhao/ICNet

  4. https://arxiv.org/abs/1704.08545

  5. https://arxiv.org/abs/1411.4038

  6. https://arxiv.org/abs/1506.04579

  7. https://arxiv.org/abs/1612.01105


2019-04-19 18:164858

评论

发布
暂无评论
发现更多内容

【前端每日一学】vue框架的深入学习

恒山其若陋兮

6月月更

最好用的 6 个 React Tree select 树形组件测评与推荐

蒋川

低代码 开发工具 React 组件 树形选择器

一篇万字博文带你入坑爬虫这条不归路 【万字图文】

孤寒者

爬虫 6月月更 爬虫必备知识讲解 万字图文 爬虫入坑文

三大特性,多个场景,Serverless 应用引擎 SAE 全面升级

Serverless Devs

阿里云 Serverless 微服务

开放银行引入第三方生态,系统风控助力事前-中风险监控

Speedoooo

数字化 开放银行 异业合作

社区活动 | Apache Doris 社区长期征文活动&演讲议题征集 正式开始啦!

SelectDB

开源社区 apache doris 征文投稿 议题征集 社区活动

2022年SaaS行业十大趋势:SaaS的新机遇有哪些?

小炮

flutter系列之:用来管理复杂状态的State详解

程序那些事

flutter 程序那些事 6月月更 widget

金融机构等入局数字藏品;证券期货类应用用户规模达1.34亿

易观分析

金融 证券

使用APICloud开发app的动态权限及Android平台targetSdkVersion设置教程

YonBuilder低代码开发平台

android 权限管理 APICloud

开源生态|超实用开源License基础知识扫盲帖(上)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

小程序IDE,大趋势下催生的效能提速工具

Speedoooo

ide 效率工具 编程效率 移动开发 APP开发

重磅发布 | Serverless 应用中心:Serverless 应用全生命周期管理平台

Serverless Devs

OpenHarmony 3.2 Beta1版本正式发布

OpenHarmony开发者

Open Harmony

Fomo3D模式dapp系统开发详解

开发微hkkf5566

【LeetCode】划分数组使最大差为 K Java题解

Albert

LeetCode 6月月更

创新不止,英特尔强调HPC的开放性和可持续性

科技之家

新一期HarmonyOS认证正式发布,速来围观!

HarmonyOS开发者

HarmonyOS

2022年软饮料国潮发展洞察报告

易观分析

饮品市场

CountDownLatch

急需上岸的小谢

6月月更

AIOps落地五大原则(一):大势所趋

BizSeer必示科技

面向高校 | “云原生技术应用与实践”示范课程项目开放申报

Serverless Devs

从“预见”到“遇见”SAE 引领应用步入 Serverless 全托管新时代

Serverless Devs

阿里云 Serverless

如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存

Serverless Devs

Serverless 前端 前端工具

打金?工作室?账号被封?游戏灰黑产离我们有多近

行者AI

优酷移动端弹幕穿人架构设计与工程实战总结

阿里巴巴文娱技术

技术 音视频 弹幕 视频 移动端

重磅!KubeEdge单集群突破10万边缘节点|云原生边缘计算峰会前瞻

华为云开发者联盟

云计算 云原生 华为云

50万条数据,解读四川两座城市数字经济发展底气(下)

易观分析

经济 四川经济

同心助力,战役有AI

开源社

人工智能 疫情防控

【爬虫必备->Scrapy框架】初篇

孤寒者

爬虫 6月月更 scrapy框架

微信团队分享:微信后台在海量并发请求下是如何做到不崩溃的

JackJiang

微服务 即时通讯 im开发 微信架构

基于PaddlePaddle搭建工业级ICNET应用,预测速度超TensorFlow 20%_AI&大模型_飞浆_InfoQ精选文章