yolov9牛刀小试--持续更新

https://gitcode.youkuaiyun.com/65e7d6e11a836825ed78a096.html
安装CUDA, 解压缩包替换CUDA中的文件

进入下面目录,执行 bandwidthTest.exe    deviceQuery.exe  看安装成功没
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\demo_suite

1,创建库
conda create -n yolov9 python=3.10
conda info --envs
conda activate ylolv9

复制并安装依赖
git clone https://github.com/WongKinYiu/yolov9.git
cd yolov9 
pip install -r requirements.txt

3,加速
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --set show_channel_urls yes

4,下载
安装torch
下载11.8的torch
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia


# 显示当前虚拟环境的所有包环境
conda list     
#查看所有资源镜像
conda config --show channels

#删除资源镜像
conda config --remove channels <channel_name>

#添加资源镜像
conda config --add channels <channel_name>

#标签
1,打标签之前记得创建好训练集和验证集。    验证和训练的图片比例是 7:3  或者8:2     
训练模型的时候,首先根据train训练会生成很多模型,之后又以val训练数据来测试和校准,从多个模型中找到得分最高的那个模型作为我们选择的最佳模型。

   Dataset
     --images
        --train        训练图片   8(train图):2(val)放置
        --val           验证图片,验证你训练模型的图片 
    -- labels
      --train         train标签     训练标签也要打
      --val            val标签  验证标签要打
  
在python3.9环境打标签
  切换好环境直接运行 labelimg

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

labelimg

***打标签的资源直接用代码截屏,在截屏中标注即可,不需要自己截出来小图...


##如何训练  原文链接:https://blog.youkuaiyun.com/qq_46223426/article/details/131992684
找到train.py 找到这个方法 parse_opt
1,--weights 是网上下载对应的权重文件. 例如:D:\\swordTool\\yoloTool\\yoloPrj\\yolov9-main\\yolov9-c-converted.pt
作用:指定训练或测试时的初始模型权重路径。
修改:将默认值更改为您所需的初始模型权重路径。


2, --cfg 是  D:\\swordTool\\yoloTool\\yoloPrj\\yolov9-main\\models\\detect\\gelan-c.yaml
作用:指定模型配置文件(model.yaml)的路径,其中定义了YOLOv9模型的架构。
修改:如果您有自定义的模型配置文件,请将默认值更改为其路径。

3,--data 是自己的训练图片路径以及标签   train 和val 都是images中的绝对路径
作用:指定数据配置文件(data.yaml)的路径,其中包含关于数据集的信息,如类别数目、训练和测试图像目录等。
修改:如果您有自定义的数据配置文件,请将默认值更改为其路径。

4,--hyp 是D:\\swordTool\\yoloTool\\yoloPrj\\yolov9-main\\data\hyps\\hyp.scratch-high.yaml
作用:指定超参数配置文件(hyp.scratch.p5.yaml)的路径,其中包含了训练的各种超参数。
修改:如果您有自定义的超参数配置文件,请将默认值更改为其路径。

--epochs  训练轮数
作用:指定训练的总轮数(epochs)。
修改:将默认值更改为所需的训练轮数。

--batch-size    每批次的大小  内存爆了调小点
作用:指定每个GPU上的批次大小。
修改:根据可用的GPU内存,将默认值更改为所需的批次大小。

--img-size(nargs=‘+’, 类型:整数列表,默认值:[640, 640]) ******这个很重要,你训练和验证的图片像素都应该是 640*640的

作用:指定训练和测试时的图像大小。
修改:将默认值更改为两个整数的列表,表示所需的图像大小(宽度,高度)。
--rect(action=‘store_true’):

作用:如果提供该参数,则启用矩形训练。矩形训练不会将图像调整为正方形,而是保持原始的长宽比。
--resume(nargs=‘?’, const=True, 默认值:False):

作用:如果提供该参数,则允许从最近的检查点继续训练。
修改:要恢复训练,请将检查点文件的路径作为参数传递。例如:--resume checkpoints/last.pt。
--nosave(action=‘store_true’):

作用:如果提供该参数,则只保存最终的检查点,而不保存训练过程中的中间检查点。
--notest(action=‘store_true’):

作用:如果提供该参数,则只在训练结束后进行一次测试,而不会在每个训练轮次后进行测试。
--noautoanchor(action=‘store_true’):

作用:如果提供该参数,则禁用自动锚框检测,不会根据数据集自动调整锚框的尺寸。
--evolve(action=‘store_true’):

作用:如果提供该参数,则启用超参数进化,它会在训练过程中自动搜索更好的超参数。
--bucket(类型:字符串,默认值:‘’):

作用:如果使用Google Cloud Storage,指定用于存储日志和检查点的gsutil存储桶。
--cache-images(action=‘store_true’):

作用:如果提供该参数,则在内存中缓存图像以加快训练速度。
--image-weights(action=‘store_true’):

作用:如果提供该参数,则使用加权图像选择进行训练。
--device(默认值=‘0’):

作用:指定用于训练的CUDA设备(例如,'0’表示使用GPU 0,'0,1’表示使用多个GPU)。
修改:将默认值更改为所需的CUDA设备或如果要使用CPU进行训练,则设置为’cpu’。
--multi-scale(action=‘store_true’):

作用:如果提供该参数,则在训练过程中随机变化图像大小,范围为+/- 50%。
--single-cls(action=‘store_true’):

作用:如果提供该参数,则将多类数据视为单类数据进行训练。
修改:如果有多类数据集,请保留此参数或从代码中删除它。只有在将多类数据视为单类数据时使用此选项。
--adam(action=‘store_true’):

作用:如果提供该参数,则使用Adam优化器进行训练。
修改:如果想要使用其他优化器,请从代码中删除此参数,并根据需要设置优化器。
--sync-bn(action=‘store_true’):

作用:如果提供该参数,则使用SyncBatchNorm,这仅在DDP(Distributed Data Parallel)模式下可用。
--local_rank(类型:整数,默认值:-1):

作用:DDP参数,除非使用分布式数据并行训练,否则不要修改。
--workers(类型:整数,默认值:1):

作用:指定用于加载数据的最大数据加载器(dataloader)工作进程数。
--project(默认值=‘runs/train’):

作用:指定使用Weights & Biases(W&B)库保存训练日志和检查点的路径。
                        

##如何使用训练模型
1,执行train.py后会生成模型,找到模型复制到和train.py 同一层级
2,配置detect.py    D:\swordTool\yoloTool\yoloPrj\yolov9-main\detect.py

--data   自己的配置文件  D:\\swordTool\\yoloTool\\yoloPrj\\yolov9-main\\data\\kiki.yaml    之前训练的图片路径以及标签路径

--conf-thres  匹配的准确率

--weights:该参数用于指定模型权重(model.pt)文件的路径。可以接受多个路径,用于使用集成模型。修改成自己的模型路径。   用自己的模型

--source:该参数用于指定推理的输入数据来源。可以是文件/文件夹路径,也可以是0,表示使用摄像头作为输入源。    目标图片

--img-size:该参数设置推理时输入图像的尺寸,以像素为单位。默认值为640。

--conf-thres:该参数设置对象置信度阈值,低于该阈值的任何检测到的对象将被丢弃。默认值为0.25。

--iou-thres:该参数设置非最大抑制(NMS)的交并比(IOU)阈值。用于抑制重复的检测结果。默认值为0.45。

--device:该参数用于指定推理所使用的设备,可以选择’cuda’加上GPU设备编号(例如,‘0’或’0,1,2,3’)或’cpu’。

--view-img:这是一个标志参数。如果出现,则会显示推理结果,允许可视化检测到的对象,添加一个default=Ture/Faulse来指定这个参数是否生效。

--save-txt:这是一个标志参数。如果出现,则会将推理结果保存为.txt文件,添加一个default=Ture/Faulse来指定这个参数是否生效。

--save-conf:这是一个标志参数。如果出现,则会将检测到的对象的置信度与.txt结果一起保存,添加一个default=Ture/Faulse来指定这个参数是否生效。

--nosave:这是一个标志参数。如果出现,则会禁止保存带有绘制边界框的图像或视频,用于检测到的对象,添加一个default=Ture/Faulse来指定这个参数是否生效。

--classes:该参数允许您基于特定类别过滤检测到的对象。您可以指定类别ID,只在检测结果中包括这些类别。

--agnostic-nms:这是一个标志参数。如果出现,则会启用无类别非最大抑制,意味着在NMS过程中不考虑类别信息。

--augment:这是一个标志参数。如果出现,则会启用增强推理,即在推理过程中应用数据增强,以提高检测准确性。

--update:这是一个标志参数。如果出现,则会更新--weights参数指定的所有模型。

--project:该参数用于指定保存结果的项目目录。默认值为’runs/detect’。

--name:该参数用于指定实验的名称。默认值为’exp’。

--exist-ok:这是一个标志参数。如果出现,则允许在不递增的情况下使用具有相同名称的现有项目。

--no-trace:这是一个标志参数。如果出现,则会阻止在推理过程中对模型进行追踪。追踪是一种用于优化模型以实现更快推理的技术。

yolo参数介绍指南如下
https://zhuanlan.zhihu.com/p/669879605


****如何打印参数信息
https://blog.youkuaiyun.com/Zeng999212/article/details/130686328
首先在detect.py中的找到box_label函数,进入该函数

            # ---------------------------------------------------------------------------------------------------#
            # 在预测图中绘制一个中心坐标红点
            cv2.circle(self.im,((p1[0] + p2[0])//2, (p1[1] + p2[1])//2), self.lw,(0, 0, 255), self.lw)
            # 创建了个中心点坐标变量
            Center = ( ((p2[0] - p1[0]) / 2 +p1[0]) , ((p2[1] - p1[1]) / 2 + p1[1]) )
            cv2.putText(self.im, str(Center), ((p1[0] + p2[0])//2, (p1[1] + p2[1])//2), 0, self.lw / 3,txt_color,
                            thickness=4, lineType=cv2.LINE_AA)
            # 打印坐标信息
            print("左上点的坐标为:(" + str(p1[0]) + "," + str(p1[1]) + "),右上点的坐标为(" + str(p2[0]) + "," + str(
                p1[1]) + ")")
            print("左下点的坐标为:(" + str(p1[0]) + "," + str(p2[1]) + "),右下点的坐标为(" + str(p2[0]) + "," + str(
                p2[1]) + ")")
            print("中心点的坐标为:(" + str((p2[0] - p1[0]) / 2 +p1[0]) + "," + str((p2[1] - p1[1]) / 2 + p1[1]) + ")")
            # ---------------------------------------------------------------------------------------------------#


******打印标签以及参数,太牛了
https://blog.youkuaiyun.com/m0_74855292/article/details/131884406

***如何以管理员身份在conda运行python程序
1,项目层级不可太深,其次不要再util中方代码,把执行代码放到最外层。  项目放D盘即可。
以管理员身份打开conda的cmd窗口。之后运行下面代码
python D:\yolov9-main\getIndexAndLabeleByPic.py
python D:\yolov9-main\moveHero.py


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值