A. Transposed Convolution
- 上采样,实现从低维到高维
- 属于卷积,但不等于逆卷积
Pytorch实现nn.ConvTranspose2d
用torch.nn中的nn.ConvTranspose2d()函数,参数如下(dilation为膨胀元素一般为1)
输出特征图尺寸计算公式:
具体实现
import torch
import torch.nn as nn
def transposed_conv_official():
feature_map = torch.as_tensor([[1, 0],
[2, 1]], dtype=torch.float32).reshape([1, 1, 2, 2])
print(feature_map)
trans_conv = nn.ConvTranspose2d(in_channels=1, out_channels=1,
kernel_size=3, stride=1, bias=False)
trans_conv.load_state_dict({"weight": torch.as_tensor([[1, 0, 1],
[0, 1, 1],
[1, 0, 0]], dtype=torch.float32).reshape([1, 1, 3, 3])})
print(trans_conv.weight)
output = trans_conv(feature_map)
print(output)
def main():
transposed_conv_official()
if __name__ == '__main__':
main()
B. Dilation Convolution
作用:
- 增大感受野
(对比maxpooling在增大感受野的同时丢失细节和小目标,且无法通过上采样恢复) - 保持原输入特征图的宽和高
gridding effect
——连续使用3个膨胀系数r=2的膨胀卷积时,Layer4上一个pixel利用到了Layer1上的数据并不是连续的,每个非零元素之间都存在间隔。
对比不同膨胀系数的膨胀卷积的堆叠效果(参数数量相同),r=[1,2,3]在感受野用到的非零元素区域是连续的。
Hybird Dilated Convolution (HDC)
-
M 2 ≤ K M_2 \leq K M2≤K
第二层的两个非零元素之间的最大距离 ≤ 该层卷积核的大小
M i M_i Mi:第i个layer的两个非零元素之间最大距离;
r i r_i ri:第i个layer膨胀系数;
M n = r n M_n=r_n Mn=rn:最后一个layer的非零元素最大距离等于膨胀系数。 -
膨胀系数建议设置为锯齿状,如:r=[1,2,3,1,2,3]
-
膨胀系数的公约数小于等于1,且 r 1 = 1 r_1=1 r1=1