火爆 GitHub!这个图像分割神器开源了
今天要给大家介绍的这个开源套件,就涵盖业界最前沿的图像分割算法,并效果超群,这就是 PaddleSeg!!OMG,还在等什么?!盘他!盘他!盘他!
除了在自动驾驶技术拥有绝对重要的地位,图像分割技术在抗疫最前线的医疗阵地也发挥了巨大作用!比如基于图像分割技术开发的《CT 影像的肺炎筛查与病情预评估 AI 系统》,可快速识别 CT 影像上的肺炎病灶信息,帮助我们的白衣战士节省了大量诊断和评估时间!
那么图像分割还有哪些应用呢?比如可以做人像分割 + 背景替换。你以为我在旅游?其实我在加班。
还可以做人体解析,同全球冠军模型分析全球冠军运动员的行为轨迹,像《夺冠》里描述的,现在体坛也已经是全面的数字化战争!
我们还可以基于分割技术进一步把彩色图像变素描。
在工业巡检场景中,图像分割技术还可以细致的分割出的表计盘刻度和指针,实现自动读数系统。
遥感图像分割技术还可以帮助国土资源监控保护单位、气象单位等实现地面、大气检测,建筑物检测、农耕用地检测、地块变化检测、地面目标检测、气旋检测等等!
看到这里,你还在等什么?!PaddleSeg又有用、又好玩,在此强烈建议大家去尝试。
那么PaddleSeg到底是个啥呢?去Github上去扒了一下官方的解释:
PaddleSeg是基于飞桨开发的端到端图像分割开发套件,涵盖了高精度和轻量级等不同方向的大量高质量分割模型。通过模块化的设计,帮助开发者完成从训练到部署的全流程图像分割应用。下面就给大家讲讲PaddleSeg的特点和近期更新的内容:
精度全面领先的开源模型
目前PaddleSeg开源了在Cityscapes验证集上达到87% mIoU的语义分割模型是目前业界最高精度的实现。该模型基于Hierarchical Multi-Scale Attention结构,通过损失函数、训练策略、评估方法等方面的优化,相比HRNet的81.5%更是高出了5.5个百分点。
https://github.com/PaddlePaddle/PaddleSeg/tree/release/v2.0/contrib/CityscapesSOTA
国际冠军都在用的PaddleSeg
PaddleSeg不仅能力覆盖全面,而且里面的独立算法还极其优秀!在刚刚结束的神经信息处理系统大会NeurIPS 2020(Conference and Workshop on Neural Information Processing Systems)上,百度团队就是使用PaddleSeg中的HRNet一举夺冠,准确性得分领先第二名0.37,推理速度更是第二名的7倍!!!目前该代码已经开源,链接如下:
https://github.com/PaddlePaddle/PaddleSeg/tree/release/v2.0/legacy/contrib/NeurIPS_SN7
焕然一新的PaddleSeg
是不是感觉PaddleSeg很厉害呢?其实咱们刚刚看到的只是冰上一角而已!近期,随着飞桨框架升级了2.0版本,PaddleSeg也随之进行了升级。在新的版本中,PaddleSeg提供了:
更加丰富的高精度模型算法:包括20+分割网络、50+预训练模型,模型精度均优于其它实现方式。
优秀的动转静功能:PaddleSeg依托飞桨框架集成了优秀的动转静功能,让用户在部署上具有更好性能。
更加灵活易用的开发体验:PaddleSeg在原先配置文件运行方式之外又新增了API接口调用方式,更加灵活易用。
下面将为大家细细分解!
PaddleSeg全景图
更加丰富的高精度模型
PaddleSeg支持U-Net,PSPNet,DeepLabV3+,OCRNet等20多种主流分割模型,提供了Xception、MobileNet、ResNet、HRNet等多种骨干网络,同时目前开源的模型的精度均高于业内同类产品的实现。
为了进一步验证PaddleSeg模型的精度,我们分别在两个主流数据集Cityscapes和PASCAL VOC 2012上和其它同类产品的模型做了详细的对比实验。
下图展示了对比结果。左边模型使用ResNet50做为骨干网络,右边模型使用ResNet101做为骨干网络。可以看到与其它实现相比,PaddleSeg模型的精度明显更加优秀!
Cityscapes数据集对比实验(其中FCN和OCRNet使用HRNet_w18作为主干网络)
基于PASCAL VOC 2012数据集对比实验(FCN和OCRNet使用HRNet_w18作为主干网络)
优秀的动转静功能
基于飞桨框架2.0的PaddleSeg,提供了更加易用完备的动态图体验。虽然动态图在训练过程中更加方便调试,但是在部署上却明显吃力。为此飞桨提供了一套模型动转静的方式,在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形式,用户通过几行代码即可实现模型的训练、评估和推理。
结束语
介绍了这么多,小伙伴一定心动了想要跃跃欲试吧?如果大家觉得PaddleSeg给您带来更好的体验,那就请您动动小手, star支持一下!
Github地址:
关注公众号“肉眼品世界”,回复"开源010"获取
推荐阅读:
不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)