东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

基于 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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-04-19 18:164721

评论

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

亚马逊云科技与TalkingData携手助力美妆巨头数字化营销闭环安全合规地提效

Lily

【CSS关键字】:inherit、initial、unset分别有哪些作用?

翼同学

CSS html 前端 8月月更 学习分享

【CSS】什么是外边距的重叠?常见的有哪几种重叠情况?

翼同学

CSS 前端 编程语言 8月月更

牵手华为云,云时通SRM助力企业采购数字化升级!

创意时空

「35分钟」开发刷题功能

小鑫同学

前端 H5 数据分析、 分页查询 开发.

玩转KubeEdge保姆级攻略

乌龟哥哥

8月月更

浅谈JS发布订阅模式

海底烧烤店ai

JavaScript 前端 发布订阅模式 8月月更

【CSS·圆角边框】有关border-radius属性的记录以及实现原理

翼同学

CSS html 前端 8月月更

《数字经济全景白皮书》银行业RPA应用专题分析 发布

易观分析

RPA 金融 银行

【CSS 盒子模型(上)】:width、height、overflow、border

翼同学

CSS html 前端 8月月更

持久,redis 持久化有哪几种方式,怎么选?

知识浅谈

redis持久化 8月月更

Docker杀掉了容器?问题分析与解决过程全面复盘

程序员欣宸

Docker 8月月更

【CSS 盒子模型(下)】:padding 和 margin

翼同学

CSS html 前端 8月月更

数字藏品app开发:数字藏品发行制作的关键

开源直播系统源码

NFT 数字藏品 数字藏品开发 数字藏品系统 数字藏品软件

弹性云端新算力,驱动沉浸新交互 |2022阿里云金融创新峰会

阿里云弹性计算

计算巢 云盒 倚天实例 专属Region

React Spring实战之API以及animated 组件的运用

恒山其若陋兮

8月月更

【数据结构实践】手把手带你快速实现自定义二叉树

迷彩

数据结构 算法 二叉树 二叉树遍历 8月月更

zookeeper的特点和应用场景

浅羽技术

zookeeper 分布式 观察者模式 注册中心 8月月更

【React】使用Next.js构建并部署个人博客

海底烧烤店ai

nuxt 博客开发 博客搭建 react rout 8月月更

[JS入门到进阶] 手写解析uin8数组的工具:解析二进制字节,太快太方便了!

HullQin

CSS JavaScript html 前端 8月月更

加速拥抱数字化,云时通打造全新数字中台!

创意时空

【JVM】HotspotJVM中的对象及引用

小明Java问道之路

JVM 内存 引用 对象 8月月更

【实践】手把手带你实现JWT登录鉴权

迷彩

分布式 微服务 前后端分离 JWT 8月月更

zookeeper的选主过程

浅羽技术

zookeeper 分布式 ZooKeeper原理 8月月更

mysql基础

楠羽

#开源

源码解析 kubectl port-forward 工作原理

张晓辉

Kubernetes 云原生 源码解析

佛山复星禅诚医院黄汉森:云边协同,打造线上线下一体化智慧医疗

阿里云弹性计算

弹性计算 分布式云 云盒 异地双活

【JVM】HotspotJVM对象的分配策略,栈上分配与TLAB

小明Java问道之路

8月月更

【JVM】HotspotJVM分代回收机制

小明Java问道之路

8月月更

非关系型数据库Redis核心内容

浅羽技术

数据库 redis redis持久化 Memcache 8月月更

【CSS】怎么理解层叠性、继承性和优先性?选择器的权重如何叠加?

翼同学

CSS html 前端 编程语言 8月月更

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