转置卷积(Transposed Convolution)

在介绍UNet的时候,我们提到了转置卷积,在UNet右侧分支上,对特征上采样的其中一种实现方式即为转置卷积(另一种为双线性插值)。所以今天我们就来看看转置卷积的实现细节。

由于篇幅原因,本篇不展开太多,只讲核心实现。关于转置卷积(以及各种卷积的)详细实现,可以参考论文:A guide to convolution arithmetic for deep learning

转置卷积首先也是一种卷积操作,绝大部分转置卷积是为了实现上采样的目的。之所以使用转置卷积代替其他简单上采样算法,如最邻近插值、双线性插值等,是因为转置卷积有可以学习的参数,使得网络可以学到最优上采样方法。

转置卷积不是卷积的逆变换,而是一种保持矩阵元素对应关系的操作,由于是上采样,所以一般是1对多的关系,也就是输入矩阵的一个元素,对应输出矩阵相应位置上的多个元素。

下面两图展示了卷积和转置卷积的区别(蓝色为输入矩阵,绿色为输出矩阵)。

接下来,我们就来介绍具体的实现。

1. 转置卷积的实现步骤

首先,先来定义一些变量。

  • 输入矩阵宽和高分别是:Win,Hin;
  • 输出矩阵宽和高分别为:Wout, Hout;
  • 步长为stride,简记为s;
  • 填充像素数padding,简记为p;
  • 卷积核大小kernel size,简记为k。

转置卷积的运算步骤为:

  • 在输入矩阵的行间和列间分别填充s-1个0;
  • 在输入矩阵的四周,分别填充k-p-1行(列)0;
  • 卷积操作。

那么我们可以得到输出矩阵的大小为(这里只考虑行和列上的padding size相同,且为正方形kernel):

  • Hout = (Hin - 1) x s - 2 x p + k
  • Wout = (Win - 1) x 2 - 2 x p + k

例如,看下面几种情况:

(1) s = 1, p = 0, k = 3

(2) s = 2, p = 0, k = 3

(3) s = 2, p = 1, k = 3

 

更多转置卷积形式可参考: GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning

2. PyTorch实现ConvTranspose2d 

 PyTorch中对转置卷积的实现为:

CLASS torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

各参数的解释如下:

用法举例如下:

# With square kernels and equal stride
m = nn.ConvTranspose2d(16, 33, 3, stride=2)
# non-square kernels and unequal stride and with padding
m = nn.ConvTranspose2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
input = torch.randn(20, 16, 50, 100)
output = m(input)
# exact output size can be also specified as an argument
input = torch.randn(1, 16, 12, 12)
downsample = nn.Conv2d(16, 16, 3, stride=2, padding=1)
upsample = nn.ConvTranspose2d(16, 16, 3, stride=2, padding=1)
h = downsample(input)
h.size()
output = upsample(h, output_size=input.size())
output.size()
YOLOv5使用了转置卷积transposed convolution)来实现上采样操作,具体是通过使用torch.nn.ConvTranspose2d函数来完成的。转置卷积是一种常用的神经网络层,它可以将输入特征图的尺寸扩大,从而实现上采样的效果。YOLOv5中使用转置卷积来增加特征图的分辨率,从而提高目标检测的准确性。 转置卷积的工作原理是通过在输入特征图的每个像素点周围插入一定数量的0,并将这些0与原始特征图进行卷积操作,从而实现特征图尺寸的扩大。转置卷积的输出大小可以通过以下公式计算: 输出大小 = (输入大小 - 1) * 步长 + 输出填充 - 2 * 输入填充 + 卷积核大小 在YOLOv5中,转置卷积层被用于实现特征图的上采样。通过增加上采样层,YOLOv5可以更好地捕捉目标的细节信息,提高检测的精度和准确性。 总结起来,YOLOv5使用转置卷积实现特征图的上采样,以提高目标检测的准确性和精度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [YOLOv5/v7 更换上采样方式( 最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积) (新增对比试验组)](https://blog.csdn.net/weixin_43694096/article/details/125416120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [yolov5官方训练模型PT](https://download.csdn.net/download/qq_43788669/85252268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值