Да, создать ИИ сложно! На каждом этапе от аннотации данных, обучения и развертывания есть свой набор проблем. В этом сообщении в блоге мы попытаемся разобраться с первыми двумя из них:

  • Аннотация данных
  • Обучение

В течение последних нескольких лет в Нейрале мы разрабатывали высокоэффективные системы искусственного интеллекта, которые на сегодняшний день развернуты в миллионах потребительских устройств! И в этом процессе мы разработали множество инструментов, чтобы упростить наш рабочий процесс. Мы наконец решили восполнить пробел в навыках искусственного интеллекта, сделав некоторые из наших инструментов общедоступными. Один из инструментов, Brain Builder, решает первую из вышеупомянутых проблем: аннотацию данных.

Brain Builder - это инструмент для создания аннотаций с искусственным интеллектом, который легко вписывается в часто используемые фреймворки, такие как TensorFlow и Caffe. В этом посте вы узнаете, как включить Brain Builder в рабочий процесс ИИ. Мы построим сеть семантической сегментации, используя данные, помеченные Brain Builder, и модель, написанную с использованием TensorFlow и Keras.

Семантическая сегментация - одно из часто встречающихся приложений компьютерного зрения. Это задача пометить каждый пиксель изображения классом. Он широко используется для анализа изображений и позволяет использовать такие приложения, как портретный режим на смартфонах. В следующем руководстве будет описано, как создать модель семантической сегментации, чтобы сегментировать людей с использованием ваших собственных данных и обучать ее на нескольких графических процессорах с помощью Brain Builder и TensorFlow.

Аннотации данных с помощью Brain Builder

Аннотации данных - самый важный шаг в построении системы искусственного интеллекта, поскольку именно на этом учится ваша модель. А модель глубокого обучения хороша ровно настолько, насколько хороши данные, которые в нее поступают! Brain Builder поможет вам создать качественный набор данных и имеет инструменты с искусственным интеллектом для ускорения этапа курирования данных.

Одна из наиболее важных функций Brain Builder - автоматическая пометка видео. Добавление тегов к видео с помощью ИИ позволяет собирать большой объем данных за небольшой промежуток времени путем извлечения и маркировки кадров из видео, записанных с очень высокой частотой кадров.

В следующем видео показан процесс добавления тегов к людям в видео с помощью Brain Builder:

Как видите, просто пометив первый кадр в видео, вы накопили около 500 кадров с тегами людей всего за несколько минут! После того, как вы закончите разметку и экспорт данных, вы получите заархивированный файл из Brain Builder, который имеет следующую структуру папок:

Папка содержит все, что вам нужно, чтобы TensorFlow мог читать и обрабатывать ваш набор данных. Все исходные изображения - это png-файлы с меткой индекса, где каждый пиксель изображения соответствует индексу класса. Файлы class_dictionary.csv, classes.txt и palette.txt предоставляют подробные сведения о сопоставлении индекса класса с их последующими значениями R, G, B, которые вы можете позже использовать для визуализации результатов.

Теперь мы напишем популярную архитектуру семантической сегментации под названием UNet с использованием TensorFlow и Keras. Используя оценщики и TensorFlow Dataset API, мы включили обучение на нескольких графических процессорах, чтобы значительно сократить время обучения!

(Обратите внимание, что мы немного изменили UNet в нашей реализации, чтобы сделать этот эксперимент более быстрым!)

Обучение работе с несколькими GPU с использованием оценщиков TensorFlow и Dataset API

Сквозная интеграция Keras с TensorFlow упростила возможность обучения моделей Keras с использованием нескольких графических процессоров с помощью оценщиков TensorFlow и Dataset API.

Оценщики TensorFlow

Класс Оценщик представляет модель, а также то, как эту модель следует обучать и оценивать. Некоторые из ключевых преимуществ использования оценщиков:

  • Модели на основе оценщика можно запускать на нескольких графических процессорах без изменения кода модели;
  • Оценщики упрощают совместное использование реализации моделей между разработчиками;
  • Оценщики строят график за вас и избавляют от необходимости явного (и довольно болезненного) сеанса.

Следующий фрагмент кода создает модель Keras, компилирует ее и преобразует в оценщик TensorFlow:

dataset = TFDatasetLoader(data_dirpath, input_size, n_classes, batch_size, num_epochs)
model = UNet(input_size, n_classes)
model.compile(optimizer=tf.train.AdamOptimizer(learning_rate=0.01), loss='binary_crossentropy', metrics=['accuracy'])
strategy = tf.contrib.distribute.MirroredStrategy(num_gpus=num_gpus)
config = tf.estimator.RunConfig(train_distribute=strategy)
estimator = tf.keras.estimator.model_to_estimator(model, config=config)

Если вы знакомы с Keras, единственное, что вы заметите, - это последние три строки кода. Стратегия, которую мы используем для обучения с использованием нескольких GPU, называется MirroredStrategy. В этой стратегии каждый графический процессор имеет копию графа и получает подмножество данных, на которых он вычисляет локальные градиенты. После вычисления локальных градиентов каждый графический процессор ожидает завершения работы других графических процессоров в синхронном режиме. Когда все градиенты получены, каждый графический процессор усредняет их и обновляет свой параметр, и начинается следующий шаг. Вы можете узнать больше об обучении Distributed TensorFlow по этой ссылке.

Теперь, когда стратегия определена, мы создаем объект RunConfig, используя эту стратегию, и используем его для вызова функции model_to_estimator, которая преобразует модель Keras в объект оценки.

Когда оценщик готов, мы можем просто обучить и оценить его, используя эти две строки кода:

estimator.train(lambda:dataset.imgs_input_fn(mode="train"), hooks=[time_hist])
estimator.evaluate(lambda:dataset.imgs_input_fn(mode="val"))

В этих двух вызовах важно отметить функцию dataset.imgs_input_fn. Эта функция передает модели данные с помощью TensorFlow Dataset API.

API набора данных TensorFlow

Dataset - это высокоэффективный API для ввода данных, который хорошо сочетается с оценщиками и tf.Keras. Ядром нового конвейера ввода является Dataset (и, возможно, Iterator). Dataset - это набор elements, каждый из которых имеет одинаковую структуру, где один элемент может быть одним или несколькими тензорами. Различные тензоры внутри элемента называются components. Каждый компонент имеет определенный тип данных и форму, но разные компоненты внутри одного элемента могут иметь разные типы данных и формы.

В следующем фрагменте кода показано, как создать объект набора данных, который можно передать оценщикам:

dataset = tf.data.Dataset.from_tensor_slices((image_paths, gt_paths))
dataset = dataset.map(lambda image, label: tuple(tf.py_func(
          self._one_hot_gt, [image, label], [tf.string, tf.uint8])))
dataset = dataset.map(self._data_to_tensor)
dataset = dataset.repeat(self.epochs)
dataset = dataset.batch(self.batch_size)
dataset = dataset.prefetch(self.batch_size)

Важная функция, на которую следует обратить внимание, - это функция map(), которая позволяет вам читать данные и обрабатывать их любым способом (изменение размера, быстрый код и т. Д.). repeat() позволяет указать, сколько раз вы хотите перебирать этот набор данных. batch() автоматически группирует данные в зависимости от размера пакета, предоставленного пользователем, и prefetch() выполняет предварительную выборку следующего пакета, пока текущий пакет обрабатывается.

Результаты тренировки и сравнение скорости

Мы обучаем нашу модель сегментации на 100 эпох на двух графических процессорах NVIDIA GTX1080. Модель обеспечивает точность пикселей около 91% всего за 4 часа обучения. Вот несколько сравнений из наших тестов:

Как видите, использование двух графических процессоров вместо одного дает нам ускорение почти в 2 раза для достижения того же уровня точности.

Мы надеемся, что это руководство помогло вам понять, как интегрировать Brain Builder в рабочий процесс ИИ для создания высокоэффективных конвейеров подготовки данных и обучения. Мы приветствуем отзывы сообщества, чтобы мы могли дальше улучшать Brain Builder!

Вы можете подписаться на бета-версию Brain Builder здесь. Оставьте комментарий ниже с отзывами, запросами функций или любыми другими вопросами, которые могут у вас возникнуть в отношении учебника и / или Brain Builder.

Вы можете найти код этого руководства по этой ссылке.