空洞卷积(Dilated Convolutions)

在深度学习中,我们常见的就是卷积神经网络。这篇博客来给大家介绍一下空洞卷积跟普通卷积的区别。

空洞卷积的应用处:空洞卷积(dilated convolution)是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。利用添加空洞扩大感受野,让原本3x3的卷积核,在相同参数量和计算量下拥有5x5(dilated rate =2)或者更大的感受野,从而无需下采样。扩张卷积(dilated convolutions)又名空洞卷积(atrous convolutions),向卷积层引入了一个称为 “扩张率(dilation rate)”的新参数,该参数定义了卷积核处理数据时各值的间距。换句话说,相比原来的标准卷积,扩张卷积(dilated convolution) 多了一个hyper-parameter(超参数)称之为dilation rate(扩张率),指的是kernel各点之前的间隔数量,[正常的convolution 的 dilatation rate为 1]。

在这里插入图片描述

由上图可见,普通卷积就是特殊的空洞卷积。空洞卷积只是引入了一个“扩张率”的概念。

现在上代码来看看他们之间的区别吧!

编译环境:jupyter notebook

1.导入包

import numpy as np
import torch
import torch.nn as nn

2.生成一个一维数组

arr = np.array(range(1,26))
arr

在这里插入图片描述
3.将一维数组转化为一个二维数组

arr.shape(5,5)
arr

在这里插入图片描述
4.增加一个dim,为通道

arr = np.expand_dims(arr,2)
arr

在这里插入图片描述
这里可能有些困难,不了解np中expand_dims()这个函数的可能看不懂这里,我会在下文做出解释。
5.读取现在矩阵的长度

arr.shape

运行结果为 (5,5,1)
6.轴变化

arr = arr.transpose((2,0,1))#轴变化
arr
arr.shape

运行结果(1,5,5)
在这里插入图片描述
7.将numpy形式转化为tensor格式

arr = torch.Tensor(arr)
print(arr)

在这里插入图片描述
8.增加一个fake batch dimension

arr = arr.unsqueeze(0)
print(arr.size())

在这里插入图片描述
9.接下来先展示普通卷积

conv1 = nn.Conv2d(1, 1, 3, stride=1, bias=False, dilation=1)
nn.init.constant_(conv1.weight, 1)
out1 = conv1(arr)
out1

在这里插入图片描述
10.最后是空洞卷积

conv2 = nn.Conv2d(1, 1, 3, stride=1, bias=False, dilation=2)
nn.init.constant_(conv2.weight, 1)
out2 = conv2(arr)
out2

在这里插入图片描述
在这里插入图片描述
这就是空洞卷积和普通卷积的区别,现在补充一下刚刚的函数知识。

补充

np.shape

这个函数它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。它的输入参数可以使一个整数表示维度,也可以是一个矩阵。

np.expand_dims(a,axis)

其中a指的是numpy矩阵,axis为需要添加纬度的轴
举个例子:
二维数组中
在这里插入图片描述
shape中2处于axis=0的位置,3处于axis=1的位置,若在axis=1的位置添加变量,则需在shape中axis=1的位置写1,同时3后移,shape变为(2,1,3)。调用索引时axis=1的位置一直为0

在实现RestNet34模型中的空洞卷积代码,可以按照以下步骤进行: 1. 导入必要的库和模块。首先需要导入PyTorch库,并引入相应的模块和函数,如torch、torchvision、nn、F等。 2. 定义空洞卷积块。RestNet34模型中的空洞卷积由多个卷积层组成,可通过自定义类来定义这个卷积块。可以使用PyTorch提供的nn.Module来创建一个新类,然后在其中定义该块的结构。 3. 初始化空洞卷积块。在类的初始化函数中,可以定义块内各个卷积层的参数,如输入和输出通道数、卷积核大小、步长、填充等。 4. 实现空洞卷积块的前向传播函数。在forward函数中,可以按照卷积的顺序与参数进行处理。 5. 创建RestNet34模型。使用nn.Module来创建一个新类,其中包含了多个空洞卷积块和其他需要的层,如池化层、全连接层等。 6. 初始化RestNet34模型。在初始化函数中,可根据RestNet34的网络结构来定义各个层的参数。 7. 实现RestNet34模型的前向传播函数。在forward函数中,可以按照模型的网络结构对输入数据进行处理,包括空洞卷积块的调用和其他层的处理。 8. 创建模型实例并进行训练。可以创建一个模型实例,并定义损失函数、优化器等,然后将训练数据传入模型进行训练。 9. 进行模型评估和预测。训练完成后,可使用测试数据对模型进行评估和预测。可以计算模型的准确率、损失等指标,也可以使用模型对新的数据进行预测。 以上是一个简要的步骤,实现RestNet34模型的空洞卷积代码具体需要根据实际情况和需求进行调整。在实际实现过程中也可以参考一些开源的代码和教程,以便更加详细地了解和理解具体的实现细节。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值