OpenPose C++实现多人姿态估计
posePairs与mapIdx对应关系中同样的keypoint为什么是不同的值?
flyfish
//COCO的模型
const int kPoints = 18;
//为每个关键点命名,一共18个,不包含背景
//鼻子-0, 脖子-1,右肩-2,右肘-3,右手腕-4,左肩-5,左肘-6,左手腕-7,右臀-8,右膝盖-9,
//右脚踝-10,左臀-11,左膝盖-12,左脚踝-13,右眼-14,左眼-15,有耳朵-16,左耳朵-17
const std::string keypointsMapping[] = {
"Nose", "Neck",
"R-Sho", "R-Elb", "R-Wr",
"L-Sho", "L-Elb", "L-Wr",
"R-Hip", "R-Knee", "R-Ank",
"L-Hip", "L-Knee", "L-Ank",
"R-Eye", "L-Eye", "R-Ear", "L-Ear"
};
//posePairs看下一个结构,posePairs的输出索引 例如1,2 对应,31,32;1,5对应39,40
//一共19对
const std::vector<std::pair<int,int>> mapIdx = {
{31,32}, {39,40}, {33,34}, {35,36}, {41,42}, {43,44},
{19,20}, {21,22}, {23,24}, {25,26}, {27,28}, {29,30},
{47,48}, {49,50}, {53,54}, {51,52}, {55,56}, {37,38},
{45,46}
};
//0分别与1,14,15,16连接
//Nose分别与Neck,LAnkle,Right Eye,Left Eye连接
//一共19对
//多了耳朵和肩膀的pair,因为当人体是背对相机的,眼睛这个关键点是不可见的,为了更好的预测耳朵,引入这两个虚拟的pair
const std::vector<std::pair<int,int>> posePairs = {
{1,2}, {1,5}, {2,3}, {3,4}, {5,6}, {6,7},
{1,8}, {8,9}, {9,10}, {1,11}, {11,12}, {12,13},
{1,0}, {0,14}, {14,16}, {0,15}, {15,17}, {2,17},
{5,16}
};
看posePairs与mapIdx对应关系
1,2 对应31,32;
1,5对应 39,40
同样的1 ,为什么一个是31而另一个是39?
答:mapIdx一共是19个值,从19开始,0到17已经被posePairs占了,18背景,所以从19开始
19到56,相邻的数是一对,不重复。
关键点15可以连接到17,2也可以连接到17,但在PAF这样定义是不行的
PAFs里的连接只指向一个关键点到另一个关键点的连接,而且不能重复,所以同样的关键点1,在mapIdx是不同的值