FCN论文链接:Fully Convolutional Networks for Semantic Segmentation
文章目录
1.FCN网络的引入
1.创新点
1.首个端对端的针对像素级预测的全卷积网络
2.全卷积:将分类经典网络中的全连接层全部替换为卷积层
3.跳跃连接:对前后特征图的补偿
4.反卷积:对特征图尺寸的恢复
由于全连接层的存在,所以必须固定图片输入的大小
PASCAL VOC2011、2012test数据集,与当年的一些主流网络对比,mean IOU提升了20%,推理时间更短
2.主要思想
先下采样,最后再上采样一个和原图大小相同的分割图
1.下采样
2.上采样(不同的网络不同的合并方式)
3.softmax分类预测类别
FCN-32s通过一系列的卷积下采样得到特征层,特征层的channel为21,因为在当年使用的数据集还是PASCAL VOC(有20个类别,加上背景一共有21个类别)。再经过上采样得到一个和原图同样大小的一个特征图(channels=21),该特征图的每个pixel都有21个值,对这21个值进行softmax处理,得到该像素针对每一个类别的预测概率,取概率最大的类别作为该像素的预测类别
3.论文补充
1.感受域(感受野)
2.平移不变性
1.不变性?
不变性意味着即使目标的外观发生了某种变化,但是你依然可以把它识别出来。这对图像分类来说是一种很好的特性,因为我们希望图像中目标无论是被平移,被旋转,还是被缩放,甚至是不同的光照条件、视角,都可以被成功地识别出来。
所以上面的描述就对应着各种不变性:
平移不变性:Translation Invariance
旋转/视角不变性:Ratation/Viewpoint Invariance
尺度不变性:Size Invariance
光照不变性:Illumination Invariance
2.平移不变性/平移同变性(分割任务中常用到)
在欧几里得几何中,平移是一种几何变换,表示把一幅图像或一个空间中的每一个点在相同方向移动相同距离。比如对图像分类任务来说,图像中的目标不管被移动到图片的哪个位置,得到的结果(标签)应该是相同的,这就是卷积神经网络中的平移不变性。
平移不变性意味着系统产生完全相同的响应(输出),不管它的输入是如何平移的 。平移同变性(translation equivariance)意味着系统在不同位置的工作原理相同,但它的响应随着目标位置的变化而变化 。
比如,实例分割任务,就需要平移同变性,目标如果被平移了,那么输出的实例掩码也应该相应地变化。最近看的FCIS这篇文章中提到,一个像素在某一个实例中可能是前景,但是在相邻的一个实例中可能就是背景了,也就是说,同一个像素在不同的相对位置,具有不同的语义,对应着不同的响应,这说的也是平移同变性。
3.shift-and-stitch(拼接过程,用于密集预测任务)
后续的论文一般不再使用此方法,单纯作为理解论文了解。shift-and-stitch
4.类别平衡
类别不平衡的解决办法:通过调整不同类别的权重。(比如如果背景比较多的话,那么调小背景的权重就是一个不错的办法)
5.数据预处理
数据预处理:随机镜像 (随机、裁剪、翻转、颜色、亮度、光照)
2.Convolutionalization
4096,4096,1000对应的是全连接层的输出
输入一张图片,通过分类网络最后会得到一个针对1000个类别的预测值,这1000个预测值通过softmax处理之后得到针对每个类别的概率
全连接层的输入结点的个数是固定的,如果改变会报错
3.VGG16(使用框架)
目前官方实现代码都是resnet
224x224x3 -> 7x7x512 下采样了32倍
4.全连接层和卷积层
全连接层计算对应某个结点的输出,将该结点与上一层每个结点的权重与输入对应结点的数值进行相乘再求和,得到对应结点的输出
卷积层(kernel_size=7x7,stride=1,kernel_number=4096,padding可调),卷积核与输入特征矩阵的相应位置的元素进行相乘再相加
全连接层一个结点的参数与一个卷积层的参数相同
第一个全连接层转化为卷积层的过程(Convolutionalization)
将全连接层每一个结点所对应的权重进行reshape处理就能直接赋值给卷积层使用了
通过展平操作就没有高和宽的信息了——4096
卷积能够保留高度和宽度信息——1x1x4096
5.FCN-32s,16s,8s
3.FCN-32S
在backbone的第一个卷积层将padding设置为100,为了让FCN网络适应不同大小的图片而设置的
输入图片大小小于192x192,通过VGG模型的backbone,高和宽就小于7,若padding=0则会报错,padding=3就可以训练任意高宽大于32的图片,没必要padding100(增大了网络的计算量;上采样后需要做一定的裁剪)
(padding=3能训练出来大小相等的图片,output = inputsize - kernel + padding 2 + stride / stride 32-7+32+1/1=32)
Convolutionalization FC6、FC7
1x1卷积,num_class 包含背景的分类类别个数
转置卷积,上采样32倍,恢复到原图的大小,冻结权重,上采样率过大
使用双线性插值的参数初始化转置卷积的参数
通过上采样之后,针对每一个pixel有num_class个参数
经过softmax处理就能得到针对每一个像素的预测类别
2.FCN-16S
转置卷积的上采样率为2倍
额外使用来自MaxPooling4(下采样率16)输出的特征图
3.FCN-8S
额外使用来自MaxPooling4(下采样率8)输出的特征图
融合相对底层的特征图信息
6.损失计算
针对每一个pixel计算Cross Entropy Loss,将所有Cross Entropy Loss求平均得网络的最终损失