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

news2024/11/26 21:24:05

原文地址: https://www.iotword.com/3138.html

1. 常用上采样方式介绍

1. 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.]]]])

1.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]]]])

1.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]]]])

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

1.4 三线性插值(Trilinear Interpolation)

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

1.5. 反池化

在这里插入图片描述

2. 转置卷积

在这里插入图片描述
yolov5默认采用的就是最近邻插值
在这里插入图片描述

2.1 实验结果

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

2.2 修改方式:

  • 第一步;在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)
  ]

出现下面这样子就是运行成功啦
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/621111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【goframe】(4):使用goframe 接入grpc服务,非常的方便,可以简单的构建和生成服务代码,并且启动方法也特别简单,使用代码本地调用成功

目录 前言1&#xff0c;关于grpc微服务2&#xff0c;修改生成代码3&#xff0c;相关的goframe的grpc配置4&#xff0c;总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未经博主允许不得转载。 博主CSDN地址是&#xff1a;https://b…

3.变量|Java学习笔记

文章目录 数据类型整型的类型浮点型的类型字符类型boolean类型 基本数据类型转换自动类型转换强制类型转换 基本数据类型和String类型的转换 变量 变量名 值 数据类型 https://www.matools.com/# 数据类型 整型的类型 浮点型的类型 关于浮点数在机器中存放形式的简单说明&…

Ibatis与Mybatis的区别—侧重于Ibatis

目录 一、什么是Ibatis&#xff1f; 1、iBatis是一款轻量级的持久化框架 2、iBatis最大的特点是将SQL语句与Java代码分离 3、iBatis具有以下几个关键组成部分&#xff1a; 二、Ibatis与Mybatis的区别 1、基本信息不同 2、开发时间不同 3、配置方法不同 三、Ibatis与My…

HotSpot虚拟机垃圾回收算法及收集器

目录 一、对象引用 二、堆区和方法区回收 1. 堆区回收 2. 方法区回收 三、垃圾回收算法 1. 算法总结 2. 算法相关细节 四、垃圾收集器 1. 新生代收集器 2. 老年代收集器 3. 混合式收集器G1 4. 低延迟收集器 五、参考资料 一、对象引用 判定对象是否存活和引用离…

Unix/Linux编程:Unix domain socket

〇、前言 socket 是一种 IPC &#xff08;Inter-Process Communication&#xff0c;进程间通信&#xff09;方法&#xff0c;它允许位于同一主机&#xff08;计算机&#xff09;或使用网络连接起来的不同主机上的应用程序之间交换数据。通过使用Socket&#xff0c;开发人员可以…

在VSCode中使用LaTex,语法检测插件grammarly

整个文章分为以下几个内容&#xff0c;打 * 的是必须要安装的 LaTex 安装*VSCode 安装*在 VSCode 中配置 LaTexGrammarly语法检测插件 LaTex 安装* latex的下载安装可参考&#xff1a;LaTex&#xff08;2021&#xff09;安装教程 VSCode 安装* VSCode下载&#xff1a;VSCo…

带你用WePY框架提升开发效率

在小程序开发中&#xff0c;提高开发效率、优化代码质量和增强用户体验是每位开发者都追求的目标。而wepy作为一种基于Vue.js的小程序开发框架&#xff0c;提供了更好的开发体验和更高效的开发方式。本文将介绍wepy的基本功能和特性&#xff0c;分享一些实际的代码案例&#xf…

图像的匹配

2023.6.7 图像的匹配 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此&#xff0c;OpenCV 带有一个函数 cv.matchTemplate()。它只是在输入图像上滑动模板图像&#xff08;如在 2D 卷积中&#xff09;&#xff0c;并比较模板图像下的模板和输入图像的补丁。在…

STM32——CAN通信

1、CAN通信概述 STM32F103有两个CAN&#xff0c;都分别有自己的发送接收邮箱。 发送邮箱共有3个来发送报文&#xff0c;发送调度器根据优先级决定哪个邮箱的报文先被发送。 共有2个接收FIFO&#xff0c;每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。 CAN通信通过…

Mujoco 控制器接口(四)

目录 .1 简介 1.1 控制器实现 .2 sim.step() .3 实例 References .1 简介 control看到下面的图中就是mjtNum类型 mjtNum实际上就是浮点数 ctrl是底层的输入 外界扰动就是通过上图的qfrc和xfrc来添加的 1.1 控制器实现 实际上加上控制器就是xml里添加actuator joint就是…

算法提高-图论-单源最短路的建图方式

单源最短路的建图方式 单源最短路的建图方式AcWing 1129. 热浪AcWing 1128. 信使AcWing 1127. 香甜的黄油AcWing 1126. 最小花费AcWing 920. 最优乘车AcWing 903. 昂贵的聘礼 单源最短路的建图方式 AcWing 1129. 热浪 #include <iostream> #include <cstring>usi…

安装OpenWrt到电脑,安装包选哪个?

https://downloads.openwrt.org/releases/22.03.5/targets/x86/ releases发行&#xff0c;targets目标&#xff1b; —————————————— 64&#xff1a;具有64位功能的计算机&#xff1b; generic&#xff1a;一般的&#xff0c;通用的&#xff0c;仅32位计算机&…

学习Vue这一个就够

1、淘宝镜像 1: 解释一下 npm 为什么要配置淘宝镜像原因&#xff1a;因为node.js 默认使用的是国外的网站 。国内访问有一个跨国内局域网的操作。所以就会有时候很慢。这就跟为什么网站的静态资源有些会使用CDN 加速一样的淘宝镜像是什么&#xff1f;就是npm 很多的插件淘宝已经…

docker cgroub

docker 的资源管理 1、cpu的资源控制 一&#xff1a;设置cpu的资源上限 cd /sys/fs/cgroup/cpu/docker/ cpu 的占用量达到100% cpu 设置一半50% 2. 设置cpu资源占用比&#xff08;设置多个容器才有用&#xff09; docker run -itd --name c3 --cpu-shares 512 centos:7 do…

springboot+mybatis实现删除(二)

一&#xff0c;XML映射文件和动态SQL XML映射文件的名称与Mapper接口名称一致&#xff0c;并且将XML映射文件和Mapper接口放置在相同包下&#xff08;同包同名&#xff09;&#xff0c;右键创建目录/分隔&#xff0c;例&#xff1a;com/baidu/crm XML映射文件的namespace属性为…

工程训练 -江苏海洋大学-mooc-最终答案

这不点赞评论一下嘛&#xff1f;&#xff1f;&#xff1f;呜呜呜 判断题&#xff08;共217道&#xff09; 1.舂实模样周围及砂箱边或狭窄部分的型砂&#xff0c;通常采用砂舂的平头端舂砂。 2.造型时&#xff0c;分型面上通常使用的是面砂&#xff0c;覆盖模样的则使用背砂。 3…

【微服务】springboot整合swagger多种模式使用详解

目录 一、前言 1.1 编写API文档 1.2 使用一些在线调试工具 1.3 postman 1.4 swagger 二、swagger简介 2.1 背景 2.2 swagger优缺点 2.2.1 swagger优点 2.2.2 swagger缺点 2.2.3 swagger使用场景 三、swagger常用的几种整合模式 3.1 swagger2 3.2 knife4j 3.2.1 k…

《设计模式》之命令模式

文章目录 1、定义2、动机3、类结构4、优缺点5、总结6、代码实现(C) 1、定义 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户端进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 2、动机 在软件构建过程中&#xff0c…

虚拟内存和物理内存:概念、原理和应用

目录 概述1. 概念2. 原理3. 设计寻位原理4. 应用场景结论 概述 当你使用计算机时&#xff0c;内存是一个非常重要的资源。它用于存储正在运行的程序和数据&#xff0c;确保系统的正常运行。在计算机系统中&#xff0c;存在着虚拟内存和物理内存的概念&#xff0c;它们共同协作…

Docker Gitlab Container Registry配置

文章目录 前言一、Registry是什么二、步骤配置gitlab.rb文件修改docker-compose.yaml文档验证推送镜像 总结 前言 找了很多资料包括官网1都没有发现比较清楚的配置registry的方法&#xff0c;自己摸索了半天发现其实通过简单设置就能够配置好Container Registry。 之所以在题…