48 全连接卷积神经网络 FCN【动手学深度学习v2】

全连接卷积神经网络(FCN)
- Fully Convolutional Network,FCN
- 语义分割是对图像中的每个像素进行分类,输出的类别预测与输入图像在像素级别上具有一一对应关系:通道维的输出即为该位置对应像素的类别预测
- FCN 采用卷积神经网络实现了从图像像素到像素类别的变换,区别于图像分类和目标检测中的卷积神经网络,全连接卷积神经网络通过引入转置卷积将中间层特征图的高和宽变换回输入图像的尺寸
工作原理
它用转置卷积层来替换 CNN 最后的全连接层,从而可以实现每个像素的预测

1、CNN 可以认为是在 ImageNet 上面预训练好的模型
- 全连接卷积神经网络先使用卷积神经网络抽取图像特征
- CNN 模型的最后两层要么就是全连接层,这样可以做到 label 的语义信息,全连接层下面通常是一个全局平均池化层:全连接层将 224*224 的图片变成 7*7 的高宽,全局平均池化层再将 7*7 变成 1*1 ,不管怎么样将通道中的信息做平均
- 这对于图片分类来说没有什么问题,但是对于需要空间信息来说就不是那么好了,所以全连接卷积神经网络的 CNN 其实就是去掉了全连接层和最后的全局平均池化层,所以如果输入是 224*224 的图片的话,输出就是 7*7 的高宽,通道数可能是 512*512
2、1*1 的卷积层
- 通过 1*1 卷积层将通道数变换为类别个数
- 不会对空间信息做变化,主要是用来降低维度(降低通道数),从而降低计算量
3、transposed conv(转置卷积层)
- 转置卷积层就是将图片放大,将特征图的高和宽变换为输入图像的尺寸,从而使模型输出与输入图像的高和宽相同,并且最终输出通道包含了该空间位置像素的类别预测
- 假设 CNN 是将图片缩小的话,一般来说,对于 ImageNet 的 224*224 的图片来说是缩小 32 倍(高宽均缩小 32 倍),得到 7*7 的高宽
- 转置卷积层就是将图片扩大 32 倍,将 7*7 的高宽还原称为 224*224 ,通道数 K 等价于类别数(对每个像素的类别预测存储在通道信息中),这样的话,不管对于高宽为多少的图片,都会得到通道数为类别数且高宽相同(与输入图片的原始尺寸相同)的预测,这样就能实现对每个像素做标号和预测
- 在图像处理中,有时需要将图片放大(上采样,upsampling),双线性插值(bilinear interpolation)是常用的上采样方法之一,也常用于初始化转置卷积层(双线性插值的上采样可以通过转置卷积层实现)

训练
- 在训练时,因为使用转置卷积层的通道来预测像素的类别,所以需要在损失计算中指定通道维,模型基于每个像素的预测类别是否正确来计算准确率
预测
- 假设模型所使用的转置卷积层的步幅为 x ,为了解决输入图像的高或宽无法被 x 所整除时所造成的转置卷积层输出高或宽与输入图像尺寸的偏差问题,可以在输入图像中截取多块高和宽为 x 的整数倍的矩形区域(这些区域的并集需要完整覆盖输入图像),并分别对这些区域中的像素做前向传播(当一个像素被多个区域所覆盖时,它在不同区域前向传播中转置卷积层输出的平均值可以作为 softmax 运算的输入,从而预测类别)
总结
1、全卷积网络首先使用卷积神经网络抽取图像特征,然后通过 1*1 卷积层将通道数变换为类别个数,最后通过转置卷积层将特征图的高和宽变换为输入图像的尺寸
2、在全卷积网络中,可以将转置卷积层初始化为双线性插值的上采样
Q&A
- 1、当前检测如果只需要精度不考虑速度,有推荐的模型吗?YOLO v5 和 cascade rcnn哪个好一些?
QA P3 - 00:02
- 2、如果有相似场景数据 2 万张图片自己预训练提升大吗?能演示亚马逊 AutoGluon吗?AutoGluon做目标检测吗?
QA P3 - 00:47
- 3、请问网络中间1*1卷积,将7*7*512压缩到7*7*class_num,这样原来在512通道的信息,被强制压缩到num_class,不会造成很大的信息损失吗?
QA P3 - 01:12
- 4、老师,能不能画图说明一下padding怎么起作用的?
QA P3 - 02:13
- 5、没听懂padding 16 的由来
- 6、请问为什么不用多层小 kernel 的转置卷积,而是直接一层到位?
QA P3 - 02:29
- 7、老师,转置卷积层为什么只用一层,而不是用多层级联的形式?
- 8、如何通过卷积实现插值?
QA P3 - 03:25
- 9、没听懂为啥使用双线插值的方法
- 10、为什么不使用3次方插值,插值效果会更好吗?
- 11、初始化对最终有什么影响呢?
- 12、FCN和目前SOTA的模型相比,后续主要有哪些改进点?
QA P3 - 04:06
- 13、李老师,请问如果想导入 pre-trained 数据,目前的模型是不是要和 pre-trained 模型一致?
QA P3 - 04:33
----end----
其他参考
1、《动手学深度学习》,教材,https://zh-v2.d2l.ai/chapter_computer-vision/fcn.htm
2、《动手学深度学习》,PPT,https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_16.pdf