CNN
通常CNN网络在卷积层之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。
FCN 对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题,与经典的CNN 在卷积层之后使用全连接层得到固定长度的特征向量,进行分类(全连接层+softmax输出)不同。FCN可以接收任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map 进行上采样,使它恢复到输入图像相同尺寸,从而可以对每个像素都产生了一个预测,同时保留了原始输入图像的中的空间信息,最后在上采样的特征图上进行逐像素分类。
最后逐个像素计算softmax分类的损失函数,相当于每个像素对应一个训练样本:
简单的来说,FCN与CNN 的区域在把与CNN 最后的全连接层换成了卷积层,输出的是一张已经Label 好的图片。
CNN 的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些局部区域的特征;
=============================
较深的卷积层具有较大的感知域,能够学习到更加抽象的一些特征。
这些抽象的的特征对物体的大小、位置和方向等敏感性更低,从而有助于识别性能的提高。
抽象的特征对分类很有帮助,可以很好地判断出一幅图像中包含什么类别的物体,但是因为丢失了一些物体的细节,不能很好地给出物体的具体轮廓、指出每个像素具体属于哪个物体,因此做到精确的分割就很有难度。
传统的基于CNN的分割方法: 为了对一个像素分类,使用该像素周围的一个图像块作为CNN 的输入用于训练和预测。这种方法有几个缺点:
一是存储开销很大
对每个像素使用的图像块的大小是 , 然后不断滑动窗口,每次滑动的窗口给CNN 进行判别分类,因此则所需要的存储空间根据滑动窗口次数和大小急剧上升。
二是计算效率低下。
相邻的像素块基本上都是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。
三是像素块大小的限制了感知区域的大小。
通常像素块的大小比整幅图像的大小小很多,只能提取一些局部的特征,从而导致分类的性能受到限制。
全卷积FCN,则是从抽象的特征 中恢复出每个像素所属的类别,即从图像级别的分类进一步延伸到像素级别的分类
全连接层 -> 成卷积层
经过多次卷积和pooling 之后,得到的图像越来越小,分别率越来越低。
其中图像 的时候图片是最小的一层时,所产生的图叫做 heatmap 热图,热图就是我们最重要的高维特征图,得到高维特征的heatmap 之后就是最重要的一步也就是最后一步进行对原图像进行upsampling ,把图像进行放大、放大、放大,到原始图像的大小。
trick:,就是最后通过逐个像素地求其在1000张图像该像素位置的最大数值描述(概率)作为该像素的分类
Upsampling 上采样
相较于使用被转化前的原始卷积神经网络对所有36个位置进行迭代计算,使用转化后的卷积神经网络进行一次前向传播计算要高效得多,因为36次计算都在共享计算资源。这一技巧在实践中经常使用,一次来获得更好的结果。比如,通常将一张图像尺寸变得更大,然后使用变换后的卷积神经网络来对空间上很多不同位置进行评价得到分类评分,然后在求这些分值的平均值。
最后,如果我们想用步长小于32的浮窗怎么办?用多次的向前传播就可以解决。比如我们想用步长为16的浮窗。那么先使用原图在转化后的卷积网络执行向前传播,然后分别沿宽度,沿高度,最后同时沿宽度和高度,把原始图片分别平移16个像素,然后把这些平移之后的图分别带入卷积网络。
Spectrum of deep features
如下图所示,对原图像进行卷积conv1、pool1后原图像缩小为1/2;之后对图像进行第二次conv2、pool2后图像缩小为1/4;接着继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;接着继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32,然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时图像不再叫featureMap而是叫heatMap。
现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap,1/32尺寸的heatMap进行upsampling操作之后,因为这样的操作还原的图片仅仅是conv5中的卷积核中的特征,限于精度问题不能够很好地还原图像当中的特征,因此在这里向前迭代。把conv4中的卷积核对上一次upsampling之后的图进行反卷积补充细节(相当于一个差值过程),最后把conv3中的卷积核对刚才upsampling之后的图像进行再次反卷积补充细节,最后就完成了整个图像的还原。
Skip layers
FCN 的缺点:
得到的结果不够精细,进行8背得的上采样虽然比32效果好了很多,但是上采样结果还是比较模糊和平滑的,对图像中的细节不敏感。
对个各个像素进行分类,没有充分考虑像素与像素之间的关系,忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。