irpas技术客

Yolov5更换上采样方式( 最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积)_迪菲赫尔曼_yolov5改进

未知 5390

Yolov5更换上采样方式

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录 Yolov5更换上采样方式常用上采样方式介绍1. 最近邻插值(Nearest neighbor interpolation)2. 双线性插值(Bi-Linear interpolation)3. 双立方插值(Bi-Cubic interpolation)4. 三线性插值(Trilinear Interpolation)5. 反池化6. 转置卷积 实验结果修改方式:


常用上采样方式介绍 1. 最近邻插值(Nearest neighbor interpolation)

>>> input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2) >>> input tensor([[[[ 1., 2.], [ 3., 4.]]]]) >>> m = nn.Upsample(scale_factor=2, mode='nearest') >>> m(input) tensor([[[[ 1., 1., 2., 2.], [ 1., 1., 2., 2.], [ 3., 3., 4., 4.], [ 3., 3., 4., 4.]]]])
2. 双线性插值(Bi-Linear interpolation)

>>> input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2) >>> input tensor([[[[ 1., 2.], [ 3., 4.]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bilinear') # align_corners=False >>> m(input) tensor([[[[ 1.0000, 1.2500, 1.7500, 2.0000], [ 1.5000, 1.7500, 2.2500, 2.5000], [ 2.5000, 2.7500, 3.2500, 3.5000], [ 3.0000, 3.2500, 3.7500, 4.0000]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True) >>> m(input) tensor([[[[ 1.0000, 1.3333, 1.6667, 2.0000], [ 1.6667, 2.0000, 2.3333, 2.6667], [ 2.3333, 2.6667, 3.0000, 3.3333], [ 3.0000, 3.3333, 3.6667, 4.0000]]]])
3. 双立方插值(Bi-Cubic interpolation)

>>> input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2) >>> input tensor([[[[ 1., 2.], [ 3., 4.]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bicubic') # align_corners=False >>> m(input) tensor([[[[0.6836, 1.0156, 1.5625, 1.8945], [1.3477, 1.6797, 2.2266, 2.5586], [2.4414, 2.7734, 3.3203, 3.6523], [3.1055, 3.4375, 3.9844, 4.3164]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bicubic', align_corners=True) >>> m(input) tensor([[[[1.0000, 1.3148, 1.6852, 2.0000], [1.6296, 1.9444, 2.3148, 2.6296], [2.3704, 2.6852, 3.0556, 3.3704], [3.0000, 3.3148, 3.6852, 4.0000]]]])

计算效果:最近邻插值算法 < 双线性插值 < 双三次插值 计算速度:最近邻插值算法 > 双线性插值 > 双三次插值


4. 三线性插值(Trilinear Interpolation)


当align_corners = True时,线性插值模式(线性、双线性、双三线性和三线性)不按比例对齐输出和输入像素,因此输出值可以依赖于输入的大小


5. 反池化


6. 转置卷积

yolov5默认采用的就是最近邻插值


实验结果

这里我将原本的最近邻插值的上采样方式替换为转置卷积;有人通过实验证明了确实涨点,但是我在VOC数据集上测试并没有涨点,mAP0.5大概掉了不到1点

修改方式:

第一步;在models/yolo.py添加nn.ConvTranspose2d

第二步;models/yolo.py添加如下代码

elif m is nn.ConvTranspose2d: if len(args) >= 7: args[6] = make_divisible(args[6] * gw, 8)

第三步;修改配置文件,以yolov5s.yaml为例

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license # Parameters nc: 80 # number of classes depth_multiple: 0.33 # model depth multiple width_multiple: 0.50 # layer channel multiple anchors: - [10,13, 16,30, 33,23] # P3/8 - [30,61, 62,45, 59,119] # P4/16 - [116,90, 156,198, 373,326] # P5/32 # YOLOv5 v6.0 backbone backbone: # [from, number, module, args] [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, C3, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 6, C3, [256]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 3, C3, [1024]], [-1, 1, SPPF, [1024, 5]], # 9 ] # YOLOv5 v6.0 head head: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.ConvTranspose2d, [512, 4, 2, 1, 0, 512]], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, C3, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.ConvTranspose2d, [256, 4, 2, 1, 0, 256]], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, C3, [256, False]], # 17 (P3/8-small) [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ]

出现下面这样子就是运行成功啦

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。


1.手把手带你调参Yolo v5 (v6.1)(一)🌟强烈推荐

2.手把手带你调参Yolo v5 (v6.1)(二)🚀

3.如何快速使用自己的数据集训练Yolov5模型

4.手把手带你Yolov5 (v6.1)添加注意力机制(一)(并附上30多种顶会Attention原理图)🌟

5.手把手带你Yolov5 (v6.1)添加注意力机制(二)(在C3模块中加入注意力机制)

6.Yolov5如何更换激活函数?

7.Yolov5 (v6.1)数据增强方式解析

8.Yolov5更换上采样方式( 最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积)

9.Yolov5如何更换EIOU / alpha IOU / SIoU?

10.Yolov5更换主干网络之《旷视轻量化卷积神经网络ShuffleNetv2》🍀

11.YOLOv5应用轻量级通用上采样算子CARAFE🍀

12.空间金字塔池化改进 SPP / SPPF / ASPP / RFB / SPPCSPC🍀

13.持续更新中



1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #yolov5改进