基于Yolov8-pose训练自制手部姿态估计数据集并在PC端推理验证
首先先在本地安装跑Yolov8的环境,实测pytorch环境得2.0往上才能支持Yolov8的全部包。安装conda环境等过程细节本文不做介绍,网上很多。
在Github官网上下载Yolov8源码,推荐通过以下指令安装Yolov8环境。
# 从GitHub安装ultralytics包
pip install git+https://github.com/ultralytics/ultralytics.git@main
我从Yolov8官网上下载下来源码文件然后pip install ultralytics发现所安装的Yolov8的包里面task项目列表没有pose这个任务,所以用上面的代码安装ultralytics会好一些。
我自己的环境为Ultralytics YOLOv8.0.225 🚀 Python-3.8.0 torch-2.0.1+cu117 CPU (Intel Core™ i7-10700 2.90GHz)
环境全部安装完成后,我们可以通过以下指令测试yolov8-pose是否可以训练。没有数据集没关系,程序会自动下载数据集并开始训练,如果可以开始训练我们也可以ctrl+c终止操作,进行下一步内容。
yolo pose train
下面我们定制我们训练的yaml文件,跟coco8-pose.yaml的内容差不多,注意我们所用的kpt_shape只有x和y这两个维度,可见性visible在我们数据集中未标注。
# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics
# Example usage: yolo train data=coco8-pose.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-pose ← downloads here (1 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: /home/lx/model_deploy/hagrid-Hagrid_v1/dataset # dataset root dir 改成自己的
train: /home/lx/model_deploy/hagrid-Hagrid_v1/dataset/train # train images (relative to 'path') 改成自己的
val: /home/lx/model_deploy/hagrid-Hagrid_v1/dataset/val #改成自己的
# Keypoints
kpt_shape: [21, 2] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# Classes
names:
0: hand
关于flip_idx,表示手部关键点与数据位置的对应关系,数据集中没有标注具体的关系,这里我自己按照数据集的标注画了个图便于大家确认各关键点之间的关系。
然后我们就可以进行训练了,通过以下指令实现,因为要部署在边缘设备上,选择参数少速度快的模型,这里采用Yolov8n-pose模型进行训练,采用官方的yolov8n-pose.pt预训练模型作为先验知识。
yolo pose train data=pose.yaml model=yolov8n-pose.pt pretrained=yolov8n-pose.pt epochs=100 imgsz=640 single_cls=true
在训练时开始时会打印很多关于标签的warning,这是因为我们标签中的一些数据违规了,比如bounding box的取值大于1了,Yolov8会自动将这些违规数据清洗掉。
做完这些我们就可以在目录下的runs文件夹中看到我们的训练结果了
下面展示一下验证集的预测结果和实际标注结果的对比
可以看出我们的训练结果还不错。如果条件允许的话,可以用原始数据集中的所有图片和标注进行训练补充更多的数据,也可以自己手动调整yolov8-pose的网络结构进行优化,将会获得更好的性能。
至此,基于Yolov8-pose训练自制数据集流程结束^ _ ^