对于一个研究或者比赛,最费时间的部分往往是整个系统的搭建,而其中如何生成训练数据,又是最为重要的一环。
对于keypoints detection task, 现有的各种复现,对于训练数据的生成有以下三类,如有遗漏,欢迎补充。
根据可用关键点数,一张图生成多个样本
首先判断json文件中,总可用关键点数是否大于0,可以靠累加num_keypoints实现。经过测试:
coco train2014 before: 80K after: 39K
coco train2017 before: 110K after: 56K
之后对于每一张图,图中的每一个人进行几何变换,调整到图像中央,并生成对应的mask,产生一个样本。注意这里的每一个人一般要满足:
大小 > 32*32
中心点不与已经有的人离得太近
可用关键点labels >= 5
不是coco官方标记的“iscrowd”
最终,对于coco ,从可用图片中生成了120K左右的最终训练图片。
根据可用关键点数,一张图生成一个样本
首先判断json文件中,总可用关键点数是否大于0,可以靠累加num_keypoints实现。经过测试:
coco train2014 before: 80K after: 39K
coco train2017 before: 110K after: 56K
之后对于每一张图,将:
大小 < 32*32
中心点与已经有的人离得太近
可用关键点labels < 5
是coco官方标记的“iscrowd”
这些人mask掉,产生一张训练样本。最终对于 coco train2014, 生成39K左右训练图片。
根据是否属于person类,一张图生成一个样本
首先调用coco 官方api,筛选属于“person”类的图片。经过测试(直接官网查也可):
coco train2017 before: 110K after: 64K
之后对于每一张图,将:
大小 < 32*32
中心点与已经有的人离得太近
可用关键点labels < 5
是coco官方标记的“iscrowd”
这些图片去掉,产生一张训练样本。最终对于 coco val2017, 生成57K左右训练图片。
总结
- openpose 官方,和两种repo中mAP比较和原paper接近的复现,都是使用第一种数据生成方式。
- 只改变数据生成方式,其余部分不变会不会影响mAP, 正在测试。