文章目录
YOLOv8.2入门案例行人检测教程
实验目的
学会使用YOLOv8训练自己的数据集实现对视频人物检测
实验环境
python=3.8.19
Windows=11
pytorch=2.0.1+cu117
Yolov8=8.2
实验步骤
代码获取
官方代码地址(不推荐,更新后可能会有差异导致其它问题):https://github.com/ultralytics/ultralytics
本次演示代码地址(clone in 2024.4.22):https://pan.baidu.com/s/1dZ_XRhTGcT7Fg7g3xQ5gDA?pwd=vnuq
解压后打开终端进入到项目目录下
如下图
这是我的项目目录确保当前目录下是项目文件,否则后续命令无法正常运行
环境安装
电脑有GPU的用这个命令
conda create -n yolov8-seg python=3.8 -y
conda activate yolov8-seg
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
pip install ultralytics
仅有CPU的用这个命令
conda create -n yolov8-seg python=3.8 -y
conda activate yolov8-seg
pip install torch torchvision torchaudio
pip install ultralytics
上述步骤依次为
- 创建环境
- 进入环境
- 安装pytorch
- 安装项目环境
验证环境
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
出现Results saved to
即可,可以自行去路径下看看预测结果图像
结果图像
数据集准备
行人检测数据集下载链接:https://pan.baidu.com/s/1A4IFt-EluQ6BBhQ4r1tgWQ?pwd=okci
目录结构
├── CUHKSYSU
│ ├── data #原始数据集
│ │ ├── images
│ │ ├── labels
│ ├── train #划分后训练集
│ │ ├── images
│ │ ├── labels
│ ├── val #划分后测试集
│ │ ├── images
│ │ ├── labels
修改配置文件
数据集配置文件
ultralytics\cfg\datasets
目录下新建custom.yaml
文件,内容如下
将提供的数据集下载后,path
后的路径改为自己的
# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128-seg dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco128-seg ← downloads here (7 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:\Users\13055\Desktop\CUHKSYSU # dataset root dir
train: train/images # train images (relative to 'path') 128 images
val: val/images # val images (relative to 'path') 128 images
test: # test images (optional)
# Classes
names:
0: person
上述文件参数解释(注意yaml
文件语法格式,:
后面有空格)
参数名 | 解释 | 示例值 |
---|---|---|
path | 自己的数据集路径 | D:\Users\13055\Desktop\CUHKSYSU |
train | path 目录下训练集图像所在文件夹的相对路径 | train/images |
val | path 目录下验证集图像所在文件夹的相对路径 | val/images |
test | path 目录下测试集图像所在文件夹的相对路径 | test/images |
names | 数据集中类别数,格式为 索引值: 标签名 | 0: person |
模型配置文件
ultralytics\cfg\models
目录下新建yolov8n.yaml
文件,内容如下
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPs
s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPs
m: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPs
l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
# YOLOv8.0n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 3, C2f, [128, True]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 6, C2f, [256, True]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 6, C2f, [512, True]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 3, C2f, [1024, True]]
- [-1, 1, SPPF, [1024, 5]] # 9
# YOLOv8.0n head
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 3, C2f, [512]] # 12
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 3, C2f, [256]] # 15 (P3/8-small)
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 12], 1, Concat, [1]] # cat head P4
- [-1, 3, C2f, [512]] # 18 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 9], 1, Concat, [1]] # cat head P5
- [-1, 3, C2f, [1024]] # 21 (P5/32-large)
- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)
上述模型配置是yolov8
原型,后续自己修改模块(如C2f
换为C3
)也是在配置文件中修改,实现模型结构清晰且与具体代码分离
训练自己模型
参数解释
参数名 | 解释 | 示例值 | 默认值 |
---|---|---|---|
data | 数据集配置文件路径 | ultralytics\cfg\datasets\custom.yaml | - |
model | 模型配置文件路径 | ultralytics\cfg\models\yolov8n.yaml | - |
epochs | 模型训练迭代次数 | 100 | 100 |
imgsz | 输入模型的图像resize后大小 | 640 | 640 |
batch | 每次输入迭次批量大小(-1代表自动分配) | 16 | 16 |
训练命令
yolo train data=ultralytics\cfg\datasets\custom.yaml model=ultralytics\cfg\models\yolov8n.yaml epochs=20 imgsz=640 batch=-1
运行后
通常来说,上述标红处出现训练开始了,等待训练完成即可
实验结果
我这里用的GPU训练模型,受硬件条件以及模型超参数影响,结果会有区别
查看结果
标红处即为结果报保存的路径,通常在项目的runs
目录下
内容如下
模型预测
预测图片
yolo predict model="D:\projects\python\ultralytics\runs\detect\train\weights\best.pt" source=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Ffile.zouran.top%2Fmarkdown%2F%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%2F1713859187671.jpg&pos_id=img-cqSaHSmP-1713863351248)
参数解释
参数名 | 解释 | 示例 |
---|---|---|
model | 预测使用的模型路径 | D:\projects\python\ultralytics\runs\detect\train2\weights\best.pt |
source | 需要预测的图片(url或者本地目录) | https://ultralytics.com/images/bus.jpg 或者bus.jpg |
预测结果保存在标红处路径
查看结果
预测视频
yolo predict model="D:\projects\python\ultralytics\runs\detect\train\weights\best.pt" source=https://file.zouran.top/videos/person.mp4
原视频
person
下载链接:https://pan.baidu.com/s/1gbepMaggOkhbUWMIUKLuOg?pwd=c4ig
预测结果
常见问题
待补充
完整源代码
链接:https://pan.baidu.com/s/1YmxwiwxbggqGVCGy9cHkrQ?pwd=m36m