作者:desn | 来源:互联网 | 2024-11-11 12:16
空洞卷积(DilatedConvolutions)在卷积操作中通过在卷积核元素之间插入空格来扩大感受野,这一过程由超参数dilationrate控制。这种技术在保持参数数量不变的情况下,能够有效地捕捉更大范围的上下文信息,适用于多种视觉任务,如图像分割和目标检测。本文将详细介绍空洞卷积的计算原理及其应用场景。
空洞卷积的计算过程
Dilated convolutions 在卷积的时候,会在卷积核元素之间塞入空格,塞入的空格与hyper-parameter: dilation有关(记为d),则塞入的空格为d-1。
1、感受野计算。假定原来的卷积核大小为 k,那么塞入了 (d - 1) 个空格后的卷积核的感受野大小为:
2、特征图大小计算。假定输入空洞卷积的大小为 i,步长 为 s ,空洞卷积后特征图大小 o 的计算公式为:
p为padding, s为stride,k为卷积核大小, d为dilation
nn.ReLU(inplace = True)中inplace的作用
在文档中解释是:
参数: inplace-选择是否进行覆盖运算
意思是是否将得到的值计算得到的值覆盖之前的值,比如:
x = x +1
即对原值进行操作,然后将得到的值又直接复制到该值中
而不是覆盖运算的例子如:
y = x + 1
x = y
这样就需要花费内存去多存储一个变量y
所以
nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True)
的意思就是对从上层网络Conv2d中传递下来的tensor直接进行修改,这样能够节省运算内存,不用多存储其他变量
模型结构可视化: summary
import torch
import torch.nn as nn
import torch.nn.functional as F
from torchsummary import summaryclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Conv2d(10, 20, kernel_size=5)self.conv2_drop = nn.Dropout2d()self.fc1 = nn.Linear(320, 50)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = F.relu(F.max_pool2d(self.conv1(x), 2))x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))x = x.view(-1, 320)x = F.relu(self.fc1(x))x = F.dropout(x, training=self.training)x = self.fc2(x)return F.log_softmax(x, dim=1)device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # PyTorch v0.4.0
model = Net().to(device)summary(model, (1, 28, 28))
----------------------------------------------------------------Layer (type) Output Shape Param #
================================================================Conv2d-1 [-1, 10, 24, 24] 260Conv2d-2 [-1, 20, 8, 8] 5,020Dropout2d-3 [-1, 20, 8, 8] 0Linear-4 [-1, 50] 16,050Linear-5 [-1, 10] 510
================================================================
Total params: 21,840
Trainable params: 21,840
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.06
Params size (MB): 0.08
Estimated Total Size (MB): 0.15
----------------------------------------------------------------