4 c W1 G% S6 f) i0 c: S8 v
大概建模一年多了吧,准备趁着这个暑假,把建模的东西整理一下,留个笔记和纪念,万一哪天不会了还能翻翻笔记。众所周知,建模这东西入门不难,网上各种教程一大把一大把,人家写的也很专业,我写的东西基本登不了大雅之堂,跟人家没法比就写点下里巴人的东西吧。: a m: J0 V9 u, x# [/ V
1 U8 x; u+ Y8 d# o# _0 C1.1.概念引入 ( w( k' y) j! X: a4 W9 z3 T! l ) Y, y3 P1 }) O4 v& u' ] 1.11.1 图像处理中的卷积运算。看个图生动形象的理解一下下: * F) v+ b5 h: S( L2 C: O' K " Q+ N: n' c; u+ ? ( z( Q/ D' o8 e( S 在设置好矩阵之后,又该如何运算呢,来,看下面的动图。矩阵对应相乘相加得到卷积的结果。比如,对于左上角的元素4而言,它的运算方式就是:1×1+0×1+1×1+0×0+1×1+0×1+1×0+0×0+1×1=41×1+0×1+1×1+0×0+1×1+0×1+1×0+0×0+1×1=4 9 k# F# j# _( t0 S1 k/ o M
$ W- z" |: ~1 e+ O6 l 1.21.2 填充padding。上面的操作看着貌似很好,但是有没有缺陷呢?当然有,第一个问题,5×55×5的矩阵和3×33×3的矩阵的卷积结果会得到3×33×3的输出矩阵,也就是原始图像在提取特征的过程中被缩小了,一直卷积的话图像会被一直缩小到一个像素,显然不是想要的结果;第二个问题,原始图像左上角的像素只参与一次运算,而他右边的像素参与了两次运算,是不是不公平?是的。那么如何解决这两个问题呢?2 ^ {5 v; {. r2 f
- `$ q! k1 H+ e8 {6 f. ~ 不失一般性,设原始图像为n×nn×n的矩阵,卷积核为f×ff×f的矩阵,那么输出结果就是(n−f+1)×(n−f+1)(n−f+1)×(n−f+1)的矩阵。言归正传,怎么解决上面的问题呢?答案是填充。在imange矩阵的周围在添加一层像素,使其变成(n+1)×(n+1)(n+1)×(n+1)的矩阵,而填充内容是随意的,如果添加pp层像素,原始图像就会变为(n+2p)×(n+2p)(n+2p)×(n+2p)的矩阵,为了使输出矩阵和原始矩阵的维度相同,就要满足下面的等式:9 w+ V4 g0 T& V: P7 a
; u" g" e# E5 P" D6 c7 N: `5 Qn+2p−f+1=n⇒p=(f−1)/2 , w0 p; j! l# y9 S, T' s- j- gn+2p−f+1=n⇒p=(f−1)/2 2 o1 N t6 U8 D; |0 h0 x3 U& F; ]6 h 1.31.3 卷积步长stride。上面的例子中,卷积的移动步长是1,当移动步长s=2s=2的时候呢,7×77×7和3×33×3的矩阵卷积输出的结果是3×33×3的矩阵(自己脑补,就不画图了),于是又得到一个规律,卷积输出结果的维度是(n+2p−fs+1)×(n+2p−fs+1)(n+2p−fs+1)×(n+2p−fs+1)。" e! I. s8 i: Y* v. W9 P- I4 L
2 M" M3 _ J, J2 I8 `1 y% v) ]: n4 ^
1.41.4 卷积步长stride。上面的例子中,卷积的移动步长是1,当移动步长s=2s=2的时候呢,7×77×7和3×33×3的矩阵卷积输出的结果是3×33×3的矩阵(自己脑补,就不画图了),于是又得到一个规律,卷积输出结果的维度是(n+2p−fs+1)×(n+2p−fs+1)(n+2p−fs+1)×(n+2p−fs+1)。) B% ]" l2 O0 K6 W4 H: O
9 Q0 t8 K# i+ b. K. n. e
2.2.立体卷积与多特征输出 & @: v( _5 q2 \5 W7 s5 S9 U* d3 O$ L; E
2.12.1 立体卷积。其实感觉立体卷积这个名字不好,确切的说应该是RGB图像的卷积,容我解释一下应该就能理解的更加透彻了。众所周知,RGB图像有三个通道,也就是意味着RGB图像是n×n×3n×n×3的矩阵,那么怎么对这个立方体进行卷积呢?5 n$ M* e) Z) J2 j
[" z3 U, [% E3 G& }( D
' B- ~; i- ~) ^- R) Q1 c