P3.FCN网络结构详解
1.前言
Fully Convolutional Networks for Semantic Segmentation 2015CVPR
https://arxiv.org/abs/1411.4038
首个端对端的针对像素级预测的全卷积网络
全卷积:将分类网络中的全连接层全部替换为卷积层
PASCAL VOC2011、2012test数据集,与当年的一些主流网络对比,mean IOU提升了20%,推理时间更短
FCN-32s通过一系列的卷积下采样得到特征层,特征层的channel为21,因为在当年使用的数据集还是PASCAL VOC(有20个类别,加上背景一共有21个类别)。再经过上采样得到一个和原图同样大小的一个特征图(channels=21),该特征图的每个pixel都有21个值,对这21个值进行softmax处理,得到该像素针对每一个类别的预测概率,取概率最大的类别作为该像素的预测类别
2.Convolutionalization
4096,4096,1000对应的是全连接层的输出
输入一张图片,通过分类网络最后会得到一个针对1000个类别的预测值,这1000个预测值通过softmax处理之后得到针对每个类别的概率
全连接层的输入结点的个数是固定的,如果改变会报错
将全连接层转化为卷积层
输入图片大小大于24x24,最终得到的特征层的高度和宽度是大于1的,对应每个channel的数据是2d的数据,将其可视化为一张图片的形式(heatmap)
3.VGG16
VGG16——D
224x224x3 -> 7x7x512 下采样了32倍
4.全连接层和卷积层
全连接层计算对应某个结点的输出,将该结点与上一层每个结点的权重与输入对应结点的数值进行相乘再求和,得到对应结点的输出
卷积层(kernel_size=7x7,stride=1,kernel_number=4096,padding可调),卷积核与输入特征矩阵的相应位置的元素进行相乘再相加
全连接层一个结点的参数与一个卷积层的参数相同
第一个全连接层转化为卷积层的过程(Convolutionalization)
将全连接层每一个结点所对应的权重进行reshape处理就能直接赋值给卷积层使用了
通过展平操作就没有高和宽的信息了——4096
卷积能够保留高度和宽度信息——1x1x4096
5.FCN-32s,16s,8s
FCN-32s 将预测结果上采样了32倍,还原回了原图大小
FCN-16s 将预测结果上采样了16倍,还原回了原图大小
FCN-8s 将预测结果上采样了8倍,还原回了原图大小
在backbone的第一个卷积层将padding设置为100,为了让FCN网络适应不同大小的图片而设置的
输入图片大小小于192x192,通过VGG模型的backbone,高和宽就小于7,若padding=0则会报错,padding=3就可以训练任意高宽大于32的图片,没必要padding100(增大了网络的计算量;上采样后需要做一定的裁剪)
Convolutionalization FC6、FC7
1x1卷积,num_class 包含背景的分类类别个数
转置卷积,上采样32倍,恢复到原图的大小,冻结权重,上采样率过大
使用双线性插值的参数初始化转置卷积的参数
通过上采样之后,针对每一个pixel有num_class个参数
经过softmax处理就能得到针对每一个像素的预测类别
转置卷积的上采样率为2倍
额外使用来自MaxPooling4(下采样率16)输出的特征图
额外使用来自MaxPooling4(下采样率8)输出的特征图
融合相对底层的特征图信息
6.损失计算
针对每一个pixel计算Cross Entropy Loss,将所有Cross Entropy Loss求平均得网络的最终损失
7.语义分割评价指标
见P1