赞
踩
↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
方向:图像分割技术
图像分割技术是计算机视觉领域的一个重要的研究方向,早在2019年开源的图像分割套件PaddleSeg已经广泛被企业与开发者应用在实际生产当中。
自动驾驶,正是基于图像分割技术,汽车才能分清楚哪里是路,哪里是人。
在抗疫最前线的医疗阵地上,图像分割也发挥了巨大作用。连心医疗使用PaddleSeg开发上线了“基于CT影像的肺炎筛查与病情预评估AI系统”,可快速识别CT影像上的肺炎病灶信息,帮助我们的白衣战士节省了大量诊断和评估时间。
除了此之外,PaddleSeg还可以用在很多其它场景,话不多说,咱们直接上图:
工业场景中的表计读数自动读取
遥感图像分割
人体解析
人像分割+背景替换。(你以为我在旅游?其实我在加班)
基于人像分割,我们还可以进一步把彩色图像变素描
应用PaddleSeg一举夺冠
PaddleSeg不仅能力覆盖全面,而且里面的独立算法还极其优秀!在刚刚结束的神经信息处理系统大会NeurIPS 2020(Conference and Workshop on Neural Information Processing Systems)上,百度团队就是使用了PaddleSeg中单个语义分割模型HRNet,该模型已在CityScapes等多个公开数据集上获得了SOTA结果。最终百度团队一举夺冠,准确性得分领先第二名0.37,推理速度更是第二名的7倍。
焕然一新的PaddleSeg
是不是感觉PaddleSeg很厉害呢?其实咱们刚刚看到的只是冰上一角而已!近期,随着飞桨框架升级了2.0版本,PaddleSeg也随之进行了升级。在新的版本中,PaddleSeg提供了:
更加丰富的高精度模型算法:包括20+分割网络、50+预训练模型,模型精度均优于其它实现方式。
优秀的动转静功能:PaddleSeg依托飞桨框架集成了优秀的动转静功能,让用户在部署上具有更好性能。
更加灵活易用的开发体验:PaddleSeg在原先配置文件运行方式之外又新增了API接口调用方式,更加灵活易用。
下面将为大家细细分解!
PaddleSeg全景图
更加丰富的高精度模型
PaddleSeg支持U-Net,PSPNet,DeepLabV3+,OCRNet等20多种主流分割模型,提供了Xception、MobileNet、ResNet、HRNet等多种骨干网络,可以满足不同性能和精度的要求,同时目前开源的模型的精度均由于业内同类产品的模型。
表1 PaddleSeg中模型精度数据
光说不练假把式!单纯说自己模型精度有多高,无异于是耍流氓。为了进一步验证PaddleSeg模型的精度,我们分别在两个主流数据集Cityscapes和PASCAL VOC 2012上和其它同类产品的模型做了详细的对比实验。
下图展示了对比结果。左边模型使用ResNet50做为骨干网络,右边模型使用ResNet101做为骨干网络。可以看到与其它实现相比,PaddleSeg模型的精度明显更加优秀!
Cityscapes数据集对比实验
(其中FCN和OCRNet使用HRNet_w18作为主干网络)
基于PASCAL VOC 2012数据集对比实验
(FCN和OCRNet使用HRNet_w18作为主干网络)
优秀的动转静功能
基于飞桨框架2.0的PaddleSeg,提供了更加易用完备的动态图体验。虽然动态图在训练过程中更加方便调试,但是在部署上却明显吃力。为此飞桨提供了一套模型动转静的方式,其基本原理是通过分析Python代码来将动态图代码转写为静态图代码,并在底层自动帮助用户使用静态图执行器运行。这种转换方式让用户可以灵活使用Python语法及其控制流来构建神经网络模型。
依托飞桨框架,PaddleSeg也拥有了一键动转静能力,仅需添加一个装饰器并调用API接口paddle.jit.save,即可完成模型的转换。具体我们可以看下面的例子:
定义网络
- import numpy as np
- import paddle
- # 定义了一个简单全连接网络SimpleFcLayer
- class SimpleFcLayer(paddle.nn.Layer):
- def __init__(self, batch_size, feature_size, fc_size):
- super(SimpleFcLayer, self).__init__()
- self._linear = paddle.nn.Linear(feature_size, fc_size)
- self._offset = paddle.to_tensor(
- np.random.random((batch_size, fc_size)).astype('float32'))
- # 添加装饰器
- @paddle.jit.to_static
- def forward(self, x):
- fc = self._linear(x)
- return fc + self._offset
模型转换
- import paddle
-
- fc_layer = SimpleFcLayer(3, 4, 2)
- in_np = np.random.random([3, 4]).astype('float32')
- input_var = paddle.to_tensor(in_np)
- out = fc_layer(input_var)
- # 使用paddle.jit.save接口存储模型
- paddle.jit.save(fc_layer, "./fc_layer_dy2stat", input_spec=[input_var])
转换成静态图模型做部署就可以获得更好的性能,实现单车变跑车的进化!
灵活易用的开发体验
在用户使用体验上,PaddleSeg提供了两种使用方式:
仅需要少量代码或指令就可以通过PaddleSeg中组合好的配置文件快速开始模型训练,从而更快捷高效地搭建出从训练到部署的图像分割模型“生产流水线”。
同时PaddleSeg还提供了简单的API接口,开发人员在使用pip install命令安装PaddleSeg后,仅需通过几行代码即可轻松实现图像分割模型的训练、评估和推理。
用户既可以自由选择快捷高效的配置文件方式,也可以选择使用更加定制化的API调用方式,大大提升了用户体验的灵活易用性。
PaddleSeg高精度模型探究
刚才说到模型算法,提到过PaddleSeg的模型精度都是很牛的,可是你想知道为什么这么厉害吗?
为了能有更好的性能提升,PaddleSeg开发团队在跳跃连接、空洞卷积、全局上下文、注意力机制、骨干网络优化五个方面做了深入的研究,将这些优化策略融合在已实现的模型中,极大的提升了模型的精度。尤其是基于百度自研的半监督标签知识蒸馏方案(SSLD),PaddleSeg开发团队训练出了高精度骨干网络,使得整个分割网络的精度有了明显的提升。
下表为PaddleSeg各个模型所采用的策略说明,详细的模型优化策略,用户可以根据配置文件进一步了解。
表2 PaddleSeg模型的优化策略
开源地址
Github地址:
https://github.com/PaddlePaddle/PaddleSeg
也欢迎大家进入QQ交流群(1004738029),或者是扫码入群和各位志同道合对的小伙伴们交流。
关于文中模型精度对比更详细的数据,可参考:
https://arxiv.org/pdf/2101.06175v1.pdf
·飞桨图像分割套件PaddleSeg项目地址·
GitHub: https://github.com/PaddlePaddle/PaddleSeg
Gitee: https://gitee.com/paddlepaddle/PaddleSeg
点击"阅读原文"立即Star:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。