paddlepaddle 图像分割7日打卡训练营笔记

绪论

百度AIStudio 是个很好的深度学习训练平台,由于参加过目标检测7日打卡营,学到了很多干货,所以又报名了图像分割7日打卡营 2020年10月19日~10月26日,同时也从现在开始记录每节课的知识要点帮助加深印象和巩固复习。

:本文所有图片均截自课程ppt,同时只重点记录我关注的知识点,其它一笔带过,每期课程直播均有回放,若想查看具体资料和视频请点击以下地址。

地址https://aistudio.baidu.com/aistudio/course/introduce/1767

Class1 图像分割综述

图像分割类型

  • 语义分割(课程主要实现):给每个像素点分类
  • 实例分割:给每个框里的object分mask
  • 全景分割:背景像素点分类+框mask

应用场景

  • 人像分割
  • 自动驾驶(行人、车道线、车辆分割)
  • 医学影像(CT、病理)
  • 工业质检、分练机器人

语义分割算法基本概念

  • 根本目的:像素级分类

  • 基本流程:
    在这里插入图片描述

  • 评价指标:
    mAcc:pre和gt对应位置的分类准确率
    mIoU:每一类对应结果之间的交并比的平均值
    为什么要两个指标:acc只是分割类别的准确度,而mIoU加大了小物体的分割指标占比

实践部分

环境:paddle1.8.4 、python3.7

操作

  1. 简单网络搭建:basic_model.py
  2. 熟悉dataloader原理:basic_dataloader.py
  3. 分割数据处理:basic_transform.py

Class2 全卷积FCN网络

  • Full Converlutional Networks:全卷积,即没有FC层
  • 如何做语义分割? 语义分割~=像素级分类
  • 与图像分类的关系?把FC换为Conv
  • 分割和分类最大区别是分割需要做每一个像素级的分类
  • FCN不在乎输入图片的尺寸,他本身可以卷积任何尺寸

步骤一

实际上我们做的工作就是把传统分类方法变成分割,把FC变为FCN
在这里插入图片描述

1x1卷积:降维或者升维,输入到输出的HW(高和宽)是不变的,改变的是C(通道数channel),变化个数和1x1卷积个数一样。

步骤二

只通过FCN的方式达不到我们的目的,如下图,变为全卷积网络输出最后的尺度(HW)太小,最后分割效果会很差。所以需要把feature map尺寸变大到原图一样大小,才能做到更精细的分割任务。
在这里插入图片描述
如何在全卷积中由白色的小block最后变成下图蓝紫色的block进而去做分割?就要用到上采样(Upsample),有三种方式。
在这里插入图片描述

  • 1)Up-sampling

    相当于Bilinear Intepolation(双线性插值)
    在这里插入图片描述

    假设P点为需要插值的点,x1和x2为可以看为像素点,相减则为之间的距离

    在这里插入图片描述

    具体例子:3x3插值为6x6,为什么其中2没有了,是因为2刚好在插值的两个数之间(图中为1.8和2.2之间),毕竟它算是等比例插值。如果不是123这种顺序而是132,原理也是一样,就单独计算1和3、3和2之间的插值,相当3也会隐藏掉。

    在这里插入图片描述

  • 2)Un-pooling

    用的很少,丢失信息多,但速度快,可做了解。实际上就是反向Pooling

    如下图输入4x4,通过maxpool变成2x2,然后就Un-pooling还原为4x4,具体每个像素点的位置则需要一个index记录。

    在这里插入图片描述

  • 3)Transpose Conv(重点)

    标准的卷积是把Feature map通过卷积核变小,如下图左边

    反卷积是输入一个固定尺度的Feature map,输出变大的Feature map,如下图右边
    在这里插入图片描述

    操作步骤:

    1、先把Kernel klockwise180,就是把卷积核做个水平和垂直的翻转,如下图白色3x3卷积核变为绿色。

    2、conv with padding,根据卷积核大小添加padding,使之每次都是与输入Feature map的左上角第一个数做卷积,如下图:4x4输出的1=卷积核的又下角1 x 输入的左上角的1。

    3、对应求出各点的值。

    在这里插入图片描述

小总结:实际上这三个方法的就是把Feature map变大,具体的使用只需要填参数就可以了。

步骤三

有了以上工具我们看看整体的FCN网络结构,如下图:

  • Encoder编码器是把Feature map逐渐变小,可以看成vgg。

  • Decoder解码器就是做一系列上采样卷积操作,然后做个Softmax分类,最后得到和输入尺寸一样大的分割图。有了这个就可以算loss和训练。

  • FCN结构就是这样,无非里面层数和参数不同,比如u-net、pspnet、deeplab都是这个原理。

在这里插入图片描述

具体的结构采用自fcn论文原文,backbone采用vgg16:

其中全面不变,最后conv6-7原文采用的是fc,此处需要经过1x1卷积核变成卷积的结构,在在后面加上upsample,最后得出和原图大小一样的Feature map。

论文题目:Fully Convolutional Networks for Semantic Segmentation
论文地址:https://arxiv.org/abs/1411.4038

在这里插入图片描述

实际上的应用不会这样做,只有一个上采样效果可能不好,需要采用多层特征融合的形式:

如图左边,FC7出来的block做个2倍的上采样便与Pool4的维度一样,可以做个融合后再2倍上采样,又与Pool3一样,继续融合做个8倍上采样就得到与原图一样尺度的Feature map,最后做个Softmax就OK了。

在这里插入图片描述

FCN的巧妙之处

这是第三节课的开头内容,我直接统一放到这里了。

  • 问题1:vgg的输入经过layer1层为什么要加个[100,100]的padding,如下图红色方框处?
    在这里插入图片描述

    解答:这是为了适应FCN网络的任意尺寸输入,最终都可以把输出还原成输入的尺寸。假设输入224x224,经过一系列pool后成为7x7,最终经过FC6层后能够变成1x1。但是如果输入为1x1,那再经过pool始终都依旧是1x1,经过FC6就会报错.那么在layer1层加上padding=100,相当于输入就变为199x199,经过pool后依旧是7x7,便可以正常输出。

  • 问题2:为什么cropping取值为[3, 9, 31]?这里是在特征的多尺度融合的案例中体现的

    在这里插入图片描述

    解答:具体计算不说了,就是为了匹配各个需要融合的Feature map的尺寸。融合pool4时,需要Cropping出原本Pool4层的中间部分,其舍弃的padding就是5;融合pool4时舍弃的padding为9。有意思的来了,上采样8倍的时候得到的最后的Feature map与layer1(就是问题一中添加了100padding的输入)对比,相差的padding就为刚好为32,由于有时候像素会偏移,所以相差一个pixel没关系,最终得到的就是31。

    感觉没讲清楚,可以自己去看看原视频,实际上具体不需要太care计算过程,只要知道是干嘛的就ok,毕竟都时直接拿来用的。

总结

优点:

  • 任意尺寸输入
  • 效率高(相较以前)
  • 结合浅层信息

缺点:

  • 分割结果不够精细
  • 没有考虑上下文信息(指像素点周围的信息)

Class3 U-Net/PSPNet模型

1、U-Net

这篇文章主要在医学中的视觉方向的影响力比较大。

论文名称:U-Net: Convolutional Networks for Biomedical Image Segmentation
论文地址:https://arxiv.org/abs/1505.04597

  • 实际上依旧是encode、decode的模式,如下图

    在这里插入图片描述

  • 主要就像下面这种u形结构,创新点就是把前面浅层的信息直接与后面上采样的Feature map通过concat叠加融合
    在这里插入图片描述

  • 简单的结构图:

    在这里插入图片描述
    注:这种方式可能会存在融合尺度大小不匹配的情况,就同FCN一样采用Crop,然后再Conv。

  • 最后的输出层与FCN一样

    在这里插入图片描述

    如上图最后的Feature map为h x w x 64,它的维度为64,假设要求分割的数据类别是9类,前面也说了分割是像素级分类,那么就需要把这64维变成9。

    第一步:那么最简单就是1x1卷积,只需要改变维度而不改变h和w。

    第二步:此时已变成h x w x 9,再在9这个维度上做softmax分类。softmax就是把一些输入映射为0-1之间的实数,并且归一化保证和为1,广泛用于多分类的场景中。

    第三步:此时已得到了每个维度的概率分布,然后argmax取得最大的概率对应的类别,即把9的维度变为1,那么最后输出的就是h x w x 1

  • 与fcn区别:在前面网络的encode结构中用了特征融合,不单纯用vgg。

  • 主要的操作在这里插入图片描述

2、PSPNet

论文名称:Pyramid Scene Parsing Network
论文地址:https://arxiv.org/abs/1612.01105

  • 1、PSPNet主要添加了FCN没有考虑的上下文信息。

    上下文信息(context info):下图第一张图是输入,第二张是GT,第三张是FCN输出,第四张是PSPNet,不考虑上下文信息,FCN就容易把图中的船单独分割成车。添加上下文信息之后,根据旁边信息是水和树,就可以判别出这是船。简而言之就是像素点周围的信息
    在这里插入图片描述

    2、如何添加上下文信息,就需要增大感受野。

    感受野(receptive field):用于产生特征输入图像中的区域大小,只针对局部操作,如conv、pooling。

  • 网络主要结构与步骤详解

    1)输入一张图像,经过backbone(图中cnn处)输出到图中步骤b,生成 Cx64x64 的Feature map。

    2)然后有一个Adaptive Pooling的操作(图中POOL),就是给定输入的Feature map和一个(n,n)的尺度,最终输出的就是nxn的特征图,默认是输出4个block,分别为Cx1x1、Cx2x2、Cx3x3、Cx6x6。

    3)接下来做一个降维操作(中间的CONV),也就是1x1卷积,维度统一降成C/4,目的是最后可以拼回原维度。

    4)维度的组合解决了,现在就需要处理尺度问题,也就是上采样操作(UPSAMPLE),最终生成4个 C/4x64x64 的特征图,代表的是不同感受野的信息。

    5)最后一步就是concat这4个block成为一个Cx64x64,再与步骤b的Feature map做一个concat生成最终的特征图。
    6)最后的CONV实际上是个Classfier,里面是卷积、BN再卷积。

    在这里插入图片描述
    :这里有个 Adaptive Pooling 的概念要和 1x1卷积 区分开来,AP是不改变维度改变尺度,而1x1卷积是不改变尺度改变维度。如下图所示:
    在这里插入图片描述

Class4 DeepLab系列算法

1、 Dilated Conv原理和细节

在这里插入图片描述

2 、DeepLab系列解读

DeepLab Series:

关键结构对比:

在这里插入图片描述

  • DeepLab V1:
    在这里插入图片描述

  • DeepLab V2:
    添加了ASPP模块(空洞空间卷积池化金字塔 Atrous Spatial Pyramid Pooling)

  • DeepLab V3:
    添加了upgraded ASPP模块
    在这里插入图片描述

在这里插入图片描述

  • DeepLab V3+:

Class5 图卷积网络算法

Class6 实例与全景分割

1、实例分割和全景分割

2、经典方法

  • 实例分割:

    Proposal- based/Top-down:Mask RCNN [ICCV 2017]

    Proposal-free/Bottom-up:SOLO [ECCV 2020]

  • 全景分割

    Proposal- based/Top-down:UPSNet [CVPR 2019]

    Proposal-free/ Bottom-up:Panoptic- DeepLab [CVPR 2020]

Class7 课程总结和PaddleSeg介绍

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
工程训练大赛开环打卡赛题是关于AI凸轮设计的任务,我们可以在CSDN上找到相关的应用程序(App)。 AI凸轮设计是一项利用人工智能技术开发的凸轮设计方法,它可以优化凸轮的设计过程,提高凸轮在机械系统中的性能。这个赛题要求我们设计一个可以帮助工程师进行AI凸轮设计的应用程序。 在CSDN上搜索相关内容,我们可以找到很多与AI凸轮设计相关的技术文章和项目案例。这些资源可以帮助我们了解AI凸轮设计的基本原理和应用方法。 针对这个任务,我们可以开发一个名为"AI凸轮设计App"的移动应用程序。这个App将提供以下功能: 1. 数据收集与分析:用户可以输入相关机械系统的参数和要求,然后App会收集并分析这些数据,为凸轮设计提供参考。 2. AI凸轮设计算法:App内嵌有AI凸轮设计算法模块,可以自动计算和优化凸轮的设计。 3. 可视化展示:App可以将AI凸轮设计的结果以可视化的方式展示给用户,包括凸轮的形状、尺寸和运动轨迹等。 4. 参数调整和优化:用户可以通过调整输入参数来进一步优化凸轮设计,App会即时更新设计结果。 5. 数据导出:用户可以将AI凸轮设计的结果导出为文件,以供其他工程软件或设备使用。 通过这个"AI凸轮设计App",工程师可以更加高效地设计凸轮,减少人工设计的工作量,提高设计的准确性和效率。这个App还可以为工程师提供参考,帮助他们更好地理解AI凸轮设计的原理和应用。 总的来说,通过开发这款应用程序,我们可以方便工程师在移动设备上进行AI凸轮设计,提高设计效率和准确性,推动工程技术的发展和应用。这也符合工程训练大赛开展的宗旨和主题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值