在COCO-pose数据集上,更完整的yolov8-pose结果,用于后续实验对比。
1.电脑配置
GPU:RTX3060,算力FP32约12TFlops、FP16约24TFlops。
CPU:i5-12400
2.官方yolov8-pose结果
3.自测结果
3.1 数据集
val: Scanning ./COCO2017/pose_ren/labels/val2017.cache... 2346 images, 0 backgrounds, 0 corrupt: 100%|██████████| 2346/2346 [00:00<?, ?it/s]
3.2 总体比较结果
输入的imgsz=640:
Class Images Instances Box(P R mAP50 mAP50-95) Pose(P R mAP50 mAP50-95): 100%|██████████| 147/147 [00:12<00:00, 11.42it/s]
yolov8n-pose.pt all 2346 6352 0.867 0.825 0.912 0.700 0.838 0.746 0.798 0.511
yolov8s-pose.pt all 2346 6352 0.867 0.865 0.930 0.742 0.854 0.803 0.857 0.606
yolov8m-pose.pt all 2346 6352 0.868 0.883 0.941 0.771 0.847 0.842 0.883 0.657
yolov8l-pose.pt all 2346 6352 0.881 0.880 0.947 0.783 0.880 0.835 0.896 0.688
yolov8x-pose.pt all 2346 6352 0.887 0.876 0.946 0.784 0.866 0.852 0.901 0.703
yolov8x-pose-p6.pt all 2346 6352 0.896 0.891 0.95 0.802 0.881 0.871 0.915 0.736
m号模型修改输入图片尺寸:
Images Instances Box(P R mAP50 mAP50-95) Pose(P R mAP50 mAP50-95)
yolov8m-pose.pt-640 2346 6352 0.867 0.884 0.941 0.771 0.847 0.842 0.883 0.657
yolov8m-pose.pt-480 2346 6352 0.887 0.87 0.94 0.763 0.866 0.825 0.871 0.624
yolov8m-pose.pt-320 2346 6352 0.886 0.837 0.924 0.723 0.851 0.763 0.818 0.545
yolov8m-pose.pt-224 2346 6352 0.872 0.759 0.865 0.646 0.845 0.652 0.716 0.443
3.3 人体检测框比较结果
输入的imgsz=640:
box metric: mAP50 mAP75 mAP50-95
yolov8n-pose.pt 0.9118 0.7848 0.6998
yolov8s-pose.pt 0.9300 0.8277 0.7423
*yolov8m-pose.pt 0.9411 0.8490 0.7709
yolov8l-pose.pt 0.9467 0.8602 0.7830
yolov8x-pose.pt 0.9456 0.8651 0.7840
yolov8x-pose-p6.pt 0.9500 0.8792 0.8021
m号模型修改输入图片尺寸:
box metric: mAP50 mAP75 mAP50-95
yolov8m-pose.pt-640 0.9411 0.849 0.7708
yolov8m-pose.pt-480 0.9402 0.8416 0.7626
yolov8m-pose.pt-320 0.9236 0.7994 0.7233
yolov8m-pose.pt-224 0.865 0.7106 0.6457
3.4 关键点预测比较结果
输入的imgsz=640:
pose metric: mAP50 mAP75 mAP50-95
yolov8n-pose.pt 0.7980 0.5410 0.5107
yolov8s-pose.pt 0.8567 0.6658 0.6059
*yolov8m-pose.pt 0.8828 0.7286 0.6574
yolov8l-pose.pt 0.8956 0.7612 0.6876
yolov8x-pose.pt 0.9010 0.7770 0.7027
yolov8x-pose-p6.pt 0.9150 0.8136 0.7361
m号模型修改输入图片尺寸:
pose metric: mAP50 mAP75 mAP50-95
yolov8m-pose.pt-640 0.8828 0.7286 0.6574
yolov8m-pose.pt-480 0.8713 0.6842 0.6237
yolov8m-pose.pt-320 0.818 0.582 0.5448
yolov8m-pose.pt-224 0.716 0.4577 0.4428
3.5 参数量比较
yolov8n-pose.pt: YOLOv8n-pose summary (fused): 187 layers, 3289964 parameters, 0 gradients, 9.2 GFLOPs
yolov8s-pose.pt: YOLOv8s-pose summary (fused): 187 layers, 11615724 parameters, 0 gradients, 30.2 GFLOPs
yolov8m-pose.pt: YOLOv8m-pose summary (fused): 237 layers, 26447596 parameters, 0 gradients, 81.0 GFLOPs
yolov8l-pose.pt: YOLOv8l-pose summary (fused): 287 layers, 44465580 parameters, 0 gradients, 168.6 GFLOPs
yolov8x-pose.pt: YOLOv8x-pose summary (fused): 287 layers, 69462204 parameters, 0 gradients, 263.2 GFLOPs
yolov8x-pose-p6.pt: YOLOv8x-pose-p6 summary (fused): 375 layers, 99141280 parameters, 0 gradients, 266.6 GFLOPs
3.6 推理速度比较
输入的imgsz=640:
yolov8n-pose.pt: Speed: 0.2ms preprocess, 2.8ms inference, 0.0ms loss, 0.4ms postprocess per image
yolov8s-pose.pt: Speed: 0.2ms preprocess, 5.1ms inference, 0.0ms loss, 0.5ms postprocess per image
yolov8m-pose.pt: Speed: 0.1ms preprocess, 10.5ms inference, 0.0ms loss, 0.5ms postprocess per image
yolov8l-pose.pt: Speed: 0.2ms preprocess, 17.6ms inference, 0.0ms loss, 0.5ms postprocess per image
yolov8x-pose.pt: Speed: 0.2ms preprocess, 31.3ms inference, 0.0ms loss, 0.6ms postprocess per image
yolov8x-pose-p6.pt: Speed: 2.7ms preprocess, 119.8ms inference, 0.0ms loss, 0.8ms postprocess per image
m号模型修改输入图片尺寸:
yolov8m-pose.pt-640: Speed: 0.1ms preprocess, 10.7ms inference, 0.0ms loss, 0.5ms postprocess per image
yolov8m-pose.pt-480: Speed: 0.1ms preprocess, 6.5ms inference, 0.0ms loss, 0.4ms postprocess per image
yolov8m-pose.pt-320: Speed: 0.1ms preprocess, 3.4ms inference, 0.0ms loss, 0.4ms postprocess per image
yolov8m-pose.pt-224: Speed: 0.0ms preprocess, 2.0ms inference, 0.0ms loss, 0.4ms postprocess per image
3.7 GFLOPS比较
# ###################### 关键点检测 ######################
yolov8m-pose.pt-640: 82 GFLOPs Params: 26464462
yolov8m-pose.pt-480: 46 GFLOPs
yolov8m-pose.pt-320: 21 GFLOPs
yolov8m-pose.pt-224: 10 GFLOPs
# ###################### 目标检测 ########################
yolov8m.pt-640: 80 GFLOPs Params: 25,902,640
yolov8m.pt-480: 45 GFLOPs
yolov8m.pt-320: 20 GFLOPs
yolov8m.pt-224: 10 GFLOPs
yolov8s.pt-640: 29 GFLOPs Params: 11,166,560
yolov8s.pt-480: 17 GFLOPs
yolov8s.pt-320: 8 GFLOPs
yolov8s.pt-224: 4 GFLOPs
yolov8x.pt-640: 166 GFLOPs Params: 43,691,520
yolov8x.pt-480: 94 GFLOPs
yolov8x.pt-320: 42 GFLOPs
yolov8x.pt-224: 21 GFLOPs
4. 自测代码
需要修改:模型路径,coco-pose.yaml路径,以及coco-pose.yaml中的数据集路径。
from ultralytics import YOLO
model_path = "../weights/yolov8x-pose-p6.pt"
data_path = "../trains_pose/body_07_08_m/coco-pose.yaml"
fs = 20
model = YOLO(model_path) # load an official model
metrics = model.val(data=data_path, save=False) # no arguments needed, dataset and settings remembered
box_map50 = round(float(metrics.box.map50), 4) # map50
box_map75 = round(float(metrics.box.map75), 4) # map75
box_map50_95 = round(float(metrics.box.map), 4) # map50-95
print("box metric:".rjust(fs), "mAP50".rjust(fs), "mAP75".rjust(fs), "mAP50-95".rjust(fs))
print(model_path.rpartition('/')[-1].rjust(fs),
str(box_map50).rjust(fs), str(box_map75).rjust(fs), str(box_map50_95).rjust(fs))
pose_map50 = round(float(metrics.pose.map50), 4) # map50
pose_map75 = round(float(metrics.pose.map75), 4) # map75
pose_map50_95 = round(float(metrics.pose.map), 4) # map50-95
print("pose metric:".rjust(fs), "mAP50".rjust(fs), "mAP75".rjust(fs), "mAP50-95".rjust(fs))
print(model_path.rpartition('/')[-1].rjust(fs),
str(pose_map50).rjust(fs), str(pose_map75).rjust(fs), str(pose_map50_95).rjust(fs))
# 计算FLops和参数量
from ultralytics import YOLO
from ultralytics.utils.torch_utils import get_flops, get_num_params
# Load the model
model = YOLO('../weights/yolov8m-pose.pt')
# Get the GFLOPs value
for sz in [640, 480, 320, 224]:
flops = get_flops(model.model, imgsz=sz)
parms = get_num_params(model.model)
print(f"GFLOPs: {flops:.2f}")
print(f"Params: {parms}")