原文:Yolov8 姿态估计 - 知乎 (zhihu.com)

YOLOv8论文还没有,官方默默又加了新模型:姿态估计。

现在你可以用YOLOv8做目标检测、实例分割、图像分类、目标跟踪、姿态估计,未完待续。。。。。。

一、Yolov8姿态估计

Yolov8的姿态估计模型是在COCO数据集训练的,目前支持的是人体的检测和姿态估计。

测试一下:

yolo pose predict model=yolov8n-pose.pt source='bus.jpg' show=True save=True

其中pose指定任务类型,predict代表我们是要做推断,模型这里我选择的是最轻量级的YOLOv8n-pose,”show=True save=True“代表显示并保存。运行的话,程序会自动下载需要的模型。

如果要用YOLOv8调用摄像头的话,命令如下:

yolo pose predict model=yolov8n-pose.pt source=0 show=True save=True

视频的话同理,只需将source=0 改为视频的路径即可。下面看一下效果:

00:30

二、模型训练:

按照coco128-pose.yaml的"样例"组织好数据并修改coco128-pose.yaml后,你只需要一句命令即可开始训练:

yolo pose train data=coco128-pose.yaml model=yolov8n-pose.pt epochs=100 imgsz=640

查看下coco128-pose.yaml文件

COCO的annotation一共有17个关节点。

分别是:“nose”,“left_eye”, “right_eye”,“left_ear”, “right_ear”,“left_shoulder”, “right_shoulder”,“left_elbow”, “right_elbow”,“left_wrist”, “right_wrist”,“left_hip”, “right_hip”,“left_knee”, “right_knee”,“left_ankle”, “right_ankle”。示例图如下:

动图封面

查看yolo格式的数据

可以看到所有坐标数据都压缩了。
每组标签首位是0,代表人类类别,这里只有person一个类别。往后数4位是边界框坐标,再往后面的17*3位是关键点信息。每个关键点由x,y,v组成,v代表该点是否可见。
一组标注信息共(1+4+17*3)=56个数字。即每一行都有56个数字标注。

通过代码简单绘制一下标注信息:

import torch
from utilss.plots import colors, plot_one_box
import cv2
from utilss.general import xywh2xyxy

# 思路
# 将box框的xywh格式转化为xyxy格式并乘上相对应的宽高
# 将kpts姿态数据乘对应的宽高
# 姿态数据中,每3位有一个2,这个是官方coco annotator标注软件会自动插入的值,在yolopose算法detect检测中,该值被定义为每一个关键点的置信度conf
if __name__ == '__main__':
    # 将yolo格式的标注好的图片展示出来
    # im0 = cv2.imread("anno/000000000785.jpg")
    im0 = cv2.imread("anno/000000006954.jpg")
    # f = open("anno/000000000785.txt", "r")
    f = open("anno/000000006954.txt", "r")
    det_list = []
    for line in f.readlines():
        # line = line.strip('\n')  #去掉列表中每一个元素的换行符
        det_list = list(map(float, line.split(' ')))
        print(det_list)
        f.close()
        # 前5个参数为 0类型 xyxy
        xywh = det_list[1:5]
        # 转化为 xyxy格式
        gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]
        xyxy = (xywh2xyxy(torch.tensor(xywh).view(1, 4)) * gn).view(-1).tolist()
        print(xyxy)
        # 后51个参数为 姿态数据 官方的是百分比表示法,需要乘宽高
        kpts = det_list[5:]
        # 640
        weight = im0.shape[1]
        # 425
        height = im0.shape[0]

        for index, i in enumerate(kpts):
            if index % 3 == 0:
                kpts[index] = kpts[index] * weight
            if index % 3 == 1:
                kpts[index] = kpts[index] * height
            if index % 3 == 2:
                kpts[index] = 0.9

        # 画框打点
        plot_one_box(xyxy, im0, label="person", color=colors(0, True), line_thickness=3,
                     kpt_label=True, kpts=kpts, steps=3, orig_shape=im0.shape[:2])
    cv2.imshow("demo", im0)
    cv2.waitKey(0)  # 1 millisecond

三、训练自己的数据

数据准备,数据标注,参考如下文章:

Yolopose关键点检测:自己标注数据集,制作数据集(一)_yolo关键点检测_锅sir的博客-CSDN博客​blog.csdn.net/m0_57458432/article/details/128220346?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-128220346-blog-128222620.235%5Ev29%5Epc_relevant_default_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-128220346-blog-128222620.235%5Ev29%5Epc_relevant_default_base3&utm_relevant_index=5​编辑


最后将我们标注好coco格式的数据转为 yolo格式,参考如下

https://blog.csdn.net/m0_57458432/article/details/128222620​blog.csdn.net/m0_57458432/article/details/128222620

至此,我们的数据已经准备完成,开始训练

模型配置文件yolov8n-pose.yaml

数据配置文件coco8-pose.yaml, 参考上述。

四、总结

YOLOv8的功能越来越多,而且相比于其他开源库,对于工业界来说更友好,涵盖训练、评估、推断、部署全流程,是快速进行项目开发的首选。cv界的全家桶yolov8一直在完善。

下一个集成到yolov8的模型会是什么呢?

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐