COCO数据集转换为tfrecord(目标检测)

首先将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

你可能感兴趣的:(程序)