
164、YOLOv8改进实战:关键点检测头集成——人体姿态估计与目标检测联合训练一、从一次翻车现场说起去年做智慧工地项目,甲方要求同时检测安全帽佩戴和人员姿态——说白了就是既要框出人,又要知道胳膊腿摆在哪。我第一反应是搞两个模型串起来,YOLOv8做检测,再加个HRNet做姿态估计。结果部署到Jetson Orin上,推理延迟直接飙到80ms,甲方当场黑脸。后来我仔细看了YOLOv8的架构,发现它的检测头其实是个解耦头,分类和回归各走各的分支。那能不能在回归分支旁边再拉一条关键点回归分支?这样检测和姿态估计就共享backbone和neck,省掉一个模型的开销。说干就干,但踩的坑比想象中多——最典型的是关键点Loss和检测Loss互相打架,训练到一半mAP掉得亲妈都不认识。二、架构层面怎么改YOLOv8的检测头在ultralytics/nn/modules/head.py里,核心是Detect类。它的forward输出三个东西:分类logits、边界框回归、以及一个可选的额外输出。我们要做的就是在回归分支后面并联一个关键点头。具体改法是这样的:在Detect类的__init__里,除了self.cv2(回归卷积)和self.cv3(分类卷积),再加一个self.cv4。这个cv4的结构和cv2类似,但输出通道数要改成关键点数量乘以3——为什么是乘以3?因为每个关键点需要x、y坐标和可见性标志。注意这里别写成乘以2,我一开始就犯了这个错,关键点坐标回归死活不收敛。