本人是一名大一的计科学生,在自学深度学习yolo模型。将自己的收获和总结写出来,希望对大家有帮助。如果有错误或者疑问 可以提出来理性讨论。
环境配置(简略)
第一步下载Anaconda(网上有很多详细的步骤教程 由于本文主要是讲述yolo5v就不详细解释了) 第二步 在电脑下端的搜索栏中输入Anaconda 然后应该会显示出名为"Anaconda Prompt"的一个应用 直接点击 然后就会显示出一个类似终端的黑色界面
如果是类似 (base) C:\Users\EH> 那说明你下载成功了
但是呢你也可能会像我一样没有前缀(base) 那就说明失败了吗?使用conda init对conda进行初始化,然后重启终端就会自动激活base环境,当然你也可以输入conda activate base手动激活
- 创建虚拟环境
conda create -n pytorch(这一步只是创建了名为pytorch的空环境)
注意:这样会使用当前 Anaconda 的默认 Python 版本,而 PyTorch 和 YOLOv5 可能对 Python 版本有兼容性要求。建议在创建时指定一个稳定的版本conda create -n pytorch python=3.8
- 激活创建的虚拟环境
conda activate pytorch

-
打开pytorch的官网 选择自己电脑的配置之后 复制下方的命令行到Anaconda Prompt中安装 要注意的是 如果您没有NVIDIA显卡,PyTorch 官网生成的命令默认是CUDA,安装后会报错,您需要照着自己电脑的配置来进行修改。
-
检查安装包
pip list回车后会打印出来一个列表 这时我们需要的package都还没有安装 于是进入YOLOv5 项目目录执行:pip install -r requirements.txt
环境隔离
关于为什么要创建虚拟环境?
- 通过
environment.yml或requirements.txt文件,可以轻松记录环境的依赖 - 虚拟环境完全独立,所有操作都限定在环境内部,不会影响系统 Python
- 若不使用 全局安装的包会相互覆盖,导致某些项目无法运行
之后我们在GitHub上clone官方的项目github.com/ultralytics... 然后在vscode里选择虚拟环境
一、制作自己的数据集
1. 收集图片
- 目标类别:玫瑰花、向日葵。
- 图片要求:
- 格式不限(常用jpg、png),但建议统一格式。
- 图片数量越多越好,越多则检测效果越佳。
- 将收集到的图片放入新建的文件夹,例如 datasets/images/。
- 开源数据来源:可参考 Kaggle 等平台获取类似数据集。
2. 图片标注
YOLO训练需要标注好的数据,标注信息通常保存为txt文件
标注工具(LabelImg) • 操作步骤:
- 打开软件,选择图片文件夹(Open Dir)和标注文件保存文件夹(Change Save Dir)
- 在 View 菜单中开启 Auto Save Mode(自动保存模式),可避免手动保存。
- 按 W 键开始标注,框选目标后选择或输入标签名称(如 rose、sunflower)
- 标注快捷键:A / D 切换上一张/下一张图片。
- 切换为yolo模式 生成的才是.txt文件(其他的.json / .xml 文件都无法用于yolo)
- 注意事项:由于生成的标签文件是根据文件名来进行配对的 所以在完成标注之后 就不可以再修改图片的文件名了
3.数据集目录
bash
datasets/
├── images/ # 图片文件夹
│ ├── train/ # 训练集图片
│ └── val/ # 验证集图片
├── labels/ # 标注文件夹
│ ├── train/ # 训练集标注txt
│ └── val/ # 验证集标注txt
└── classes.txt # 类别文件(每行一个类别名,隔一行)
- 划分训练集和验证集:通常将80%图片放入train,20%放入val(可以自己手动创建文件夹后移动)
- 图片中无论是train还是val都需要对应的标签文件也需要按相同结构存放
二、训练模型(以YOLOv5为例)
YOLOv5训练需要三个配置文件:网络结构配置文件、数据集配置文件、超参数配置文件。 以下详细说明如何修改并运行训练。
- 准备配置文件
- 修改配置文件
1. 网络结构配置文件(model.yaml)
• YOLOv5提供了5种不同大小的网络模型:yolov5s.yaml、yolov5m.yaml、yolov5l.yaml、yolov5x.yaml (一般来说 越大的精度就会越高 但是速度也会越慢)
• 从YOLOv5源码的 models/ 目录下复制一个配置文件(如 yolov5s.yaml)到你的数据集文件夹(或项目目录)
• 修改内容:将文件中的 nc(number of classes)修改为你数据集的类别数其他参数一般无需改动
2. 数据集配置文件(my_dataset.yaml)
• 从YOLOv5的 data/ 目录下复制 coco128.yaml 作为模板,重命名为 my_dataset.yaml。
• 修改内容:
path: 数据集的根目录路径 eg.path: /home/user/project/datasets # 数据集根目录
train: 训练集图片路径,相对于 path。例如 images/train(和path是以拼接的形式)
val: 验证集图片路径,相对于 path。例如 images/val(和path是以拼接的形式)
nc: 类别数,与网络配置文件一致。
names: 类别名称列表,与 classes.txt 顺序一致
可选:删除或注释掉文件末尾的下载链接等无关内容
3. 预训练模型
我们这里选用的是官方的模型 我们访问YOLOv5官方Releases页面 打开链接:github.com/ultralytics... 然后在Assets中找到 对应的.pt文件 根据你选的模型配置文件(如 yolov5s.yaml)下载对应的 .pt 文件(如 yolov5s.pt),保持大小版本一致 (你大概率不会直接看到 要点击"Show all assets"展开往下翻才会看到所有文件)
4.打开train.py
parser.add_argument("--cfg", type=str, default="", help="model.yaml path")关于网络的配置 对应的是cfg 复制yolov5s的相对路径到default中(datasets/yolov5s.yaml)
parser.add_argument("--weights", type=str, default=ROOT / "yolov5s.pt", help="initial weights path")加载预训练模型的(注意路径 默认是yolo5s.pt)
parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path")配置数据集的文件 我们就修改 default 改成我们自己使用的数据集配置文件
5. 其他
- 超参数配置文件(hyp.yaml)使用YOLOv5默认的超参数文件即可,位于 data/hyps/hyp.scratch-low.yaml(也可根据需要复制修改)
- 第5行
parser.add_argument("--epochs", type=int, default=100, help="total training epochs")这里的100 对应的是 训练的轮次 - batch-size 批处理的大小(单独一次加载多少张图片进行处理) 可以改成32,也可以是1
parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)")一般情况下8普通电脑是跑不了的 改为2(最大加载数 属于多线程的操作)
三.验证模型和推理
打开detect.py
这是yolov5自带的一个官方检测代码(第368行)
parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "yolov5s.pt", help="model path or triton URL")
parser.add_argument("--source", type=str, default=ROOT / "data/images", help="file/dir/URL/glob/screen/0(webcam)")
- 只用修改前两行
- 第一行 填的是我们要加载的那个检测模型的路径 在终端输出的是 路径"yolov5s.pt"修改为自己训练好的 也就是best.pt
- 第二行 修改为你要识别的视频/图片文件 也可以实现读取摄像头检测
default = camera index
四.注意事项
- 点击运行就可以跑了 然后 这时候终端可能就会提醒你 有很多的package还没有安装 除了一个个安装 还可以直接 在终端中输入
pip install -r requirements.txt(但是这要在(pytorch) PS D:\yolov5>项目根目录 中进行) - 还有就是关于标签的第一个索引是0 您还需要确保 classes.txt 末尾没有多余的空行,或者检查读取后的列表,过滤掉空字符串(因为一个单行的空格也是算作一个标签 没有注意就可能导致顺序错乱)