本文共 3215 字,大约阅读时间需要 10 分钟。
注:之前说要将Crowd Human数据集标注转换成COCO数据集标注格式,现在先来看一下odgt文件里的数据是怎么样保存的。
在Crowd Human数据集目录下,还有一个demo文件夹。这个demo是干么的呢,博主查了一下说是提取odgt里面的数据的?所以就先看里面的代码和odgt文件
data下面有一个get_human.odgt,大小才66k,方便打开。(原标注文件的val23M,train80M,这么大的文件在电脑或服务器中打开,要卡好久…)。而demo.py文件涉及到线程等一大堆难懂的东西,博主直接放弃,直接看odgt文件了。先说一下坑吧,这个odgt里面的键值和原标注文件odgt里的键值不是对应的。最明显的区别:demo下的odgt有width、height这两个key,没有head_attr这个键值。但是,在原标注文件odgt里面没有这两个键值width、height,有head_attr。
所以博主根据demo里面的odgt写了crowdhuman转到coco标注格式的函数后,兴致勃勃的去跑原crowdhuman的标注文件,然后就直接出现了如下的error。一脸懵逼,这格式居然不是一致的。
打开了annotation_val.odgt文件,比对了一下,发现里面格式并不是一致的。不过,看完get_human.odgt这个文件,理解了大概是怎么放数据的,再去看annotation_val.odgt就能快速看懂数据的存放,只不过有些键值没有而已,不影响理解。
下面的代码是get_human.odgt文件中的一行数据
{ "fpath": "", #字典"gtboxes": [ #gtboxes里面是个列表 { "tag": "person", #标签 "extra": { #下面这几个数博主不清楚,有知道的大佬,还望告知一下。 "occ": 0, "vbox_id": 0, "box_id": 0}, "vbox": [[67, 60, 333, 740]], # 检测框可视框 "box": [67, 60, 333, 740], # 读取人头检测框? "fbox": [67, 60, 333, 810] #检测框全身框 }, { "tag": "person", "extra": { "occ": 0, "vbox_id": 0, "box_id": 1}, "vbox": [[438, 205, 175, 541]], "box": [438, 205, 175, 541], "fbox": [438, 205, 175, 541] }, { "tag": "person", "extra": { "occ": 1, "vbox_id": 0, "box_id": 2}, "vbox": [[576, 212, 185, 543]], "box": [576, 212, 185, 543], "fbox": [568, 208, 194, 550]}, { "tag": "person", "extra": { "occ": 1, "vbox_id": 0, "box_id": 3}, "vbox": [[670, 216, 108, 389]], "box": [670, 216, 108, 389], "fbox": [637, 215, 139, 393]}, { "tag": "mask", "extra": { "vbox_id": 0, "ignore": 1}, "vbox": [[776, 382, 25, 220]], "box": [776, 382, 25, 220], "fbox": [776, 382, 25, 220] } ], "width": 1200, #图片的宽"height": 800, #图片的高"nori_path": "", "ID": "273278,600e5000db6370fb", #图片ID,是str类型"nori_id": ","} # ID+'.jpg' = 图片的file_name
{ "ID": "273271,c9db000d5146c15", "gtboxes": [ { "fbox": [72, 202, 163, 503], "tag": "person", "hbox": [171, 208, 62, 83], "extra": { "box_id": 0, "occ": 0}, "vbox": [72, 202, 163, 398], "head_attr": { "ignore": 0, "occ": 0, "unsure": 0}}, { "fbox": [199, 180, 144, 499], "tag": "person", "hbox": [268, 183, 60, 83], "extra": { "box_id": 1, "occ": 0}, "vbox": [199, 180, 144, 420], "head_attr": { "ignore": 0, "occ": 0, "unsure": 0}}, { "fbox": [310, 200, 162, 497], "tag": "person", "hbox": [363, 219, 54, 71], "extra": { "box_id": 2, "occ": 0}, "vbox": [310, 200, 162, 400], "head_attr": { "ignore": 0, "occ": 0, "unsure": 0}}, { "fbox": [417, 182, 139, 518], "tag": "person", "hbox": [455, 190, 53, 78], "extra": { "box_id": 3, "occ": 0}, "vbox": [417, 182, 139, 418], "head_attr": { "ignore": 0, "occ": 0, "unsure": 0}}, ]}
需要注意的是,标注文件里的ignore字段,当tag是person时,ignore再head_attr字典里,当tag是mask时,ignore字段是在extra字典里的。(目前我观察的格式中,是这样的,当然写函数提取ignore的时候,不要去判断tag是啥,然后根据tag找字段,万一翻车了呢)
以上就是两个标注文件的格式,看网上对crowdhuman的解析资料基本没有,博主也刚接触几天,不能够更详细的解析具体字段的作用,什么时候对crowdhuman更了解了,再来修改完善。
转载地址:http://mjxen.baihongyu.com/