三、使用YOLOv8n训练识别面部表情

3.1 存放数据集

在项目的根目录下创建一个文件夹命名为datasets,用来存放我们的数据集

3.2 规范数据集的储存结构

3.2.1 coco128数据集

下载coco128文件

我们先来参考一下coco128数据集文件夹的结构组成

coco128
---images
---train2017(训练数据集图片)
---1.jpg
---2.jpg
...
---val(验证数据集图片)
---6.jpg
---7.jpg
...
---labels
---train2017(训练数据集标注信息)
---1.txt
---2.txt
...
---val(验证数据集标注信息)
---6.txt
---7.txt
...

需要注意的是,coco128数据集里本身没有自带验证数据集,所以这里val目录只是一个示例,实际上val目录下的验证数据集亦可以和训练数据集一样亦可以不一样

coco128放在datasets文件夹下是这样的

我们自己的数据集的命名和排列方式也要按这个格式来,尤其是images和labels这两名称最好不要变。

3.2.2 coco数据集的yaml文件

coco128数据集的yaml文件如下所示,coco128.yaml

可以看到给出了数据集的路径、训练集和验证集所在的位置,其中names里的内容是classes.txt里的内容,所以仿照该文件写一个我们自己的yaml文件,lrz.yaml

3.3 自建数据集

我们使用lrz好大儿的数据集(哈哈哈),一共有三个类[happy,puzzled,sad],使用labelimg标注了3张图片,然后存放在lrz文件夹下

新建lrz.yaml放在和images、labels这两文件夹的同级目录下

图像文件如下

标签文件如下

lrz.yaml文件内容如下,记得更改路径

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128 ← 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: G:\Github\ultralytics\datasets\lrz  # dataset root dir
train: images/train2024  # train images (relative to 'path') 128 images
val: images/train2024  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
names:
0: happy
1: puzzled
2: sad

3.4 训练自己的数据集

3.4.1 训练并验证

在项目的根目录下新建文件yolo_train.py,运行以下内容(示例用的是coco数据集,lrz好大儿的图片太少了训练出来没反应目前)

from ultralytics import YOLO
​
​
def main():
   # Load model
   model = YOLO("yolov8n.pt")
​
   # Train
   model.train(data="datasets\coco128\coco128.yaml", epochs=100)
​
   # Validate
   model.val()
​
​
if __name__ == "__main__":
   main()

训练结束后训练结果都保存在runs这个文件夹下,可以看到有所有的指标曲线的可视化;

还有模型训练出来的权重在runs\detect\train\weights下,best.pt为训练的最好的一组权重,后面可以使用。

3.4.2 预测

在项目的根目录下新建文件yolo_predict.py,运行以下内容

from ultralytics import YOLO


def main():
   model = YOLO("runs/detect/train/weights/best.pt")
   model.predict("cjq.jpg", save=True, imgsz=320, conf=0.5)


if __name__ == "__main__":
   main()

四、使用YOLOv8n-pose训练识别人体姿态

源码下载界面中的readme文件中往下翻,找到yolovn8-pose的预训练权重,点击下载,然后把下载好的文件放在项目代码的根目录下。

4.2 更换标注工具

由于识别人体姿态需要pose关键点检测,而labelimg中没有关键点标记功能,经过一系列探索最终决定更换标注工具,使用YOLO官方的标注工具——roboflow


参考文章

用YOLOv8推荐的Roboflow工具来训练自己的数据集

适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)