一、卷积层的计算
4 ∗ * ∗ 4的输入矩阵 I I I 和 3 ∗ * ∗ 3 的卷积核 K K K:
- 在步长(stride)为 1 时,输出的大小为 ( 4 − 3 + 1 ) × ( 4 − 3 + 1)
计算公式:
 ● 输入图片矩阵  
     
      
       
       
         I 
        
       
      
        I 
       
      
    I 大小:  
     
      
       
       
         w 
        
       
         × 
        
       
         w 
        
       
      
        w × w 
       
      
    w×w
 ● 卷积核  
     
      
       
       
         K 
        
       
      
        K 
       
      
    K: 
     
      
       
       
         k 
        
       
         × 
        
       
         k 
        
       
      
        k × k 
       
      
    k×k
 ● 步长 
     
      
       
       
         S 
        
       
      
        S 
       
      
    S: 
     
      
       
       
         s 
        
       
      
        s 
       
      
    s
 ● 填充大小(padding): 
     
      
       
       
         p 
        
       
      
        p 
       
      
    p
o = ( w − k + 2 p ) s + 1 o = \frac{(w − k + 2p )}{s}+1 o=s(w−k+2p)+1
输出图片大小为: 
     
      
       
       
         o 
        
       
         × 
        
       
         o 
        
       
      
        o × o 
       
      
    o×o
 ● 步长为2,卷积核为33,p=0的卷积情况如下:
 
 当卷积函数中padding='same’时,会动态调整  
      
       
        
        
          p 
         
        
       
         p 
        
       
     p 值,确保  
      
       
        
        
          o 
         
        
          = 
         
        
          w 
         
        
       
         o = w 
        
       
     o=w ,即保证输入与输出一致。例如:输入是 28281 输出也为 28281 。
 ● 步长为1,卷积核为33,padding='same’的卷积情况如下:

🔍实例:
  
     
      
       
       
         7 
        
       
         ∗ 
        
       
         7 
        
       
      
        7*7 
       
      
    7∗7 的 input, 
     
      
       
       
         3 
        
       
         ∗ 
        
       
         3 
        
       
      
        3*3 
       
      
    3∗3 的 kernel,无填充(padding=0),步长为1,则  
     
      
       
       
         o 
        
       
         = 
        
        
         
         
           ( 
          
         
           7 
          
         
           − 
          
         
           3 
          
         
           ) 
          
         
        
          1 
         
        
       
         + 
        
       
         1 
        
       
      
        o = \frac{(7 − 3 )}{1}+1 
       
      
    o=1(7−3)+1也即 output size 为  
     
      
       
       
         5 
        
       
         ∗ 
        
       
         5 
        
       
      
        5*5 
       
      
    5∗5
 
  
     
      
       
       
         7 
        
       
         ∗ 
        
       
         7 
        
       
      
        7*7 
       
      
    7∗7 的 input, 
     
      
       
       
         3 
        
       
         ∗ 
        
       
         3 
        
       
      
        3*3 
       
      
    3∗3 的 kernel,无填充(padding=0),步长为2,则  
     
      
       
       
         o 
        
       
         = 
        
        
         
         
           ( 
          
         
           7 
          
         
           − 
          
         
           3 
          
         
           ) 
          
         
        
          2 
         
        
       
         + 
        
       
         1 
        
       
      
        o = \frac{(7 − 3 )}{2}+1 
       
      
    o=2(7−3)+1也即 output size 为  
     
      
       
       
         3 
        
       
         ∗ 
        
       
         3 
        
       
      
        3*3 
       
      
    3∗3
 
二、卷积层运算量的计算

 对于第一个卷积过程涉及的计算量计算过程如下:
首先,我们需要计算卷积层的参数量。对于一个卷积核大小为 k × k k \times k k×k,输入特征图大小为 h × w × c i n h \times w \times c_{in} h×w×cin,输出特征图大小为 h ′ × w ′ × c o u t h' \times w' \times c_{out} h′×w′×cout的卷积层,其参数量为:
𝑃𝑎𝑟𝑎𝑚 = k 2 × c i n × c o u t k^2 \times c_{in} \times c_{out} k2×cin×cout + c o u t c_{out} cout
其中最后的 c o u t c_{out} cout是bias的数量
引自: [假设卷积核的大小为 k*k, 输入channel为M, 输出channel为N。]
(1)bias为True时:参数数量为: k × k × M × N + N k × k × M × N + N k×k×M×N+N (bias的数量与输出channel的数量是一样的)(2)bias为False时:参数数量为: k × k × M × N k×k×M×N k×k×M×N
(3)当使用BN时,还有两个可学习的参数α和β,参数量均为N 则参数数量为: k × k × M × N + 3 × N k×k×M×N + 3×N k×k×M×N+3×N
对于本题,输入特征图大小为 100 × 100 × 128 100 \times 100 \times 128 100×100×128,输出特征图大小为 100 × 100 × 256 100 \times 100 \times 256 100×100×256,卷积核大小为 5 × 5 5 \times 5 5×5,且填充为 2,步长为 1,输出通道数为 256。因此,每个卷积层的参数量为:
𝑃𝑎𝑟𝑎𝑚 = 5 2 × 128 × 256 5^2 \times 128 \times 256 52×128×256 + 256 ≈ 8.192 × 1 0 5 8.192 \times 10^5 8.192×105
参数量会计算了,那么 F L O P s FLOPs FLOPs其实也是很简单的,就一个公式:
F L O P s t o t a l FLOPs_{total} FLOPstotal = 𝑃𝑎𝑟𝑎𝑚 × h ′ × w ′ \times h' \times w' ×h′×w′ = 8.192 × 1 0 5 × 100 × 100 8.192 \times 10^5 \times 100 \times 100 8.192×105×100×100= 8.192 × 1 0 9 8.192 \times 10^9 8.192×109
因此,经过具有 256 个输出的 5x5 卷积层之后,输出数据为 100x100x256 的计算量是约为 8.192 × 1 0 9 F L O P s 8.192 \times 10^{9} FLOPs 8.192×109FLOPs。
对于第二个卷积过程涉及的计算量计算过程如下:
首先考虑 1x1 卷积层的计算量。套用上面的公式,输入特征图大小为 100 × 100 × 128 100 \times 100 \times 128 100×100×128,输出通道数为 32,因此经过 1x1 卷积层后,输出特征图大小为 100 × 100 × 32 100 \times 100 \times 32 100×100×32,这里的bias值很小我直接省了,计算量为:
F L O P s 1 × 1 FLOPs_{1\times1} FLOPs1×1 = 1 2 × 128 × 32 × 100 × 100 = 4.096 × 1 0 7 1^2 \times 128 \times 32 \times 100 \times 100 = 4.096 \times 10^7 12×128×32×100×100=4.096×107
接下来考虑 5x5 卷积层的计算量,经过 1x1 卷积层后,输出特征图大小为 100 × 100 × 32 100 \times 100 \times 32 100×100×32,输入通道数为 32,输出通道数为 256,卷积核大小为 5x5,填充为 2,步长为 1,这里的bias值很小我直接省了,计算量为:
F L O P s 5 × 5 FLOPs_{5\times5} FLOPs5×5 = 5 2 × 32 × 256 × 100 × 100 = 2.048 × 1 0 9 5^2 \times 32 \times 256 \times 100 \times 100= 2.048 \times 10^{9} 52×32×256×100×100=2.048×109
因此,经过具有 32 个 1x1大小的卷积核的卷积层和具有 256 个5x5大小的卷积核的卷积层之后,输出数据为 100x100x256 的计算量为
F L O P s 1 × 1 + F L O P s 5 × 5 FLOPs_{1\times1} + FLOPs_{5\times5} FLOPs1×1+FLOPs5×5 ≈ 2.048 × 1 0 9 2.048 \times 10^{9} 2.048×109


















