Press "Enter" to skip to content

精度87%!业内首个动静统一的图像分割套件重磅推出

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

方向:图像分割技术

图像分割技术是计算机视觉领域的一个重要的研究方向,早在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//2101.06175v1.pdf

 

·飞桨图像分割套件PaddleSeg项目地址·

 

GitHub: https://github.com/PaddlePaddle/PaddleSeg

 

Gitee: https://gitee.com/paddlepaddle/PaddleSeg

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注