#python #tensorflow #tfrecord
#python #tensorflow #tfrecord
Вопрос:
Для набора данных MS Coco 2014 каждое изображение имеет переменное количество ограничивающих рамок и соответствующие двоичные маски экземпляра, которые могут быть получены из полигона экземпляра, указанного в файле аннотаций. Я достигаю этого с помощью pycocotools (в частности, coco.py файл). Теперь я хочу сериализовать информацию об изображении, используя формат tfrecords от Tensorflow. После прочтения аннотаций к python dict, проиндексированных по каждому идентификатору изображения, я смог сериализовать переменные числа ограничивающих прямоугольников, например:
x_min_values = []
x_max_values = []
y_min_values = []
y_max_values = []
for bb in bounding_boxes:
x_min_values.append(int(bb[0]))
y_min_values.append(int(bb[1]))
x_max_values.append(int(bb[2]))
y_max_values.append(int(bb[3]))
А затем, чтобы использовать мой функциональный диктант tf.train.Example
, я преобразовал каждый список в список функций int64 следующим образом :
def _int64_feature_list(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=value))
Но теперь проблема в том, что, поскольку маски экземпляров являются 2-мерными, я не уверен, какую стратегию мне следует использовать для их сериализации. Если бы была только одна маска, как в маске сегментации, тогда я мог бы просто сгладить массив и написать 64-битный список объектов, а затем использовать высоту и ширину изображения для изменения формы массива при десериализации, но я не могу этого сделать для переменного количества масок. Любые идеи приветствуются.