课程链接:https://aistudio.baidu.com/aistudio/course/introduce/1767
一、回顾FCN
1. 关于网络中加入padding100的作用
这个是为了适应所有的输入图片尺寸
因为是全卷积操作,理论上应该能适应各种尺寸输入大小的图片
巧妙之处:
-
为什么说加padding100就可以解决这个问题,其实加入224/2的padding也是可以的,但是100就已经够了。这个padding100是在L1的conv中加入的
加入这个可以在输入尺寸为极端的1*1的时候,也能保证在upsample的时候能有正确的输出。
- 关于crop的操作,是在上采样之后与原来对应层相加时需要的操作
这个工作在现在来看已经不需要这么麻烦了,使用一个双线性插值(直接插值到我想要的图像大小即可)即可解决,不需要care shift多少个pixel,但是当时这个FCN网络是在caffe上实现的,当时能跑起来caffe实现一个算法就已经能找到工作了。所以当时这个还是很牛的
FCN的优缺点
- 优点:
- 任意尺寸输入
- 效率高(相较以前)
- 结合浅层信息
- 缺点:
- 分割结果不够精细
- 没有考虑上下文信息
从图中可以看出,只考虑32倍采样的结果并没有考虑多层信息(浅层的信息,FCN32只考虑最后一层的信息)的效果好。
**上下文信息:**左顾右看,看看旁边有啥,不单希望这个pixel能看到上下左右是啥 ,还希望能看到更远的距离是啥。这是一个比较虚的概念。
二、U-Net网络
UNET比较吃显存,并且效果并没有那么好,虽然有改进,推荐大家还是多关注下PSPNet 和DeepLab
这个网络的作者是英国的一个学校的教授,同时也在DEEPMind兼职,这篇文章最开始发的是会议,后来发到了Nature上,主要是用于医学领域。
根据下面的两个图,正常来说就应该可以搭建出来网络了,这个老师喜欢将operation和feature map分开,上面的图就是op的 下面的就是feature map的
在具体实现网络的时候,在做concatenation操作的时候,浅层特征(也就是下采样的时候)和后面up sample的时候,对应的大小不一样,这时候就需要进行copy and crop操作了,因为由于conv或者pooling的操作可能导致的这个问题
融合操作
使用concate就可以实现,当浅层信息的size与上采样不一样的时候,可以对浅层信息进行crop操作,然后与对应上采样层的信息进行连接,连接后就变成一个feature map了,这时候再通过一个conv1x1的操作就可以实现融合了,因为卷积操作会对所有的channel进行操作的。
关于分割图使用softmax的原理
在这个图中,我们的softmax是针对n_classes这个轴进行的,例如我们之前设置的n_classes为59,这时候我们对这个轴进行softmax,然后就会得到一个得分,将最高的保留,其他的舍去,这时候就只剩下1个channel了,就达到最后输出的channel为1的分割图了,并且这个分割图中的每个像素的分类结果就是通过softmax得到的最优值
为什么在softmax后面还需要加argmax
其实我们在训练的过程中是不需要加的,我们在最终生成预测的时候需要加一个argmax,因为我们需要知道0-59分类哪个概率最大,然后将这个pixel分到哪一类。
BNrelu什么时候加
通常加在conv后面
U-Net和FCN有啥区别
U-Net将每个浅层信息和upsample后的信息都融合了
并且没有完全使用vgg的网络