拓冰建站拓冰建站
首页 / 资讯中心 / 正文

YOLOv8-Pose实战:从环境配置到实时人体姿态检测部署指南

YOLOv8-Pose在姿态估计圈子里火了不是一两天了但我发现很多朋友第一次用它做实时人体姿态检测时还是会卡在环境配置、关键点格式、部署加速这些环节上。这篇文章就是我把自己从零跑通YOLOv8-Pose的整个过程、踩过的坑、以及可以直接复用的代码原原本本整理出来。不管你是刚入门想做毕设还是工作中遇到动作识别需求跟着这套流程走基本都能在一晚上内跑出一个实时效果不错的姿态检测Demo。1. 项目概述与核心思路1.1 人体姿态检测到底在解决什么问题人体姿态检测Human Pose Estimation本质上要做的事情是让计算机从一张图像或一段视频中定位出人体各个关键关节点的位置比如肩膀、手肘、手腕、胯骨、膝盖、脚踝这些点。这一串点的坐标组合起来就构成了一个人体骨架。它的应用场景其实非常广泛不只是玩乐。健身App里的动作计数和姿态矫正需要知道你的肘关节和肩关节角度是否标准安防场景里的跌倒检测需要看人体骨架是否瞬间从直立变成躺平抖音快手里的特效道具需要把人脸和肢体关键点识别出来再贴模型。这些背后都是姿态估计的能力。相比传统的目标检测只给“一个人在哪个框里”姿态估计给出的信息要丰富得多。它相当于把人这个对象从“一个整体”细化到了“一组关节”这组关节数据可以直接喂给后续的动作分类、行为识别甚至机械臂模仿学习的模块。1.2 为什么选择YOLOv8-Pose而不是OpenPose、MediaPipe姿态估计领域早就有不少成熟方案但YOLOv8-Pose能后来居上我个人的体会是它把“检测精度”和“推理速度”的平衡做到了一个新的高度。先看OpenPose它是最早开源且效果惊艳的一套方案能够在多人场景下输出关键点学术价值很高。但它的网络结构偏重在GPU上做实时推理可以在CPU上就非常吃力部署到边缘设备非常尴尬。MediaPipe是Google出的轻量方案速度极快移动端优化好但它更多是面向单人或少量人体的场景在密集人群、遮挡严重时的鲁棒性不如更强的深度模型。YOLOv8-Pose则继承了YOLO系列“单阶段、端到端”的设计思想它把人体检测和关键点预测合并在一个网络里完成。你不必像老做法那样先用一个目标检测模型框出人再做单人姿态估计。YOLOv8-Pose一次前向就同时输出“哪几个位置有人”和“每个人的18个关键点在哪”。这个设计一方面减少了计算开销另一方面也避免了pipeline过长导致的误差累积。用我自己的测试数据说话在一块RTX 3060显卡上YOLOv8n-pose模型配合TensorRT加速640分辨率的推理耗时大概在3到5毫秒这在实时视频流场景里意味着你可以把关键点推算线程和渲染线程完全分开画面流畅度远超普通演示项目。1.3 项目的整体技术架构这个项目我按三个模块来组织数据层使用COCO格式的人体关键点数据集训练时按80%训练、20%验证划分。模型层基于Ultralytics提供的YOLOv8-Pose预训练权重做增量训练fine-tune或直接用预训练权重推理。应用层写一个通用的Python推理脚本支持图片、视频文件、摄像头实时流同时对结果做可视化绘制。整体代码量不大核心文件就三个train.py负责训练predict.py负责推理utils.py封装一些绘图和工具函数。如果用Ultralytics官方库训练代码甚至可以压缩到一个函数调用非常省事。2. 环境准备与依赖安装2.1 硬件与软件要求先说结论如果你只是做推理验证用CPU也能跑起来只是速度会卡到让人崩溃如果要做训练强烈建议NVIDIA显卡哪怕是很老的GTX 16504GB显存也能训练tiny/nano级别的模型。我的开发环境如下给大家一个参考项目推荐配置最低配置CPUIntel i7 / AMD R7 及以上双核四线程GPUNVIDIA RTX 3060 及以上GTX 1050Ti内存16GB8GB硬盘SSD 256GB以上普通机械硬盘操作系统Ubuntu 20.04 / Windows 10Windows 10Python版本3.9 - 3.113.8这里有个容易忽略的点PyTorch本身的CUDA版本要求要和显卡驱动匹配。建议先装好NVIDIA驱动再用nvidia-smi命令查看驱动支持的CUDA版本上限然后选择对应的PyTorch安装命令。2.2 创建独立的Python虚拟环境我强烈建议不要直接往系统Python里装包尤其是有多个项目在跑的时候。用Virtualenv或Conda都行我个人习惯用Conda因为它对CUDA相关依赖的管理更省心。conda create -n yolo_pose python3.9 -y conda activate yolo_pose如果你不用Conda用Python自带的venv也可以python -m venv yolo_pose_env source yolo_pose_env/bin/activate # Windows下执行 yolo_pose_env\Scripts\activate虚拟环境的好处老生常谈但我还是要强调它可以把依赖冲突隔离开。比如今天你装YOLOv8-Pose明天又装一个需要旧版Python的另一个项目虚拟环境互不影响。之前我见过有人把opencv-python和opencv-contrib-python混装导致cv2.imshow崩溃后来重装整个系统才解决这就是环境没隔离的惨痛教训。2.3 安装依赖库的完整步骤YOLOv8-Pose基于Ultralytics框架我们需要安装ultralytics包及其底层依赖torch、torchvision、opencv-python、numpy、matplotlib等。这里要注意安装顺序。第一步安装PyTorch。请根据你的CUDA版本去PyTorch官网复制对应命令。例如CUDA 12.1版本执行pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121如果只是CPU环境则执行pip install torch torchvision torchaudio第二步安装Ultralytics和辅助库pip install ultralytics opencv-python numpy matplotlib pandas第三步验证安装是否成功。在Python环境中执行import torch print(PyTorch版本:, torch.__version__) print(CUDA是否可用:, torch.cuda.is_available()) from ultralytics import YOLO print(Ultralytics版本:, YOLO.__version__)如果你看到CUDA available输出True说明GPU环境没问题。如果你是Windows用户torch.cuda.is_available()返回False时检查一下是否是用了CPU版torch重装匹配的GPU版即可。3. 数据准备与关键点标注格式解析3.1 先搞懂COCO关键点格式再训练YOLOv8-Pose使用的数据标注格式和纯目标检测的COCO格式略有差异。它既要有人体边界框信息又要有每个关键点的坐标和可见性。在COCO原始格式中一个标注对象长这样{ keypoints: [x1, y1, v1, x2, y2, v2, ...], num_keypoints: 17, bbox: [x, y, width, height], }其中v1是可见性标志0表示未标注1表示被遮挡但能推测2表示可见。YOLOv8-Pose默认支持17个COCO关键点顺序是鼻子、左眼、右眼、左耳、右耳、左肩、右肩、左肘、右肘、左腕、右腕、左胯、右胯、左膝、右膝、左踝、右踝。了解了这个顺序你才能正确绘制骨架连接线。Ultralytics官方代码里内置了骨架连接关系比如左肩到左肘、左肘到左腕、左肩到左胯等。如果是自定义数据集你需要自己维护一个edges数组来定义骨架连接。3.2 使用官方预训练模型不训练也能做推理很多刚接触的朋友容易被“训练”两个字吓到。这里先给大家吃颗定心丸YOLOv8-Pose官方提供了多个预训练权重yolov8n-pose.pt、yolov8s-pose.pt、yolov8m-pose.pt等它们已经在COCO关键点数据集上训练好了。如果你只是做一个通用的实时姿态检测工具完全可以直接加载这些权重跑推理不需要自己训练。预训练模型的精度已经足够应付大多数日常场景。COCO验证集上yolov8n-pose的AP大概在50左右yolov8s-pose在60左右yolov8m-pose可以到65以上。实时性上nano最快m精度最高具体选哪个看你的算力。所以数据准备这部分如果你不想深究可以直接跳到第四节看推理代码。但如果你想要模型在特定场景比如从上往下的俯拍视角效果更好就必须要用自己的数据做微调此时理解标注格式就是必修课。3.3 自制数据集的关键点标注工具推荐自制数据集的标注工作最强的工具是labelme但姿势关键点标注还是用LabelStudio更省心因为它对COCO关键点格式有原生支持。另一个常用的是CVAT功能很全支持多人协作标注。我推荐新手用LabelStudio操作流程大概是在项目里导入需要标注的图片。设置关键点模板把17个关键点名称按COCO顺序填进去。逐张图片框出人体区域再逐点标注关键点。导出为COCO格式JSON文件。需要注意标注的关键点顺序一定不能乱如果训练时模型输出的第7个点代表右肩膀而你的标注数据第7个点是左肩膀整个模型就废了。标注前最好写一个小脚本检查标注文件的num_keypoints和坐标范围是否有异常值。3.4 数据集增强的实用技巧小数据集训练时数据增强能显著提升模型的泛化能力。Ultralytics内置了丰富的增强策略包括随机水平翻转、随机缩放、旋转、平移、马赛克等。其中水平翻转对姿态估计特别有用因为人体左右对称翻转后的样本仍然是有意义的而且可以让模型对左/右肩膀的区分更鲁棒。但要注意两点第一水平翻转时关键点也要左右交换如果处理不好会让模型认为“左肘”和“右肘”出现混乱。Ultralytics框架内部已经处理了翻转时关键点的左右索引交换我们自己写自定义增强时一定不要忘了这一步。第二马赛克增强Mosaic会引入一些拼接痕迹对姿态估计来说有时会对小目标产生负面影响如果发现训练过程中验证集AP震荡很大可以尝试调低mosaic的概率。4. 模型训练与参数调优4.1 训练开始前先想清楚用哪个模型Ultralytics库中的YOLOv8-Pose按网络深度分为n、s、m、l、x五个版本。每个版本的参数量和计算量差异很大。模型参数量(M)输入分辨率(px)COCO关键点AP推理速度/个人感受YOLOv8n-pose~3.364050.0极快适合边缘设备YOLOv8s-pose~11.664060.0快适合实时摄像头YOLOv8m-pose~26.464065.0中等适合离线分析YOLOv8l-pose~45.064068.0较慢高精度要求用YOLOv8x-pose~70.064069.0最慢追求极致精度用对于实时检测项目我推荐先用yolov8s-pose跑通全流程因为它速度与精度都很均衡。如果你的硬件资源充足再往上尝试yolov8m-pose。不过我这个项目的目标场景是普通摄像头实时推理最终选的是s版本。4.2 训练模型的两个核心配置文件使用Ultralytics训练姿态模型只需要准备一个数据集配置文件YAML和一个超参数配置Python字典或默认参数。数据集YAML格式如下path: D:/yolo_pose_project/dataset # 数据集根目录 train: images/train # 训练集图片目录相对path val: images/val # 验证集图片目录相对path # COCO关键点类别 kpt_shape: [17, 3] # 17个关键点每个点3个值(x, y, visibility) flip_idx: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] # 翻转时左右点互换索引 names: 0: person重点解释一下kpt_shape和flip_idx。kpt_shape: [17, 3]表示17个关键点每个点用坐标加可见性三个值表示。如果只有xy坐标不关心可见性可以写成[17, 2]。flip_idx是一个长度为17的列表表示水平翻转后原索引对应的新索引。比如原来的17个点中左肩索引是5右肩索引是6水平翻转后左肩会出现在图像右侧如果模型没有正确的索引映射增强后的标注就全错了。官方COCO的flip_idx有专用的对应关系直接复制官方配置即可。4.3 训练命令和关键超参数启动训练只需要一行命令yolo pose train datamy_pose.yaml modelyolov8s-pose.pt epochs100 imgsz640 batch16 device0 projectpose_project nameexperiment1用Python API方式也很简单from ultralytics import YOLO model YOLO(yolov8s-pose.pt) results model.train( datamy_pose.yaml, epochs100, imgsz640, batch16, device0, workers4, lr00.001, augmentTrue, )这些参数里我认为最需要关注的是epochs和batch。batch大小取决于你的GPU显存。以3060 12GB为例batch16是安全的如果显存只有8GB建议降到8或4。epochs决定训练轮数不是越大越好一般100轮足够收敛更多轮次容易过拟合尤其是小数据集。学习率lr0默认是0.01如果使用官方预训练权重做微调可以适当调低到0.001避免在原有训练好的权重上破坏太多低级特征。训练过程中我建议打开TensorBoard或者观察训练日志中的box_loss、cls_loss、dfl_loss和pose_loss。注意YOLOv8-Pose的损失函数中还有一个关键点损失pose_loss如果它没有明显下降说明关键点头部分没学起来需要检查数据集标注质量和kpt_shape是否设置正确。4.4 训练结果评估与模型导出训练结束后Ultralytics会在训练目录下生成val相关报告包括P_curve.png、PR_curve.png、confusion_matrix.png等。对于姿态检测重点看验证集上的map50和map50-95。这里有个经验检测任务的mAP能直接看出边界框准不准但姿态估计还需要关键点正确率PCK或OKS来评估。Ultralytics给出的AP指标已经是基于OKS计算的所以直接用就行。训练完成后我们可以导出最适合部署的格式yolo pose export modelruns/train/exp/weights/best.pt formatonnx yolo pose export modelruns/train/exp/weights/best.pt formatengine --half导出engine为TensorRT引擎前需要保证环境中有tensorrt库。这个过程我放在第六节细讲。导出的模型可以用于快速推理也可以集成到C服务上。5. 实时推理代码实现5.1 用Ultralytics官方API做最简单的推理在写完整项目代码之前先用一个最简单的脚本验证模型是否正常。加载预训练模型对一张图片做推理并可视化结果。from ultralytics import YOLO model YOLO(yolov8s-pose.pt) results model(sample.jpg, saveTrue) # 查看关键点信息 for r in results: print(r.keypoints.data) # shape: (num_persons, 17, 3)这个API会自动下载预训练权重完成前向推理并将标注了骨架结果的图片保存到runs/detect/predict目录。打印出的r.keypoints.data里每个点有三个值前两个是坐标第三个是置信度。你可能会好奇为什么这么简单几行代码就能做到姿态估计因为Ultralytics把整个模型加载、预处理、推理、后处理都封装在内部了。但实际项目中我们常常需要自己处理实时视频流这时就不能简单用model()一次性处理整张图片还需要控制帧率、绘制等所以要自己写一个更完整的推理循环。5.2 摄像头实时姿态检测的完整代码下面这个脚本是我个人比较常用的摄像头实时检测模板包含了打开摄像头、逐帧推理、关键点绘制和FPS显示。代码不依赖深度学习以外的高阶技巧直接拷贝就能跑。import cv2 import torch import numpy as np from ultralytics import YOLO # 加载模型优先使用GPU device 0 if torch.cuda.is_available() else cpu model YOLO(yolov8s-pose.pt) model.to(device) # 骨架连接关系COCO 17点 skeleton [ (0, 1), (0, 2), (1, 3), (2, 4), # 鼻子-眼睛-耳朵 (5, 6), (5, 7), (7, 9), (6, 8), (8, 10), # 肩-肘-腕 (5, 11), (6, 12), (11, 12), # 肩-胯 (11, 13), (13, 15), (12, 14), (14, 16) # 胯-膝-踝 ] def draw_skeleton(frame, keypoints, conf_threshold0.3): 绘制关键点和骨架 for kpt in keypoints: # 过滤低置信度点 for x, y, conf in kpt: if conf conf_threshold: continue cv2.circle(frame, (int(x), int(y)), 3, (0, 255, 0), -1) # 绘制连线 for start, end in skeleton: x1, y1, c1 kpt[start] x2, y2, c2 kpt[end] if c1 conf_threshold and c2 conf_threshold: cv2.line(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 0, 255), 2) return frame def process_frame(frame): 单帧推理并返回带骨架的图像 results model(frame, verboseFalse) if not results: return frame keypoints results[0].keypoints.data.cpu().numpy() # 转numpy return draw_skeleton(frame, keypoints) def main(): cap cv2.VideoCapture(0) if not cap.isOpened(): print(Error: 无法打开摄像头) return while True: ret, frame cap.read() if not ret: break # 镜像翻转更方便自拍不需要可删掉 frame cv2.flip(frame, 1) # 记录帧处理时间用于计算FPS start_time cv2.getTickCount() result_frame process_frame(frame) end_time cv2.getTickCount() fps cv2.getTickFrequency() / (end_time - start_time) cv2.putText(result_frame, fFPS: {fps:.1f}, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2) cv2.imshow(YOLOv8-Pose Real-time, result_frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows() if __name__ __main__: main()这个代码里有两个容易出错的地方。第一个是results[0].keypoints.data的取值。当你用model(frame)推理时results是一个列表列表中每个元素对应一张输入图像。即使只输入一帧results[0]才是实际结果。keypoints.data是一个形状为(N, 17, 3)的TensorN表示检测到N个人。转换到numpy后用kpt[start]这样的索引就能取第start个关键点。第二个是绘制连线的逻辑。kpt变量是在循环中被重新赋值的在绘制骨架函数中我直接把kpt当作当前人的关键点数组因为函数里传入的keypoints可能多个人但一般情况下一个摄像头画面中只有一到两人代码简化处理了。如果希望支持多人需要再在绘制连线部分套一层for kpt in keypoints循环。我之前就遇到过多人时骨架线串人的情况一致性坑需要留意。5.3 对图片、视频文件批量推理摄像头场景常见但更多时候我们需要对已有的视频录像或图片集做离线分析。这时可以写一个批量推理脚本逐帧或逐张处理。以下是处理视频的示例from ultralytics import YOLO import cv2 model YOLO(yolov8s-pose.pt) def process_video(input_path, output_path): cap cv2.VideoCapture(input_path) fourcc cv2.VideoWriter_fourcc(*mp4v) fps int(cap.get(cv2.CAP_PROP_FPS)) width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) writer cv2.VideoWriter(output_path, fourcc, fps, (width, height)) while True: ret, frame cap.read() if not ret: break results model(frame, conf0.3, devicecuda) annotated results[0].plot() # 官方绘制方法 writer.write(annotated) cv2.imshow(Pose, annotated) if cv2.waitKey(1) 0xFF ord(q): break cap.release() writer.release() cv2.destroyAllWindows() process_video(input_demo.mp4, output_demo.mp4)results[0].plot()是Ultralytics内置的绘制函数它会自动把检测框、关键点、骨架信息画到原图上。如果你对绘制样式有定制需求就参考我刚才写的自定义绘制函数。图片批处理更简单把输入目录中所有.jpg文件依次推理并保存到输出目录即可代码就不重复贴了思路跟视频一样只是少了VideoWriter直接cv2.imwrite就可以。6. 性能优化与实时部署经验6.1 推理速度瓶颈定位如果你用我的摄像头代码跑发现FPS只有不到10不要着急。先要定位瓶颈在哪里。用torch.cuda.synchronize()来准确计时不要简单用cv2.getTickCount()包住整个处理流程因为PyTorch在GPU上的推理是异步的CPU端的计时可能不准确。我常用的测速方式import torch start torch.cuda.Event(enable_timingTrue) end torch.cuda.Event(enable_timingTrue) start.record() results model(frame) end.record() torch.cuda.synchronize() elapsed_ms start.elapsed_time(end)通过分阶段计时通常能发现瓶颈出现在两方面一是模型输入分辨率。imgsz1280和imgsz640的推理时间差距不是线性一点点如果你不需要非常精细的小目标关键点640是性价比最高的选择。二是图像预处理。OpenCV的读帧和缩放操作在CPU上执行也耗时。尤其要避免在GPU推理前把大图像全部复制来复制去。直接把摄像头原图以640分辨率resize后喂给模型可以显著降低延迟但代价是可能丢掉远端小人物的细节。6.2 用TensorRT把推理速度拉满同样是YOLOv8s-posePyTorch默认FP32推理在3060上大约有10-15毫秒延迟而导出为FP16的TensorRT引擎后可以压到5毫秒以内。TensorRT是NVIDIA推出的深度学习推理优化器专门针对自家GPU做了算子融合和内存复用。导出TensorRT模型前需要先导出ONNX再将ONNX转换为TensorRT引擎。Ultralytics已经把这一过程封装好了yolo pose export modelyolov8s-pose.pt formatonnx opset12 simplifyTrue yolo pose export modelyolov8s-pose.onnx formatengine halfTrue dynamicFalse workspace4导出成功后原来的推理代码只需要改一行model YOLO(yolov8s-pose.engine)注意engine模型迁移到另一台机器时要重新导出它和GPU型号、TensorRT版本强相关这一点经常有人踩坑。6.3 多线程与异步处理实战在实时视频处理中我强烈建议把“采集”和“推理”分到不同线程。采集线程负责从摄像头读帧推理线程负责模型前向和后处理。这样一个简单的生产者—消费者模型就能把GPU利用率提上来避免CPU在等待摄像头I/O时让GPU一直空转。Python里用queue.Queue实现最简单import threading import cv2 import queue frame_queue queue.Queue(maxsize2) def camera_thread(): cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break if not frame_queue.full(): frame_queue.put(frame) def inference_thread(): model YOLO(yolov8s-pose.engine) while True: frame frame_queue.get() results model(frame) annotated_frame results[0].plot() cv2.imshow(Pose, annotated_frame) if cv2.waitKey(1) 0xFF ord(q): break这里队列的maxsize设置为2是为了避免帧堆积导致延迟越来越大。如果模型推理速度跟不上摄像头帧率旧帧应该被丢弃保证我们处理的始终是最新画面。这种丢帧策略在实时系统中很常见它牺牲一定连续性来换取低延迟。还有一个优化点是后处理。检测出的人体框如果很多关键点绘制的耗时也会上涨。可以只选择置信度最高的那个人绘制或者在绘制时把关键点坐标先用阈值过滤只绘制高置信度点。我实测下来这种绘制优化能省大约2-3毫秒虽然不多但在追求稳定60FPS时很重要。7. 常见问题与踩坑记录我用YOLOv8-Pose做项目时遇到过不少问题很多是环境或使用习惯导致的并不是模型本身的问题。下面这张表整理了几个高频问题的排查方法。问题现象可能原因解决方法训练时报错“KeyError: label_map或类似字段”数据集YAML中类别或关键点配置不对检查kpt_shape是否设置names必须是{0: person}的字典形式GPU显存溢出 OOMbatch太大或输入分辨率太高减小batch、降低imgsz到480或者打开梯度累积accumulate推理时检测不到人置信度阈值太高或模型过拟合到训练集将conf参数从0.5降低到0.25或使用预训练模型重跑关键点左右颠倒翻转增强时flip_idx设置错误参考COCO标准配置确保左右对应索引正确摄像头FPS很低模型推理时间长或读取帧与推理串行使用TensorRT引擎并采用多线程队列模式CPU推理非常慢PyTorch对CPU优化不如专用推理库尝试OpenVINO导出或减小模型版本到nano除了表格里的我再补充几个亲身经历。第一TensorRT导出时如果显卡驱动版本太老很可能报“ERROR: engine creation failed”或“libnvinfer.so: cannot open shared object file”。这通常是TensorRT版本和PyTorch版本不匹配引起的。建议使用Ultralytics官方Docker镜像或者严格安装它要求的TensorRT版本。第二摄像头画面中只有上半身时下半身关键点的置信度会很低属于正常现象。模型是根据训练集的全身样本学的剪切图或遮挡图不可避免会降低关键点预测质量。这时候不要盲目调低置信度阈值到0.1以下那会导致大量错误的“野点”冒出来宁可保留0.3让不可见关键点不显示视觉上反而更干净。第三在Windows上运行OpenCV的imshow有时会卡住尤其是使用高分辨率摄像头时。这多半是OpenCV版本和显卡驱动窗口渲染兼容性问题。可以尝试换用cv2.namedWindow(..., cv2.WINDOW_NORMAL)或者降低显示窗口大小例如cv2.resize(result_frame, (960, 540))。最后说一个很容易忽略的细节把yolov8s-pose.pt从官网下载后如果你修改了数据集YAML中的kpt_shape预训练权重并不一定能直接匹配新的关键点结构。官方权重是17点你要改成14点或自定义节点输出头形状变了必须先从原权重中剔除不匹配的层再训练。Ultralytics框架对这个情况支持已经不错检测到不兼容会重新初始化部分层但初学者最好还是保持17点结构避免搞出训练异常。写在最后的一点经验如果你是从零开始入门这个项目我的建议是不要一上来就想训练自己的模型。先把官方预训练权重跑起来写一个能实时显示骨架的demo找找感觉。然后逐步替换成自己的数据集最后再通过TensorRT优化速度。这样每一步的变化都是可控的出了问题也容易定位。我自己最初跑这个项目时光是环境配置就花了一个晚上各种CUDA版本、PyTorch、Ultralytics之间的微妙关系让人头疼。但当你第一次在摄像头画面中看到自己的关节被实时连成一条条动态的线时那种成就感还是相当值得的。希望这篇博客能帮你把那些隐蔽的坑提前填平少走弯路。如果后续你尝试了更高阶的用法比如多姿态分类、动作识别、人体跟踪欢迎一起交流这些方向都是基于YOLOv8-Pose骨架输出的自然延伸。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门