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

↑↑↑关注后"星标"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:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值