1.在哪里利用了yolo来进行目标检测
2.对于骨架的估计是在整个图上进行处理还是在yolo检测出的检测框中进行(没有找到在检测框中操作的代码)
3.得出了多少个热图,形状是什么样的
4.在训练时怎么引入的数据集,怎么进行的数据预处理,怎么做到替换数据集
获取视频,将视频一帧一帧的分开。对每一帧的视频用目标检测检测出人体框,再通过特征处理得出人体关节点,取值最大的那个,将热图中的关键点映射回原视频中。
det_loader实例化DetectionLoader函数,该函数调用YOLO检测模型检测出人员目标,update里面调用的函数涉及了yolo,通过prediction和dets函数检测出目标框,在yolo中得到检测框后进行一系列的变换(没闹明白),最后将原图像,图像名,图像中的人员检测框,目标框的置信度,inps,pt1,pt2放入队列中。inps,pt1,pt2后续用来存放人员检测框的区域图像,检测框在原图像中的左上角坐标,在原图像中的右下角坐标。
video_demo.py中det_processor函数调用DetectionProcessor函数,该函数将检测框缩放在(320,256,3)大小的图像上。DetectionProcessor中调用crop_from_dets函数,crop_from_dets函数中获取每一个人体检测框的左上角坐标和右下角坐标,计算检测框的高和宽,调用CropBox()函数来将检测区域映射到小图像上。
在每一帧中writer调用getPrediction来进行位置映射,返回预测骨架点在热力图中的位置,在原图中的位置,每张热力图的最大值。
2D姿态检测:对输入的图像进行关节点的定义,用目标检测进行人员检测,将检测出的部分图像输入网络,进行卷积等操作(用loss进行限制来改变权重,使最后的值最高的地方落在关节点上),最终取置信度最高的点为关节点。
3D姿态检测:单目,双目。帧之间结合,体素划分。
单目帧之间揉和:将输入视频进行一帧一帧的目标检测和2D检测,得到每一帧的2D姿态,利用空洞卷积等对这个序列进行处理,直接输出3D关节点的位置。
双目。。双目将每一个视角的图像进行2D姿态估计得出关键点,再根据摄像机的参数将不同视角之间的关键点进行联立加方法得到3D的关键点。
目前的问题是只针对帧之间的方法预测出来的关键点代入人体模型中动作平滑,抖动小,但是每一帧的动作幅度保守,与原视频中的动作不像。只是在每一帧中利用图卷积的方法对每一帧的动作还原度高但是帧之间的抖动很厉害。
2D姿态估计
预处理:
1.输入数据的预处理,对训练数据集的预处理(图像归一化,图像剪裁?)
2.对识别骨架的序列进行定义
开始处理:
3.将输入数据传入yolo进行目标检测,输出检测框和检测框的坐标,置信度等
4.将检测框输入姿态估计网络进行处理,取值最高的为关键点
5.输出关键点的坐标和保存画出关键点的图像
如果是训练或者验证,需要使用训练集或者验证集。train.py中包含训练和验证,对于数据的处理直接调用数据处理脚本,设置布尔变量。训练后还需要使用loss函数来使下一个epoch表现更好。如果是直接对视频进行处理,只需要直接获取视频,对视频帧进行处理送入网络即可。
非极大值抑制。删除多余的检测框。检测出许多冗余的检测框,全部进行了姿态估计,出现了很多多余的骨骼点。输入检测框的位置(n,4),n为检测框的个数,检测框的置信度,姿态位置(n,17,2),关节点的置信度(n,17,1)。将置信度最高的作为参考,将其从检测列表中去除,检测其他框内关节点与它置信度相似的总数,总数大于多少的框被删除。