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

news2025/7/19 10:11:32

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,应该足以

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

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

相关文章

CS224W5.3——信念传播

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

践行“微”使命——建行江门市分行大力发展普惠金融支持小微企业

促进小微企业发展是保持国民经济高质量发展的重要基础。建行广东省江门市分行立足当地特色产业之需,以金融活水润泽侨乡众多小微企业,携手共赴美好未来。 双向奔赴,添翼高企发展 江门开平水口镇是全国三大水暖卫浴生产基地之一,…

CHM Viewer Star 6.3.2(CHM文件阅读)

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…

队列Queue

结构特点:先进先出实现模式:单向非循环双指针链表 两个指针分别记录头和尾之所以不用循环链表是添加删除元素都在链表头部进行,不涉及尾部增删操作。 声明队列 声明队列之所以要用到两个结构体是因为除了单个链表节点之外,还需要…

神经网络(第二周)

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

Java的类与Golang的结构体的区别

Java作为一门面向对象(OOP)的编程语言,它有类(class)的存在,而对于Golang,它不完全遵从OOP编程语言的设计思想,但它也有类似Java类的结构存在,那就是结构体(s…

数据结构与算法之排序: Leetcode 21. 合并两个有序链表 (Typescript版)

合并两个有序链表 https://leetcode.cn/problems/merge-two-sorted-lists/ 描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 …

【网络奇遇记】电路交换与分组交换谁更 “ 美 ”

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. 电路交换1.1 电路交换讲解1.2 电路交换实例 二. 分组交换1.1 分组交换讲解1.2 分组交换实例1.3 …

Producer

Producer开发样例 版本说明 新客 户端, 从Kafka 0.9.x 开始, client基于Java语言实现。同时提供C/C, Python等其他客户端实现。 开发步骤 配置客户端参数以及创建客户端实例;构建待发送消息;发送消息;关闭生产者实例; 代码示例 public class KafkaProducer {public stati…

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

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

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

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

SpringBoot学习(黑马程序员day12)

1jwt令牌 JWT的组成: (JWT令牌由三个部分组成,三个部分之间使用英文的点来分割) 第一部分:Header(头), 记录令牌类型、签名算法等。 例如: {"alg":"HS256",&qu…

Linux各种版本安装详细步骤和root密码破解

文章目录 VMware新建虚拟机硬件设置设置虚拟网络挂载ISO文件 root密码破解 VMware新建虚拟机 硬件设置 设置虚拟网络 编辑>虚拟网络编辑器>VMnet8(NAT模式) 挂载ISO文件 加电>开启次虚拟机 第二项可以检查挂载上来的iso文件是否完整没有破坏 磁盘分区 选自定义分…

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

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

用excel计算一个矩阵的转置矩阵

假设我们的原矩阵是一个3*3的矩阵: 125346789 现在求它的转置矩阵: 鼠标点到一个空白的地方,用来存放结果: 插入-》函数: 选择TRANSPOSE,这个就是求转置矩阵的函数: 点击“继续”&#xff1a…

SparkSQL之Rule体系

在Unresolved LogicalPlan逻辑算子树的操作(如绑定、解析、优化等)中,主要方法都是基于规则(Rule)的,通过Scala语言模式匹配机制(Pattern-match)进行树结构的转换或节点改写。Rule是…

TCP协议(建议收藏)

1. TCP特点 有连接:需要双方建立连接才能通信,在socket编程中服务端new ServerSocket(port)需要绑定端口,在客服端new Socket(serverIp, serverPort)与服务端建立连接可靠传输:确认应答机制,超时重传机制面向字节流&a…

Python开源项目PGDiff——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

python ansconda 等的下载、安装等请参阅: Python开源项目CodeFormer——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134334021 友情提示: …

vue 使用js new Map()优化多个if else 执行方法

前言 在实际开发中根据业务需求我们经常要判断情况,一个if 我们科技直接使用ES6就可以解决 经常会出现根据不同的条件执行不同的方法,这是就会有多个if else 看起不太美观也费劲 js new map ()就可以解决这个问题,它…

建行广东省江门市分行走进农村地区开展反假货币宣传

人民对美好生活的向往,涉及方方面面,小至“钱袋子”安全。建行广东省江门市分行落实当地监管部门部署,积极扛起维护国家金融安全的重要政治责任,深入农村地区开展反假货币宣传工作,助力构建农村反假货币工作长效机制。…