Yolov5中使用Resnet18作为主干网络
Yolov5中使用Resnet18作为主干网络
预备知识
采用Resnet-18作为主干网络,首先第一件事情就要了解Resnet的网络结构
以及resnet-18中的残差层是做什么的
引入残差层是为了解决伴随着层数的递增,而出现的梯度消失的问题,从而引入了残差层即
在sigmoid中其激活函数
S(x)=11+e−xS‘(x)=S(x)(1−S(x))S(x)=\frac{1}{1+e^{-x}}\\ S`(x)=S(x)(1-S(x))S(x)=1+e−x1S‘(x)=S(x)(1−S(x))
自此可以看出S’(x)最大就是0.5
而原层数会伴随着迭代次数而逐渐相乘即越来越小从而出现梯度消失
但残差曾的意义是让其再加一个,变成一个大于1的数字从而抵抗梯度消失
z=y+x∂z∂x=∂y∂x+1z=y+x\\ \frac{\partial z}{\partial x}=\frac{\partial y}{\partial x}+1z=y+x∂x∂z=∂x∂y+1
如何在yolo中进行修改
首先在commmon.py添加残差层
class BasicBlock(nn.Module):def __init__(self,in_channels,out_channels,stride=1,padding=1) -> None:super(BasicBlock, self).__init__()self.layer = nn.Sequential(nn.Conv2d(in_channels,out_channels,kernel_size=3,stride=1,padding=padding,bias=False),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True), nn.Conv2d(out_channels,out_channels,kernel_size=3,stride=1,padding=padding,bias=False),nn.BatchNorm2d(out_channels))self.shortcut = nn.Sequential()if stride != 1 or in_channels != out_channels:self.shortcut = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, bias=False),nn.BatchNorm2d(out_channels))def forward(self, x):out = self.layer(x)out += self.shortcut(x)out = torch.nn.functional.relu(out)return out
然后再yolo.py中那一串层里面添加一个BasicBlock层
最后在你现用的模型主干里面替换即可
[[-1, 1, Conv, [64, 1]], [-1, 2, BasicBlock, [64]], [-1, 1, Conv, [128, 3, 2]],[-1, 2, BasicBlock, [128]],[-1, 1, Conv, [256, 3, 2]],[-1, 2, BasicBlock, [256]],[-1, 1, Conv, [512, 3, 2]],[-1, 2, BasicBlock, [512]],[-1, 1, Conv, [1024, 3, 2]],[-1, 2, BasicBlock, [1024]],]
然后打开tensorboard
但不知道为什么修改了网络模型结构,在原始的yolov5中召回、精确啥的都等于零,可能是原版本的bug,底下这个是我在yolov7模型修改过的东西。
就很棒nice。
哦,对啦,如果不会修改模型路径,在这个里面改,还要把上边的pt文件给删掉
parser.add_argument('--weights', type=str, default= '', help='initial weights path')
parser.add_argument('--cfg', type=str, default=‘你模型的路径’,, help='model.yaml path')
Yolov5中使用Resnet18作为主干网络相关推荐
- YOLOv5改进之十三:主干网络C3替换为轻量化网络EfficientNetv2
前 言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法.此后的系列文章,将重点对YOLOv ...
- 如何在DBNet中加入新的主干网络
摘要 这篇文章告诉大家如何在DBnet中加入新的主干网络.通过这篇文章你可以学到如何将现有的主干网络加入到DBNet中,提高DBNet的检测能力 主干网络 我加入的网络是ConvNext.代码详见: ...
- [深度学习]如何替换YoloV5的主干网络:Flexible-Yolov5
Flexible-Yolov5:可自定义主干网络的YoloV5工程实践 本文目录: 概述 理论学习与环境配置 准备自己的数据集 修改或调整自定义的主干网络 部署训练 一.概述 YoloV5的主干网络是 ...
- [YOLOv7/YOLOv5系列算法改进NO.21]CNN+Transformer——主干网络替换为又快又强的轻量化主干EfficientFormer
前 言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法.此后的系列文章,将重点对YOLOv ...
- 使用 YOLOv5 训练自动驾驶目标检测网络
本文会详细介绍YOLO V5的网络结构及组成模块,并使用YOLO V5s在BDD100K自动驾驶数据集上进行迁移学习,搭建属于自己的自动驾驶交通物体对象识别网络. 本文来源:知乎-自动驾驶全栈工程师 ...
- 使用MobileViT替换YOLOv5主干网络
使用MobileViT替换YOLOv5主干网络,并训练 前述 使用MobileViT替换YOLOv5主干网络 训练 前述 读了MobileViT这篇论文之后觉得文章里面提到的技巧很新奇,所以就尝试把它 ...
- 复现Transformer架构主干网络过程中的心路历程和个人感悟
心路历程:复现Transformer架构主干网络过程中,感受颇多,以前只是使用相关衍生模型,但是,从来没有深入的研究过Transformer架构的细节处理工作,这几天真的是成长了.这两年第三次复现作者 ...
- Transformer主干网络——DeiT保姆级解析
前言 这篇文章是基于蒸馏的方法,提高ViT的性能,根据最近transformer相关文章的实验对比以及引用可以发现,这篇文章基本上是ViT以后出现的比较早的文章了. 系列文章 Transformer主 ...
- CV 经典主干网络 (Backbone) 系列: CSPNet
CV 经典主干网络 (Backbone) 系列: CSPNet 作者:Chien-Yao Wang 等 发表时间:2019 Paper 原文: CSPNet: A New Backbone that ...
最新文章
- 登录和注册(struts2+hibernate+spring)
- Windows Server2008下MYSQL外网无法访问问题解决
- linux启动Spark本地模式(Local模式)
- android监听方法的耗时时间,Android从网络获取北京时间以及动态的监听时间
- 支持tls的tcp服务器,TCP+TLS
- 【报告分享】2019-2020年人工智能产业人才发展报告.pdf(附下载链接)
- 密码保护(2017.12.22)
- VMware -- 安装linux镜像
- java全栈_java全栈的知识技能
- Java面试笔试题大汇总一(最全+详细答案)
- CSS实现文本居中和块级元素居中
- java三三剩二五五剩三,大年三十彩灯悬,彩灯齐明光灿灿,三三数时能数尽,五五数时剩一盏,七七数时刚刚好,八八数时还缺三,...
- Ae 入门系列之十:效果和动画预设
- 哪些5G芯片和5G模组已经问世?| 截止至2020年Q1
- 龙芯1c300b开发语言,龙芯 1C0300B 主控芯片已成功进入激光打印机市场
- Core Data详解
- c# asp.net mvc使用斑马GK888t打印机打印标签
- Unity Shader - BRP - Soft Particle - 软粒子
- 苏宁web前端电话面试
- SRE运维工程师笔记-Linux文件管理和IO重定向
热门文章
- EDA技术试验二:组合逻辑电路设计、仿真与实现实验
- 真正程序员的工资是怎样的?
- html中qq号码怎么写,根据QQ头像hash分析QQ号(html版)
- word maze 单词迷宫 (java语言编写)
- 【vue+springboot】excel模板下载、导入功能实现
- CVTE软件C语言面试经验,CVTE软件技术支持面试总结
- ORAN传输封装类型
- Android通知栏—Notification(一)
- 如何评判一个企业是否需要实施erp系统?
- 计算机硕士论文质疑数据不够,硕士论文伪造数据 抽检_硕士论文编数据的后果_硕士论文数据造假怎么被发现...