首先将COCO数据集转换为tfrecord格式,然后在对得到的tfrecord文档使用该文件得到没有bbox的图片。
1 COCO数据集转换为tfrecord格式:
参考model,代码链接为:得到Create_COCO_tfrecord.py
2.删选出不含bbox的图片
import os
import tensorflow as tf
file_list = tf.gfile.Glob(os.path.join('/DATA/coco/tfrecords', 'val-?????-of-?????'))
i = 0
count = 0
for file in file_list:
for string_record in tf.python_io.tf_record_iterator(file):
example = tf.train.Example()
example.ParseFromString(string_record)
i += 1
image_id = example.features.feature['image/image_id'].int64_list.value
xmax = example.features.feature['image/object/bbox/xmax'].float_list.value
# xmin = example.features.feature['image/object/bbox/xmin'].float_list.value
# ymax = example.features.feature['image/object/bbox/ymax'].float_list.value
# ymin = example.features.feature['image/object/bbox/ymin'].float_list.value
if xmax == []:
print(image_id)
count += 1
print(file, 'has been checked.')
print(i, 'images have been checked.')
print(count, 'annotations without bbox.')
3. 去掉没有bbox的文件重新转一次tfrecord格式
这里可以参考M2Det-tensorflow中的程序。
注意:在刚开始转换得到的tfrecord文件,然后开始训练会使得loss=NAN,该原因是数据处理不当,有的文件没有bbox的原因导致的。
除此之外,COCO的train和val的json文件中,有部分不包含annotation文件,这个也会导致在训练的过程中loss为NAN。
参考文献:
https://www.cnblogs.com/southtonorth/p/10485943.html