图像卷积
 首先给出一个输入输出结果
 

  那他是怎样计算的呢? 
 
 
 
  卷积的时候需要对卷积核进行 180 的旋转,同时卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值,计算例子如下:
 
 
 
  这样计算出左上角(即第一行第一列)像素的卷积后像素值。 
 
 
 
  给出一个更直观的例子,从左到右看,原像素经过卷积由 1 变成-8。
 
 
 
   通过滑动卷积核,就可以得到整张图片的卷积结果
  
 
  
图像反卷积
    这里提到的反卷积跟 
    1 
    维信号处理的反卷积计算是很不一样的,
    FCN 
    作者称为 
    backwards convolution,有人称 
    Deconvolution layer is a very unfortunate name and should rather be called a transposed convolutional layer. 我们可以知道,在 
    CNN 
    中有 
    con layer 
    与 
    pool layer
    ,
    con layer 
   
 
   
    进行对图像卷积提取特征,pool layer 对图像缩小一半筛选重要特征,对于经典的图像识别 
    CNN 网络,如 IMAGENET
    ,最后输出结果是 
    1X1X1000
    ,
    1000 
    是类别种类,
    1x1 
    得到的是。
    FCN 作者,或者后来对 end to end 
    研究的人员,就是对最终 
    1x1 
    的结果使用反卷积(事实上 
    FCN作者最后的输出不是 1X1
    ,是图片大小的 
    32 
    分之一,但不影响反卷积的使用)。 
   
 
   
    这里图像的反卷积与 full 
    卷积原理是一样的,使用了这一种反卷积手段使得图像可以变大,FCN 作者使用的方法是这里所说反卷积的一种变体,这样就可以获得相应的像素值,图像可以实现 end to end
    。
   
 
   
     这里说另外一种反卷积做法,假设原图是 
     3*3
     ,首先使用上采样让图像变成 
     7*7
     ,可以看到图像多了很多空白的像素点。使用一个 3*3 
     的卷积核对图像进行滑动步长为 
     1 
     的 
     valid 
     卷积,得到一个5*5 
     的图像,我们知道的是使用上采样扩大图片,使用反卷积填充图像内容,使得图像内容变得丰富,这也是 CNN 
     输出 
     end to end 
     结果的一种方法。韩国作者 
     Hyeonwoo Noh 使用 VGG16 层CNN 网络后面加上对称的 16 层反卷积与上采样网络实现 end to end 输出,其不同层上采样与反卷积变化效果如下:
    
 
    
      经过上面的解释与推导,对卷积有基本的了解,但是在图像上的 deconvolution 究竟是怎么一回事,可能还是不能够很好的理解,因此这里再对这个过程解释一下。 
     
 
     
      目前使用得最多的 deconvolution 有 2 种,上文都已经介绍。 
     
 
     
      方法 1:full 卷积, 完整的卷积可以使得原来的定义域变大。 
     
 
     
      方法 2:记录 pooling index,然后扩大空间,再用卷积填充。 
     
 
     
      图像的 deconvolution 过程如下:
     
 
     
 
     输入:2x2, 卷积核:4x4, 滑动步长:3, 输出:7x7 
    
 
    
     即输入为 2x2 的图片经过 4x4 的卷积核进行步长为 3 的反卷积的过程 
    
 
    
     1. 输入图片每个像素进行一次 full 卷积,根据 full 卷积大小计算可以知道每个像素的卷积后大小为 1+4-1=4, 即 4x4 大小的特征图,输入有 4 个像素所以 4 个 4x4 的特征图 
    
 
    
     2. 将 4 个特征图进行步长为 3 的 fusion(即相加); 例如红色的特征图仍然是在原来输入位置(左上角),绿色还是在原来的位置(右上角),步长为 3 是指每隔 3 个像素进行 fusion, 重叠部分进行相加,即输出的第 1 行第 4 列是由红色特阵图的第一行第四列与绿色特征图的第 
    
 
    
     一行第一列相加得到,其他如此类推。 
    
 
    
     可以看出翻卷积的大小是由卷积核大小与滑动步长决定, in 是输入大小, k 是卷积核大小, s 是滑动步长, out 是输出大小 得到 out = (in - 1) * s + k 
    
 
    
     上图过程就是, (2 - 1) * 3 + 4 = 7
    
 
   



















