Convolution Arithmetic
发布日期:2021-05-08 06:00:59 浏览次数:23 分类:精选文章

本文共 2571 字,大约阅读时间需要 8 分钟。

参考论文:A guide to convolution arithmetic for deep learning

论文地址:http://arxiv.org/abs/1603.07285
等效卷积核大小计算:K=k+(k−1)∗(r−1) (k为原大小,K为等效大小, r 为 dilation) -> 无空洞时dilation为1

注意: floor(x-1)//2 + 1 == x//2 <- 当且仅当 x为偶数! 这种padding出现在ResNet中的downsample中


1. Convolution arithmetic

核心公式:(根据这个公式,各种卷积的output size的计算其实都是一类

卷 积 : o s i z e = i n s i z e + 2 p − k s t r i d e + 1 逆 卷 积 : o ′ = s ( i ′ − 1 ) + k − 2 p 卷积:o_{size} = \frac{in_{size} + 2p - k}{stride} + 1 \\ 逆卷积:o' = s(i' - 1)+k-2p osize=strideinsize+2pk+1o=s(i1)+k2p

i:input size

o:output size
p:padding size
k:kernel size

1. No zero padding, unit strides

o = ( i − k ) + 1 o = (i-k)+1 o=(ik)+1

2. Zero padding, unit strides

o = ( i + 2 p − k ) + 1 o = (i + 2p - k) + 1 o=(i+2pk)+1

3. Half(same) padding, [unit strides - same padding必须要s=1, o = i]

要求:k=2n+1, p = floor(k/2) =n

o = i + 2 ∗ f l o o r ( k / 2 ) − k + 1 = i o = i + 2*floor(k/2) -k + 1 = i o=i+2floor(k/2)k+1=i

4. Full padding [o = i + p]

o = i + 2 ∗ ( k − 1 ) − k + 1 = i + ( k − 1 ) o = i + 2*(k-1) - k + 1 = i + (k-1) o=i+2(k1)k+1=i+(k1)

5. No zero padding , non-unit strides

o = f l o o r ( i − k s ) + 1 o = floor(\frac{i-k}{s}) + 1 o=floor(sik)+1

6. Zero padding, non-unit strides

o = f l o o r ( i + 2 p − k s ) + 1 o = floor(\frac{i+2p-k}{s})+1 o=floor(si+2pk)+1


2. Pooling arithmetic

o = f l o o r ( i − k s ) + 1 o = floor(\frac{i-k}{s})+1 o=floor(sik)+1


3. Transposed convolution arithmetic

这里相对较难,需要不断重复

在这里插入图片描述

试想,将输出展平作为列,输入展平作为行,矩阵的每个元素就是输入元素计算卷积时所使用的权重,这样一来便可以计算逆。

然后将输入矩阵展平为列向量X,将此权重矩阵与X做矩阵乘法,得到一个4维的列向量,随后resize为(2,2)的矩阵,即输出矩阵。

{ c o n v o l u t i o n : X ⋅ C = Y t r a n s p o s e d   c o n v o l u t i o n : Y ⋅ C T = X \begin{cases} convolution: X \cdot C = Y \\ transposed\ convolution: Y \cdot C^T = X \end{cases} {

convolution:XC=Ytransposed convolution:YCT=X

1. No zero padding, unit strides, transposed(与前面进行对比)

o ′ = i ′ + ( k − 1 ) o' = i' + (k-1) o=i+(k1)

2. Zero padding, unit strides, transposed

o ′ = i ′ + ( k − 1 ) − 2 p o' = i' + (k-1) - 2p o=i+(k1)2p

3. Half(same) padding, transposed

假定k=2n+1(即为奇数),p=floor(k/2) = n

o ′ = i ′ + ( k − 1 ) − 2 p = i ′ + 2 n − 2 n o' = i' + (k-1) - 2p = i' + 2n - 2n o=i+(k1)2p=i+2n2n

4. Full padding, transposed

p = k-1

o ′ = i ′ + ( k − 1 ) − 2 p = i ′ − ( k − 1 ) o' = i' + (k-1) - 2p = i' - (k-1) o=i+(k1)2p=i(k1)

5. No zero padding, non-unit strides, transposed

假设o’-k能整除s

o ′ = s ( i ′ − 1 ) + k o' = s(i'-1) + k o=s(i1)+k

6. Zero padding, non-unit strides, transposed

假设o’+2p-k能整除s

o ′ = s ( i ′ − 1 ) + k − 2 p o' = s(i'-1)+k-2p o=s(i1)+k2p

上一篇:Pyramid Convolution(PyConv)
下一篇:An attempt at beating the 3D U-Net

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年03月28日 09时27分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章