windows上运行yolov3代码详解(小白)

batch_normalize=1 # 是否做BN
代码链接

环境配置

没有Anaconda的话可以安装下

首先创建虚拟环境,名称随意,版本3.9.我觉得挺好的在这里插入图片描述
激活虚拟环境
conda activate 刚刚创建的环境名称
切换到requirements.txt目录下,直接vscode打开yolov3文件夹后,右键requirements.txt,复制路径
cd 路径即可(ps,先切换磁盘,for example,d:)再cd
按照requirements.txt安装环境后,直接运行train.py,你应该只会遇到two problem(我当初是doge),因为没记录下来,这里就不赘述了

yolov3.yaml

# YOLOv3 🚀 by Ultralytics, AGPL-3.0 license

# Parameters
nc: 80  # 要检测的类的数量
depth_multiple: 1.0  # 控制或缩放模型层的深度
width_multiple: 1.0  # 用于控制或缩放图层的通道数
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

# 这些数字成对排列,每对代表锚框的宽度和高度,如第一个锚框宽为10,高为13
# 原始模型,只有三个检测层,因此对应三组初始化Anchor值。当输入图像尺寸为640X640时
# P3/8 对应的检测层大小为80X80大小,可以用来检测大小在8X8以上的目标。
# P4/16对应的检测层大小为40X40大小,可以用来检测大小在16X16以上的目标。
# P5/32对应的检测层大小为20X20大小,可以用来检测32X32以上的目标

# darknet53 backbone
backbone:
  # [from, number, module, args]
  # from是从哪里接,-1就是代表上一层,-2就是上上层,具体数字就是具体哪一层
  # number就是重复来几次,8, Bottleneck就是重复8次Bottleneck,和resnet里面的残差类似
  # 实际中的重复次数=number*depth_multiple

  # args就是module的参数,filters、size、stride
  # 瓶颈层(Bottleneck):我们知道它是由:
  # 1x1 卷积层:应用 1x1 卷积来降低输入的维度。这降低了计算成本并有助于压缩信息
  # 3x3 卷积层:该层捕获降维内的空间特征
  # 1x1 卷积层(扩展):应用另一个 1x1 卷积将维度扩展回原始大小。这是瓶颈部分,因为它在再次扩展之前通过狭窄的层“挤压”信息
  # 64表示的是滤波器的个数
  [[-1, 1, Conv, [32, 3, 1]],  # 0层            1
   [-1, 1, Conv, [64, 3, 2]],  # 1-P1/2         2
   [-1, 1, Bottleneck, [64]],                   #4
   [-1, 1, Conv, [128, 3, 2]],  # 3-P2/4        5
   [-1, 2, Bottleneck, [128]],                  #5+2*2
   [-1, 1, Conv, [256, 3, 2]],  # 5-P3/8        10
   [-1, 8, Bottleneck, [256]],                  #10+2*8
   [-1, 1, Conv, [512, 3, 2]],  # 7-P4/16       27
   [-1, 8, Bottleneck, [512]],                  #27+2*8
   [-1, 1, Conv, [1024, 3, 2]],  # 9-P5/32      44
   [-1, 4, Bottleneck, [1024]],  # 10           44+2*4=52+FC=53
  ]

# YOLOv3 head
# 其实是Neck+head
# [-1, 1, Bottleneck, [1024, False]
# False其实这就是关闭了shortcut的选项
head:
  [[-1, 1, Bottleneck, [1024, False]],
   [-1, 1, Conv, [512, 1, 1]],
   [-1, 1, Conv, [1024, 3, 1]],
   [-1, 1, Conv, [512, 1, 1]],
   [-1, 1, Conv, [1024, 3, 1]],  # 15 (P5/32-large)

   [-2, 1, Conv, [256, 1, 1]],
   # nn.Upsample表示上采样,
   # None表示没有特定的输出大小,即输出大小将由输入大小和上采样因子确定
   # nearest表示使用最近邻插值来进行上采样 
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],  
  #  -1 表示从当前层往前数的第一个元素。
  # 8 表示这个元素的索引为 8,可能是指前面网络中的第 8 层。
  # 1 表示该元素的输出通道数为 1。
  # Concat 表示使用拼接(concatenate)操作。
  # [1] 表示拼接的方向,这里是沿着通道轴进行拼接
   [[-1, 8], 1, Concat, [1]],  # cat backbone P4
   [-1, 1, Bottleneck, [512, False]],
   [-1, 1, Bottleneck, [512, False]],
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, Conv, [512, 3, 1]],  # 22 (P4/16-medium)

   [-2, 1, Conv, [128, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P3
   [-1, 1, Bottleneck, [256, False]],
   [-1, 2, Bottleneck, [256, False]],  # 27 (P3/8-small)

   [[27, 22, 15], 1, Detect, [nc, anchors]],   # Detect(P3, P4, P5)
  ]

train.py

# 权重文件,选择你想使用的pt权重文件
parser.add_argument('--weights', type=str, default=ROOT / 'yolov3-tiny.pt', help='initial weights path')
# yaml文件,主要保存的是包含有关模型架构、超参数和训练配置的信息(这里默认使用的是yolov3-tiny.yaml,你可以根据自己需要更换)
parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
# 选择你的训练数据集
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')

run


运行后,会生成run文件夹,run\exp\weights\best.pt,这是我们根据我们训练生成的pt文件,保存的是训练过程中在验证集上表现最好的模型权重,当然还有个last.pt,顾名思义,保存的是最后一次训练迭代结束后的模型权重
里面还有一堆其他的,如resluts.csv文件,我们可以根据该文件来绘制图表,此处亦不再赘述

detect.py

在detect部分呢,还是上述三行代码,我们可以把pt权重文件换成best.pt

数据集

coco128数据集
同样的,运行后会再run下生成detect文件

ok,应该足以

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux应用开发基础知识——字符文字编码(五)

前言: TXT 文件中保存的是字符的核心:它的编码值。而 Notepad 上显示时, 这些字符对应什么样的形状态,这是由字符文件决定的。编码值,字体是两个不一样的东西,比如 A 的编码值是 0x41,但是在屏幕…

2.2 CE修改器:未知数值扫描

本关需要扫描未知数只扫描,要在不知道初始值的情况下找到一个在0到500之间的数值。首先,选择“未知的初始值”扫描方式,在数值类型中选择 4 字节,并点击“首次扫描”以开始扫描。扫描结束后,点击“打我”按钮进行一些操…

CS224W5.3——信念传播

此文中,我们介绍信念传播,这是一种回答图中概率查询的动态规划方法。通过迭代传递消息给邻居节点,如果达成共识,则计算最终的信念值。然后,我们通过示例和泛化树结构展示消息传递。最后讨论了循环信念传播算法及其优缺…

建行驻江门市分行纪检组以政治谈话压责任促发展

开展政治谈话,是加强“一把手”和领导班子监督、严肃党内政治生活、加强对党员领导干部日常教育管理的有效手段。 为督促“一把手”和领导班子成员依法依规履行职责、行使权力,推动党中央重大决策部署以及建设银行总行、广东省分行党委的决策部署在本单…

数据结构之红黑树

红黑树的概念 红黑树(Red-Black Tree)同AVL树一样, 也是一种自平衡的二叉搜索树, 但在每个结点上增加一个存储位表示结点的颜色, 可以是Red或Black, 通过对任何一条从根到叶子的路径上各个结点着色方式的限制, 红黑树确保没有一条路径会比其他路径长出俩…

Vue23组件自定义事件 和 解绑事件

Vue2&3组件自定义事件 和 解绑事件 Vue2组件自定义事件 功能:父组件绑定数据,子组件触发事件。(父绑子触发) 实现步骤(前三步在父组件实现,第四步在子组件实现): 第一步&#…

测试用例的设计方法(黑盒)

1.基于需求的设计方法 比如针对网易邮箱进行测试:分为功能相关和非功能相关两大类 但是这么设计的话,有无数多个测试用例,我们现在看到的只是一些大概的测试用例,要想设计具体的测试用例,需要用到下面测试用例的方法…

盘点双11!阿里妈妈助这些品牌短视频赢增长!

刚刚!一年一度的双11落下帷幕,很多新变化值得回味。 尽管天气在变凉,但市场出现了逐渐回暖的迹象。在此背景下,大量商家特别关心如何在双11打一场漂亮的胜仗。 卖方如何行动,关键在于买方的变化。在阿里妈妈发布的《…

神经网络(第二周)

一、简介 1.1 需求预测示例 1.1.1 逻辑回归算法 根据价格预测商品是否畅销。特征:T恤的价格;分类:销售量高1/销售量低0;使用逻辑回归算法进行分类,拟合效果如下图所示: 1.1.2 神经元和神经网络 将逻辑回…

【LeetCode刷题-二分查找】--162.寻找峰值

162.寻找峰值 方法一:寻找最大值 题目保证了nums[i]≠nums[i1],所以数组nums中最大值两侧的元素一定严格小于最大值本身,因此最大值所在的位置就是一个可行的峰值位置 class Solution {public int findPeakElement(int[] nums) {int idx 0…

分类网络搭建示例

搭建CNN网络 本章我们来学习一下如何搭建网络,初始化方法,模型的保存,预训练模型的加载方法。本专栏需要搭建的是对分类性能的测试,所以这里我们只以VGG为例。 请注意,这里定义的只是一个简陋的版本,后续一…

什么是数据库事务、事务的ACID、怎么设置/禁止自动提交?

数据库事务及ACID 数据库事务是指作为单个逻辑工作单元执行的一组操作。这组操作要么全部成功地执行,要么全部不执行,不允许出现部分执行的情况。数据库事务通常需要满足ACID属性,即原子性(Atomicity)、一致性&#x…

第2关:还原键盘输入(list)

题目&#xff1a; 知识点&#xff1a; 列表list相较于数组&#xff1a; 优势&#xff1a;可在任意指定位置插入或者删除元素而不影响列表其他地方 。 劣势&#xff1a;无法直接进行下标索引&#xff0c;需要迭代器it逐个遍历。 代码&#xff1a; #include <iostream>…

企业级信息化系统 ERP、OA、CRM、EAM、WMS、MES、PM

微服务架构&#xff0c;前端采用微应用架构&#xff0c;可做到不同服务使用不同数据库独立运行。全平台采用基于模型驱动的设计模式&#xff0c;并在前后端留有大量的代码植入入口&#xff0c;方便开发者对平台进行改造扩充。企业信息中心开发ERP、OA、CRM、EAM、WMS、MES、PM等…

R系组播调优方案

修改/etc/sysctl.conf添加如下内容&#xff1a; Vim /etc/sysctl.con net.ipv4.ip_forward1 net.ipv4.ip_nonlocal_bind1 net.ipv4.conf.all.rp_filter0 net.ipv4.conf.default.rp_filter0 net.bridge.bridge-nf-call-arptables 0 net.bridge.bridge-nf-call-ip6tables 0 …

【踩坑】Putty报错: Can’t agree a key change algorithm

原因可能是putty版本太老了&#xff0c;更新putty就好了 下载地址&#xff1a;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 根据需要选择自己想要下载的版本&#xff0c;我是下载的如下图所示的版本。 另外&#xff0c;了解了一下Putty是用来远程连接…

用excel计算一个矩阵的逆矩阵

假设我们的原矩阵是一个3*3的矩阵&#xff1a; 125346789 我们现在要求该矩阵的逆矩阵&#xff1a; 鼠标点到其它空白的地方&#xff0c;用来存放计算结果&#xff1a; 插入-》函数&#xff1a; 选择MINVERSE函数&#xff0c;这个就是求逆矩阵的函数&#xff1a; 点击“继续…

怎么改变容易紧张的性格?

容易紧张的性格是比较通俗的说法&#xff0c;在艾森克人格测试中&#xff0c;容易紧张的性格就属于神经症人格&#xff0c;神经质不是神-经-病&#xff0c;而是一种人格特征&#xff0c;这种特征包括&#xff1a;敏感&#xff0c;情绪不稳定&#xff0c;易焦虑和紧张。有兴趣的…

中国电子学会2023年09月份青少年软件编程Python等级考试试卷六级真题(含答案)

2023-09 Python六级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 以下选项中&#xff0c;不是tkinter变量类型的是&#xff1f;&#xff08;D &#xff09;(2分) A.IntVar() B.StringVar() C.Do…

Redis缓存穿透、击穿和雪崩

文章目录 前言一、缓存穿透&#xff08;查不到&#xff09;1.概念2.解决方案布隆过滤器缓存空对象 二、缓存击穿&#xff08;量太大&#xff0c;缓存过期&#xff01;&#xff09;1.概述2.解决方案1.设置热点数据永不过期2.加互斥锁 三、缓存雪崩1.概念2.解决方案1.redis高可用…