Значение API обнаружения объектов Tensorflow image_additional_channels - PullRequest
0 голосов
/ 20 ноября 2018

Я хотел бы использовать API обнаружения объектов Tensorflow для многоканальных изображений (например, 4-канальный RGB + инфракрасный).Существует учебник , как изменить API для добавления дополнительных каналов.Тем не менее, учебник был написан год назад, и API с тех пор развивался, и кажется, что API теперь может принимать многоканальные изображения.

Например, в тензорном потоке моделей / исследований / обнаружения объектов / data_decoders / tf_example_decoder.py в дополнение к fields.InputDataFields.image теперь есть fields.InputDataFields.image_additional_channels .Можно ли использовать его для каких-либо дополнительных каналов, которые есть во входном изображении, помимо стандартных 3-х каналов, вводимых в поля. InputDataFields.image?Я не могу понять цель этого image_additional_channels и как его использовать.

В более общем плане, мой вопрос заключается в том, как использовать API обнаружения объектов Tensorflow для многоканальных (> 3) изображений.Они приняты, то есть приняты во внимание, по умолчанию?Я могу кормить их, чтобы обучить модель, но для вывода в блокноте object_detection_tutorial она не может принять более 3 каналов, что заставляет меня задуматься, игнорирует ли она 4-ые каналы во время обучения.

Я использую Tensorflow 1.12.0, последний коммит (7a75bfc) API обнаружения объектов.image_additional_channels был добавлен в коммит 9fce9c6 6 июня 2018 года

Ответы [ 2 ]

0 голосов
/ 19 июля 2019

Для создания TFRecord вы должны отредактировать пример здесь:

def create_tf_example(group, path):
with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:
    encoded_jpg = fid.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = Image.open(encoded_jpg_io)
width, height = image.size

Эта часть кода загружается и открывает путь к файлу изображения;если у вас есть несколько изображений, вы должны загрузить их в разных переменных.Например, я использую что-то вроде этого:

with tf.gfile.GFile(dictionary[0], 'rb') as fid:
    encoded_jpg = fid.read()
if ndata > 1:
    with tf.gfile.GFile(dictionary[1], 'rb') as fid:
        encoded_depth = fid.read()
    encoded_inputs = encoded_depth

, где dictionary[0] содержит путь к изображению rgb, а dictionary[1] содержит путь к изображению глубины.

ЗатемTFRecord должен быть создан следующим образом:

tf_example = tf.train.Example(features=tf.train.Features(feature={
    'image/height': dataset_util.int64_feature(height),
    'image/width': dataset_util.int64_feature(width),
    'image/filename': dataset_util.bytes_feature(filename),
    'image/source_id': dataset_util.bytes_feature(filename),
    'image/encoded': dataset_util.bytes_feature(encoded_jpg),
    'image/additional_channels/encoded': dataset_util.bytes_feature(encoded_inputs),
    'image/format': dataset_util.bytes_feature(image_format),
    'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
    'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
    'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
    'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
    'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
    'image/object/class/label': dataset_util.int64_list_feature(classes),
}))

Однако скрипт для экспорта модели для вывода, похоже, не поддерживает экспорт модели таким образом, который позволяет ей принимать дополнительные каналы.

Как вы можете видеть здесь: https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L129

Входной тензор является только стандартным тензором изображения, а тензор_dict [fields.InputDataFields.image_additional_channels] не включен во входные данные.

Я собираюсь исправить это для своего проекта, поэтому я попытаюсь открыть запрос на получение и заставить их объединить его.

Я бы тоже хотел это знать!Мне удалось тренироваться без проблем, но я не могу использовать обученную модель, так как дополнительный канал не может быть загружен ... Вы исправили это?

0 голосов
/ 11 декабря 2018

Я пытаюсь сделать то же самое.Кажется, он принимает дополнительные каналы во время обучения (вам нужно добавить их во время создания ваших файлов TfExample).Вам также необходимо установить num_additional_channels в части train_input_reader файла конфигурации конвейера равным количеству добавленных вами каналов.

Однако скрипт для экспорта модели для вывода, похоже, неподдержка экспорта модели таким образом, чтобы она могла принимать дополнительные каналы.

Как вы можете видеть здесь: https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L129

Входной тензор является только стандартным тензором изображения, а tensor_dict[fields.InputDataFields.image_additional_channels]не включается во входные данные.

Я собираюсь исправить это для своего проекта, поэтому я попытаюсь открыть запрос на извлечение и заставить их объединить его.

...