全链接层转换为卷积层

全连接层的作用毫无疑问,就是将卷积提取的特征映射到每一类,从来方便损失函数打分。那么为什么要将全连接层转换为卷积层呢?

有一篇论文《Fully Convolutional Networks for Semantic Segmentation》简称FCN讲的很清楚了,当时主要是为了解决特定物体分类的问题。也就是说,之前的CNN可以对整幅图片分类,但是如果图片中有多个class的object应该如何分类呢?其实也就是一个检测问题。当然前面的博客中已经简单介绍了faster RCNN,yolo,SSD的思想,但是在此之前特定物体的分类问题还是一个难题,而FCN的出现无疑是这个领域的一大进步。

那么FCN又是怎么一回事呢?

举例说明,如果一幅图片经过卷积网络之后,feature map为7*7*4096,类别有10类,那么如果这里接full connection层它的参数数量为7*7*4096*10,但是我们可以换一种思路,下一层用卷积层实现同样功能,那么就是需要10个7*7的filter,filter的深度为4096,这样我们会发现参数的数量相同,并且计算的时间复杂度以及空间复杂度等等都没有区别,那么为什么还要用卷积层呢?

这主要是为了解决当图片中有多个类别物体的情况下,某一个物体最后映射的feature map是7*7,但是这幅图中还有其他物体,这样最后我们不仅仅需要得到一个一维向量1*1*10,事实上我们需要的假如说是6*6*10,我们需要对6*6的每个网格都做分类,那么这时候如果用full connect层,需要经过多次全连接层,才能得到6*6*10个score feature,而如果用卷积层,就可以通过利用滑动窗口,一次前向传播就得到6*6*10的score feature,这样无疑是更加高效的,因为这样只需要计算每个位置卷积不同的地方即可,事实上不同的地方很小。
 

展开阅读全文

没有更多推荐了,返回首页