zoukankan      html  css  js  c++  java
  • 千亿美金公司的技术核心!这个图像分割库太炸了!

     

    CVer 今天

    点击下方卡片,关注“CVer”公众号

    AI/CV重磅干货,第一时间送达

    CVer
    CVer
    一个专注侃侃计算机视觉方向的公众号。计算机视觉、图像处理、机器学习、深度学习、C/C++、Python、诗和远方等。
    193篇原创内容
    公众号

    最近全球各大新势力造车公司简直不能再火!小编看着蹭蹭飙升的股价实在是眼红的不要不要的。而懂行的人都知道,以Telsa为首,各大公司都采用计算机视觉作为自动驾驶的技术底座,而其中正是通过图像分割技术,汽车才能分清楚哪里是路,哪里是人。

    那图像分割重不重要还需要小编强调么?而今天小编要给大家介绍的这个开源套件,就涵盖业界最前沿的图像分割算法,并效果超群,这就是PaddleSeg!!OMG,还在等什么?!盘他!盘他!盘他!

    图片

    除了在自动驾驶技术拥有绝对重要的地位,图像分割技术在抗疫最前线的医疗阵地也发挥了巨大作用!比如基于图像分割技术开发的《CT影像的肺炎筛查与病情预评估AI系统》,可快速识别CT影像上的肺炎病灶信息,帮助我们的白衣战士节省了大量诊断和评估时间!

    图片

    那么图像分割还有哪些应用呢?比如可以做人像分割+背景替换。你以为我在旅游?其实我在加班图片

    图片图片

    还可以做人体解析,同全球冠军模型分析全球冠军运动员的行为轨迹,像《夺冠》里描述的,现在体坛也已经是全面的数字化战争!

    图片

    我们还可以基于分割技术进一步把彩色图像变素描。

    图片

    在工业巡检场景中,图像分割技术还可以细致的分割出的表计盘刻度和指针,实现自动读数系统。

    图片

    遥感图像分割技术还可以帮助国土资源监控保护单位、气象单位等实现地面、大气检测,建筑物检测、农耕用地检测、地块变化检测、地面目标检测、气旋检测等等!

    图片

    看到这里,你还在等什么?!PaddleSeg又有用、又好玩,在此小编强烈建议大家去尝试,并点击Star支持一下开源。

    点击文末"阅读原文"或以下链接立即Star:

    https://github.com/PaddlePaddle/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地址:

    https://github.com/PaddlePaddle/PaddleSeg

    也欢迎大家进入QQ交流群(1004738029),或者是扫码入群和各位志同道合对的小伙伴们交流。

    图片

    关于文中模型精度对比更详细的数据,可参考

    https://arxiv.org/pdf/2101.06175v1.pdf

  • 相关阅读:
    OpenJDK源码研究笔记(三)-RandomAccess等标记接口的作用
    OpenJDK源码研究笔记(三)-RandomAccess等标记接口的作用
    Java实现蓝桥杯墓地雕塑
    Java实现蓝桥杯墓地雕塑
    求一亿以内的回文质数(素数)
    求一亿以内的回文质数(素数)
    求一亿以内的回文质数(素数)
    Java实现 LeetCode 232 用栈实现队列
    Java实现 LeetCode 232 用栈实现队列
    Java实现 LeetCode 232 用栈实现队列
  • 原文地址:https://www.cnblogs.com/shuimuqingyang/p/14541610.html
Copyright © 2011-2022 走看看