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