matlab中有conv2函数可以计算图像卷积
比如F矩阵size为
m
1
×
n
1
m1 \times n1
m1×n1, G矩阵size为
m
2
×
n
2
m2 \times n2
m2×n2
那么卷积结果的size就是
(
m
1
+
m
2
−
1
)
×
(
n
1
+
n
2
−
1
)
(m1+m2-1) \times (n1+n2-1)
(m1+m2−1)×(n1+n2−1)
如何计算:
比如F=
[
1
2
3
4
]
\left[ \begin{array}{cc} 1&2\\ 3&4 \end{array} \right]
[1324]
G= [ − 1 1 − 2 2 ] \left[ \begin{array}{cc} -1&1\\ -2&2 \end{array} \right] [−1−212]
首先在右边和下边补0以达到结果的size
F=
[
1
2
0
3
4
0
0
0
0
]
\left[ \begin{array}{ccc} 1&2&0\\ 3&4&0\\ 0&0&0 \end{array} \right]
⎣⎡130240000⎦⎤
G= [ − 1 1 0 − 2 2 0 0 0 0 ] \left[ \begin{array}{ccc} -1&1&0\\ -2&2&0\\ 0&0&0 \end{array} \right] ⎣⎡−1−20120000⎦⎤
然后把G旋转 180 ° 180\degree 180°,注意是 180 ° 180\degree 180°
G= [ 0 0 0 0 2 − 2 0 1 − 1 ] \left[ \begin{array}{ccc} 0&0&0\\ 0&2&-2\\ 0&1&-1 \end{array} \right] ⎣⎡0000210−2−1⎦⎤
再用G的窗口在F从左上到右下滑动,刚开始是G右下角的-1对应F左上角的1,直到计算出size是
3
×
3
3 \times 3
3×3的结果
F * G =
[
−
1
−
1
2
−
5
−
3
8
−
6
−
2
8
]
\left[ \begin{array}{ccc} -1&-1&2\\ -5&-3&8\\ -6&-2&8 \end{array} \right]
⎣⎡−1−5−6−1−3−2288⎦⎤
而CNN中G是不需要补0和旋转的,F在不要求padding时也不需要补0
size为f + 2p - g /s +1 , 其中p为padding,s为stride