深度学习-语义分割篇(霹雳吧啦)

 p3 FCN网络结构详解

1.前言

Fully Convolutional Networks for Semantic Segmentation 2015CVPR

https://arxiv.org/abs/1411.4038

首个端对端的针对像素级预测的全卷积网络

全卷积:将分类网络中的全连接层全部替换为卷积层

为什么要将全连接层变为卷积层?

对于传统的 CNN(即包含全连接层),一个确定的网络其输入图像的大小是固定的,比如 CaffeNet 的输入须是 227227。但对于更大的图像,在检测时就需要裁剪出很多 227227 的小图像分别送入 CNN 网络中,使得检测任务十分耗时且数据容易出错。所以针对较大的图像想要改变这种被固定输入的CNN。

为何CNN网络需要输入固定大小图像呢?

主要原因是因为全连接层的存在,当全连接层与前一层连接时,全连接层的权重是不变的,所以输入的图片大小不能变。全连接层做的是矩阵运算,故要求前列等于后行,否则不匹配无法运算。而卷积层可以让卷积网络在一张更大的输入图片上滑动,得到每个区域的输出,这样就突破了输入尺寸的限制,就获得了目标的位置信息。可以高效地对测试图像做滑动窗式的预测,可以高效的检测多个目标和给出位置信息。

当把全连接层替换成了卷积层后,就可以不限制输入图像的大小,一次性输入网络即可获得一张图片所有位置的检测目标概率,形成一幅 heat map。

PASCAL VOC2011、2012test数据集,与当年的一些主流网络对比,mean IOU提升了20%,推理时间更短。

FCN-32s通过一系列的卷积下采样得到特征层,特征层的channel为21,因为在当年使用的数据集还是PASCAL VOC(有20个类别,加上背景一共有21个类别)。再经过上采样得到一个和原图同样大小的一个特征图(channels=21),该特征图的每个pixel都有21个值,对这21个值进行softmax处理,得到该像素针对每一个类别的预测概率,取概率最大的类别作为该像素的预测类别。

2.FCN网络实现过程

FCN与CNN的核心区别就是FCN将CNN末尾的全连接层转化成了卷积层:以Alexnet为例,输入是227*227*3的图像,前5层是卷积层,第5层的输出是256个特征图,大小是6*6,即256*6*6,第6、7、8层分别是长度是4096、4096、1000的一维向量。如下图所示:

FCN网络:

 FCN网络思想:输入图像经过多次卷积,得到一个通道数为21的特征图,再经过上采样,得到一个与原图同样大小的特征图,再经过Softmax函数处理就能得到该像素针对Pascal Voc数据集每一个类别的预测概率,选择最大概率的类别作为该像素的预测类别。

在FCN中第6、7、8层都是通过卷积得到的,卷积核的大小全部是1 * 1,第6层的输出是4096 * 7 * 7,第7层的输出是4096 * 7 * 7,第8层的输出是1000 * 7 * 7(7是输入图像大小的1/32),即1000个大小是7*7的特征图(称为heatmap),如下图所示:

卷积层的通道数是指该层中卷积核(也称为过滤器或滤波器)的数量。每个卷积核都是一个小的二维矩阵,用于从输入数据中提取特定的特征。通道数影响了卷积层能够学习和表示的特征种类和数量。

3.VGG16模型:

 VGG16——D

224x224x3 -> 7x7x512 下采样了32倍

4.全连接层和卷积层


全连接:7*7*512进行展平后为25088个元素,然后进入全连接层,有4096个结点,每个结点对25088个元素进行计算并求和:全连接层计算对应某个结点的输出,将该结点与上一层每个结点的权重与输入对应结点的数值进行相乘再求和,得到对应结点的输出。忽略偏执则FC1参数数量为25088*4096=102760448个。

 卷积替代全连接:卷积层(kernel_size=7x7,stride=1,kernel_number=4096,padding可调),4096个卷积核对512张特征图进行卷积,padding=0时输出正好是1*1*4096的特征层,CNN参数数量为7*7*512*4096=102760448个。

全连接层一个结点的参数与一个卷积层的参数相同。

这里的padding(填充)可调指的是采用不同的padding可以改变我们得到的特征矩阵,例如padding=3时由n+2p-f+1=7+6-7+1=7,卷积前后矩阵的高和宽不发生改变,具体要得到什么样的输出尺寸可以根据我们的需要进行调整。

第一个全连接层转化为卷积层的过程(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(增大了网络的计算量;上采样后需要做一定的裁剪)

FC6、FC7:即为全连接转换为卷积层的部分,FC6中假设padding=3,则经过conv2d后n+2p-f+1=7+6-7+1=7图像的宽高不变,再经过FC7的卷积层后,n+2p-f+1=7+0-1+1=7所以图像的宽高也不变。

Conv2d层:num_class 为包含背景的分类类别个数(PASCAL VOC 则为20+1),经过1x1卷积后高宽不变,通道数变为num_class个

转置卷积:s32上采样32倍,恢复到原图的大小,对权重进行冻结,则无需训练权重,可以加速网络训练过程,那么ConvTranspose2d相当于一个双线性插值,论文中是否冻结权重其结果差不多,这可能是因为上采样率过大。使用双线性插值的参数初始化转置卷积的参数,通过上采样之后,针对每一个pixel有num_class个参数,经过softmax处理就能得到针对每一个像素的预测类别

转置卷积:s2,转置卷积的上采样率为2倍。额外使用来自MaxPooling4(下采样率16)输出的特征图,经过一个卷积后上下输出的矩阵大小一致,于是进行相加操作,再额外使用来自MaxPooling4(下采样率8)输出的特征图,融合相对底层的特征图信息。

 可以看出来,前面部分与FCN-32S差别不大,区别就在于FCN-8S融合了MaxPooling4和  MaxPooling3的特征图信息

6.损失计算


 针对每一个pixel计算Cross Entropy Loss,将所有Cross Entropy Loss求平均得网络的最终损失

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值