首先附上课程链接
https://aistudio.baidu.com/aistudio/course/introduce/1767
其次,感谢百度飞桨推出此课程
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卷积是不改变尺度改变维度。如下图所示:
笔记很详细唉
加油!共同进步!