Значение API обнаружения объектов Tensorflow image_additional_channels

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

Например, в тензорном потоке моделей / исследований / обнаружения объектов /data_decoders/tf_example_decoder.py в дополнение к fields.InputDataFields.image теперь есть fields.InputDataFields.image_additional_channels. Можно ли использовать его для каких-либо дополнительных каналов, которые имеются во входном изображении, помимо стандартных трех каналов, вводимых в поля. 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 г.

0 ответов

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

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

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

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

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

Для создания 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

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

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

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

Другие вопросы по тегам