上采样、以及反卷积&空洞卷积区别
upsampling(上采样)的三种方式:
Resize ,如双线性插值直接缩放,类似于图像缩放;
反卷积 (deconvolution transposed convolution);
反池化 (unpooling)。
上采样upsampling的主要目的是放大图像,几乎都是采用内插值法,即在原有图像像素的基础上,在像素点值之间采用合适的插值算法插入新的元素。
传统的网络是subsampling的,对应的输出尺寸会降低;upsampling的意义在于将小尺寸的高维度feature map恢复回去,以便做pixelwise prediction,获得每个点的分类信息。
大名鼎鼎的FCN使用反卷积来完成上采样的过程。
2、双线性插值
双线性插值是插值算法中的一种,是线性插值的扩展。利用原图像中目标点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,其核心思想是在两个方向分别进行一次线性插值。
已知的红色数据点和待插值的绿色数据点
假如我们想得到未知函数f在点P= (x,y) 的值,假设我们已知函数f在Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2)Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2) 四个点 值。
在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q11~Q22所构成的正方形以外的点的值。
总结 : 线性插值法 利用原图像中 两个点 计算像素值进行插值, 双线性插值法 利用原图像中 四个点 计算目标像素值进行插值。
反卷积(转置卷积)通常用来两个方面:
反卷积(deconvolution) ,由于实现上采用转置卷积核的方法,所以有人说应该叫转置卷积TD(transposed convolution)。
当stride不为1的时候,转置卷积的卷积核就变成了一个带’洞’的卷积
在池化过程中,记录下max-pooling在对应kernel中的坐标,在反池化过程中,将一个元素根据kernel进行放大,根据之前的坐标将元素填写进去,其他位置补0 。在下采样的时候记录max的位置,上采样的时候***值的位置还原,其它位置填0,如下图所示:
膨胀卷积(空洞卷积,Dilated Convolution)
膨胀卷积在Standard Convolution的基础上多了一个超参数称之为膨胀率(dilation rate),该超参数指的是kernel的间隔数量。
deconv的其中一个用途是做upsampling,即增大图像尺寸。而dilated conv并不是做upsampling,而是增大感受野。
可以形象的做个解释:
对于标准的k*k卷积操作,stride为s,分三种情况:
(1) s1,即卷积的同时做了downsampling,卷积后图像尺寸减小;
(2) s=1,普通的步长为1的卷积,比如在tensorflow中设置padding=SAME的话,卷积的图像输入和输出有相同的尺寸大小;
(3) 0s1,fractionally strided convolution,相当于对图像做upsampling。比如s=0.5时,意味着在图像每个像素之间padding一个空白的像素后,stride改为1做卷积,得到的feature map尺寸增大一倍。
而dilated conv不是在像素之间padding空白的像素,而是在已有的像素上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight,达到一次卷积看到的空间范围变大的目的。
当然将普通的卷积stride步长设为大于1,也会达到增加感受野的效果,但是stride大于1就会导致downsampling,图像尺寸变小。大家可以从以上理解到deconv,dilated conv
参考链接:
反卷积 转置卷积的理解
FCN中反卷积、上采样、双线性插值之间的关系
upsampling(上采样)的三种方式
卷积、反卷积 、空洞卷积
无人机、航空图像目标检测总结
小目标检测几点总结
一、单阶段目标检测主要步骤:
1、特征提取骨干网络设计
2、分类头网络设计
3、回归头网络设计
4、anchor生成设计:anchor尺度与比例
5、anchor匹配机制
6、损失函数设计
7、数据增强技术应用
二、航空图像特点:
1、目标尺度变化大:以中、小目标为主(评判标准?);
2、目标旋转变化较大:尤其对于下视图像,同一类目标存在多角度变化;(旋转框检测)
3、场景明暗变化:存在过曝光和光线不充足等场景;
4、场景内目标疏密变化:存在目标密度极大的场景,也存在非常稀疏的场景;
5、图像视场大,单个目标较小,背景较为复杂;
6、单幅图像分辨率较高;
7、目标相对运动存在模糊现象;
8、目标遮挡现象;
三、小目标检测需注意的几点:
1、小目标所含像素信息小,主要纹理信息缺失,边缘信息相对明显;
2、小目标所含像素较少,信号微弱,需得到一定增强或考虑上下文环境信息辅助推理;
3、提高小目标分辨率,增强信号强度;
4、CNN底层特征预测具有较好的结构信息,顶层具有更多的语义信息。好的特征融合策略可以提取语义信息和结构信息俱佳的特征;
5、级联CNN思想;
6、感受野需根据目标尺度而选取。小感受野捕获不了完整信息,大感受野引入更多背景噪声(小目标对感受野更加敏感);
7、Anchor尺度和比例的选取和与GT匹配机制,保证更多的anchor匹配到小目标上;
8、可以从定位和识别两个角度单独思考,设计专门的分类头和回归头(分类所需特征与检测所需特征之间具有一定偏移)。
四、小目标检测可行的几点方法:
1、多尺度训练与测试;
2、数据增强
3、特征融合模块设计
4、特征增强模块设计
5、上下文推理模块设计
6、膨胀卷积的利用
7、Anchor free是一个趋势
8、Focal loss
9、特征提取骨干网络设计
10、动态区域放大机制:基于强化学习
11、超分辨率重建
12、注意力机制(利用上层语义信息生成注意力)
图像的腐蚀和膨胀的卷积怎么计算
腐蚀的算法: 用3x3的结构元素,扫描图像的每一个像素 用结构元素与其覆盖的二值图像做“与”操作 如果都为1,结果图像的该像素为1。否则为0。 结果:使二值图像减小一圈 定义:E = B S = { x,y | SxyB} 膨胀的算法: 用3x3的结..
[网络层]什么是卷积
参考资料:
CNN中常用的四种卷积详解
1、什么是卷积
卷积是在特征图上进行滑动的矩阵,它的参数是可学习的,然后计算矩阵跟被滑动到的区域内的像素点进行内积计算,再求和。这种操作可以使得卷积学习到局部特征,并且每个被滑动到的区域之间都共享了权重。共享权重操作使得卷积相比全连接网络节省了大量的参数。
2、为什么要引入卷积
① 卷积可以通过共享权重来减少大量的参数量。例如使用全连接层会导致参数量太多,假如输入的图片尺寸大小为 1000*1000*3,即 3 百万个像素点,假如全连接层有 1000 个节点,则总共有 30 亿 1000 个参数。但是换成使用卷积核组数为 100 的 5*5 的卷积,则仅需 5*5*3*100 + 100,即 7600 个参数
② 图片中存在重复的特征,卷积可以通过共享权重的方式更高效率地将这些特征学习出来
③ 图片固有的空间特征,如果使用全连接层或 RNN 来学习,则会破坏图片的空间特征,而卷积则可以不破坏图片的空间特征
3、卷积的计算过程
① 对于有多组的卷积组,每次使用一组卷积组去计算
② 每组卷积组内有输入通道数个卷积核,每个卷积核是参数可学习的二维矩阵
③使用一组内的卷积核同时在输入的每个通道上,分别按指定步长从左到右,从上到下在通道上进行滑动,然后计算二维矩阵跟被滑动到的区域的值进行内积计算,然后再求和。然后将所有通道上求得的值再求和,再加上偏置项。如此即可得到一个二维的输出矩阵,作为输出的一个通道。
④ 逐次使用每组卷积组,按 ③ 中的过程去进行计算,即可得到一个三维的输出矩阵,通道数等于卷积组数。
4、卷积的优点
① 通过共享权重来减少参数量
② 可以学习局部特征,更符合应用于图片
③ 具有平移不变性,因为卷积通过共享权重和滑动处理,所以即使特征不在同一个位置,也可以被卷积核学习到
5、卷积的缺点
① 学习到的特征受到感受野的影响太大,需要人工设置卷积核的大小
② 对序列输入的提取效果不够好
6、卷积的变种
① 空洞卷积(扩张卷积、膨胀卷积):指的是在正常的卷积核的点之间插入空洞 ,以此在不增加计算量来增大卷积核的感受野。
优点:
a、在不丢失分辨率的情况下增大感受野,对于检测大物体效果更好
b、调整扩张率(卷积点之间的空洞个数)获得多尺度信息
缺点:
a、对于检测小物体效果不好
② 转置卷积(反卷积、逆卷积):转置卷积是相对于卷积的相反操作,例如 3*3 卷积得到的结果是 1 个值,而转置操作则是将 1 个值变成 3*3 的大小。不过转置卷积并不能够恢复被卷积前的值,因为卷积是不可逆操作,只能够恢复尺寸。
优点:
a、可以将小尺寸的特征变成大尺寸的特征,实现类似上采样的效果,可以应用于 CNN 可视化、FCN 全卷积网络、GAN 等
缺点:
只能恢复尺寸,不能恢复数值
空间可分离卷积:将一个卷积核分离成两个更小的卷积核,节省参数量
深度可分离卷积:将在每个通道上使用卷积,再将所有的通道卷积结果相加,再使用每组卷积去重复上述过程的步骤拆分成两个步骤。
(1)只改变特征图的大小,但是不改变特征图的通道数。在每个通道上使用卷积,但是不将所有的通道卷积结果相加,而是保持原样。例如输入的是 256 通道,则卷积后的通道数仍然还是跟输入通道数 256 相等。而原本的卷积输出通道数跟组数相等。
(2)只改变特征图的通道数,但不改变特征图的大小。在 (1)的基础上再使用 输出通道数*1*1*通道数 进行卷积
深度可分离卷积本质上是卷积核组之间共享了***阶段卷积核的参数
7、卷积后的特征尺寸计算公式
假设 n 为输入的特征尺寸, f 为卷积核的大小,p 为 padding 的大小,s 为卷积核移动的步长
8、1*1、3*3、5*5、7*7 的卷积核大小的作用和优缺点,以及相互之间的比较
作用:
① 1*1 的作用可以用来进行通道数变换,以及在部分情况下替代全连接的作用
② 3*3 的作用是使用小核来替代大核,从而实现减少参数量的作用
③ 5*5 的作用是通过使用较大的卷积核,来达到使卷积核有更大的感受野的作用。也可以被用在图像金字塔中。
④ 7*7 的作用也是通过使用较大的卷积核,来达到使卷积核有更大的感受野的作用。也可以被用在图像金字塔中。
优点:
① 1*1 跟其他的卷积核可以实现深度可分离卷积来进一步减少参数量
② 5*5 跟 7*7 有更大的感受野
9、卷积核的参数量计算
假设卷积核的大小为 k,输入通道数为 in_n,输出通道数为 out_n,则卷积核的参数量为:
out_n*in_n*k*k + out_n
实例:
k = 3
in_n = 4
out_n = 5
conv2d = nn.Conv2d(in_n, out_n, k)
print(conv2d.weight.shape)
print(conv2d.bias.shape)
输出:
torch.Size([5, 4, 3, 3])
torch.Size([5])
故参数总量为:5*4*3*3 + 5
10、pytorch 中的 Conv2d 函数的作用和参数详解
参考资料:
PyTorch学习笔记(9)——nn.Conv2d和其中的padding策略
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
函数作用 :对由多个平面组成的输入进行二维卷积。
输入:维度 [B, C_in, H, W]
输出:维度 [B, C_out, H_out, W_out]
参数详解
in_channels(int):输入通道数
out_channels(int):输出通道数
kernel_size([int, tuple(int, int)]):卷积核大小,当输入为 3 时,则卷积核的大小为 [3, 3],当输入为 (3, 4) 时,则卷积核的大小为 [3, 4] ,即***个数值代表卷积核的高,第二个数值代表卷积核的宽。
如果考虑 dilation 参数,则实际的卷积核感受野大小为:(dilation - 1) * (kernel_size - 1) + kernel_size,即当 dilation=2 时,3*3 的卷积核的实际感受野为 5*5
stride([int, tuple], 可选)=1: 卷积核的移动步长
padding([int, tuple(int, int)], 可选)=0: 填充的长度,当输入为 0 时,则不进行填充。当输入为 1 时,则输入的每一条边都填充 1 层 0 值,即上下左右各填充 1 层 0 值。如果输入为 (1, 2) 时,则表示上下各填充 1 层 0 值,而左右则各填充 2 层 0 值。但是不能输入 (1, 2, 3, 4) 四个元素的 tuple
dilation(int)=1:卷积核元素之间的间距。当输入为 2 时,卷积核元素之间的空洞个数为 1。
groups=1:
bias=True:
例子:
膨胀卷积的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于膨胀卷积和空洞卷积、膨胀卷积的信息别忘了在本站进行查找喔。