卷积的作用
图像处理和提取特征
各种类型的卷积
带孔卷积
带孔卷积实现时并不是在卷积核的“孔”里填0,而是在feature map上跳着卷积。
参数rate表示每隔(rate-1)个像素采样
优点:扩大感受野。
分组卷积
顾名思义,则是对输入feature map进行分组,然后每组分别卷积。假设输入feature map的尺寸仍为C∗H∗W,输出feature map的数量为N个,如果设定要分成G个groups,则每组的输入feature map数量为C/G,每组的输出feature map数量为N/G,每个卷积核的尺寸为C/G∗K∗K,卷积核的总数仍为N个,每组的卷积核数量为N/G,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为N∗C/G∗K∗K,可见,总参数量减少为原来的 1/G.
优点:减少参数量
深度可分离卷积
前面讲MobileNet文章已经介绍了。
优点:减少参数量
可变形卷积
可变形卷积的流程为:
- 原始图片batch(大小为b h w c),记为U,经过一个普通卷积,卷积填充为same,即输出输入大小不变,对应的输出结果为(b h w 2c),记为V,输出的结果是指原图片batch中每个像素的偏移量(x偏移与y偏移,因此为2c)。
- 将U中图片的像素索引值与V相加,得到偏移后的position(即在原始图片U中的坐标值),需要将position值限定为图片大小以内。
position的大小为(b h w 2c),但position只是一个坐标值,而且还是float类型的,我们需要这些float类型的坐标值获取像素。 - 例,取一个坐标值(a,b),将其转换为四个整数,floor(a), ceil(a), floor(b), ceil(b),将这四个整数进行整合,
得到四对坐标(floor(a),floor(b)), ((floor(a),ceil(b)), ((ceil(a),floor(b)), ((ceil(a),ceil(b))。这四对坐标每个坐标都对应U
中的一个像素值,而我们需要得到(a,b)的像素值,这里采用双线性差值的方式计算
(一方面得到的像素准确,另一方面可以进行反向传播)。 - 在得到position的所有像素后,即得到了一个新图片M,将这个新图片M作为输入数据输入到别的层中,如普通卷积。
优点:能更好地适应网络感兴趣的区域,提取更好的特征
3D卷积
用于视频的卷积。
输入:batchsize channels depth width height. depth表示帧数
卷积核size:width height depth.
举例:
- 输入形状是(7,60,40),7表示输入的图像帧数,60和40分别是宽和高。
- 卷积核size是(7,7,3),3表示每次过滤器处理的图像帧数,7和7分别是卷积核宽和高。
- 输出形状是(5,54,34),5表示输出的图像帧数,54和34分别是宽和高。
pytorch实现
torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)