FCN的学习与理解

今天再次看了一遍fcn,对它的理解更深了。

一句话概括FCN:FCN将传统网络后面的全连接层换成了卷积层。

说一下我对fcn意义的理解:

    1、输出从一个一维向量转化成了高维特征图,如下图的例子,输出从4096—>1*1*4096,两者都是4096个数值,数值是一样的,但是结构不一样,后者符合图像的二维结构。这样就可以后续进行图像分割。

    2、如果说是一张有多个对象的图,比如说下面那张又有狗又有猫的图像,如果说使用全连接来识别,那么首先我们需要生成几个窗口(比如九个),分别将他们输入cnn进行特征提取再经过全连阶层进行分类,经过9次,生成9个向量,对应为窗口的对象类型。但是对于fcn,那么会更加简单,直接将整张图片输入cnn进行特征提取,设置倒数第三层卷积层的卷积核,使它的输出不为1*1*4096,而是3*3*4096,再经过后两个滤波器尺寸为1*1的卷积层,最后的输出为3*3*1000,仍然是这9个窗口对象的类型。两者的结果是一样的,但是显然使用rcn只需要一次前向传播。

è¿éåå¾çæè¿°

有很多博客都写,fcn最后三层的卷积核大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1),事实上并不是。假设输入是224*224*3的图像,经过cnn后变成7*7*512,这是连接的倒数第三个卷积层的卷积核尺寸应该是7,即(7*7*4096),这样才能生成1*1*4096,后两层就是使用了1*1的卷积核。

反卷积

再经过fcn后,输出是1*1*1000的高维特征图,如何变成原图大小呢?

其实就是卷积的反向过程。对于卷积,假设卷积前是一个4*4的图x,卷积后是2*2的图y,可以把x拉平为16*1,y拉平为4*1,那么卷积过程其实就是Cx=y,C是一个4*16的矩阵。同样的反卷积就是x=C^{-1}y=Ay,A是一个16*4的矩阵,同样可以通过学习获得。(只是随便表达一下,不严谨,就是觉得可以这样理解。我老板是一个特别严谨的人,如果他看到我这么写肯定骂我一顿,不过他看不到hhhh)

下图我觉得很好的解释了反卷积。

反卷积后,应该生成了H*W*1000张图,再通过逐个像素求其在1000张图像中最大的数值描述(概率)作为该像素的分类。这样就可以得到一张分类好的图片。

另外,为什么说fcn后得到的是heatmap,我觉得是这样:最后一层卷积后可能生成的是20*20*21,经过softmax后就能产生相应的概率,那么没经过softmax之前,每一张20*20的图上的每一个像素点(这一个像素点代表着原图像32*32的区域大小)的数值,数值越大表明是该类别的可能性越大,这显然符合heatmap的概念。

当然,文中提到最后的图并不一定是1个像素,只是简化成了1个像素,应该是原图像的H/32*W/32的图。

 

写得比较好的fcn博客:http://www.cnblogs.com/gujianhan/p/6030639.html

https://blog.csdn.net/zizi7/article/details/77093447

https://blog.csdn.net/qq_36269513/article/details/80420363

 

 

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值