Отслеживание «Тысячелетнего сокола» с помощью TensorFlow

машинное обучение
Краткий комментарий: TensorFlow — это библиотека с открытым исходным кодом для машинного обучения. В этой статье автор будет использовать TensorFlow для обучения пользовательской модели распознавания и подробно описывает процесс (поклонник «Звездных войн» = =||).

На момент написания этого блога многие крупные технологические компании (такие как IBM, Google, Microsoft, Amazon) имели простые и удобные в использовании API-интерфейсы визуального распознавания. Некоторые небольшие компании также предоставляют аналогичные услуги, например,Clarifai. Но ни один из них не обеспечивает распознавание объектов.

На изображениях ниже используются одни и те жеWatson визуальное распознаваниеМетки классификатора по умолчанию. С первым уже справилась модель распознавания объектов.

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

В зависимости от вашего варианта использования вам может не понадобиться настраиваемая модель распознавания объектов.TensorFlowAPI распознавания объектов предоставляет несколько моделей с различной скоростью и точностью, основанных наНабор данных COCO.

Для вашего удобства я составил полный список объектов, распознаваемых моделью COCO:

Если вы хотите распознавать некоторые флаги или вещи, которых нет в таблице выше, вам нужно создать свой собственный распознаватель объектов. Я хочу иметь возможность опознать «Тысячелетний сокол» и несколько истребителей СИД. Это, очевидно, чрезвычайно важный вариант использования, потому что вы никогда не знаете...

Аннотируйте свои фотографии

Обучение собственной модели требует много работы. Теперь вы можете подумать: «Эй, эй, эй! Я не хочу вкладывать в это много работы!» Если это так, вы можете проверить мой пост об использовании существующих моделей.Другие статьи. Это более плавное направление.

Вам нужно собрать много картинок и написать заметки. Аннотации включают объявление координат объекта и связанных меток. Например, картинка с двумя истребителями СИД, аннотация выглядит так;

<annotation>
    <folder>images</folder>
    <filename>image1.jpg</filename>
    <size>
        <width>1000</width>
        <height>563</height>
    </size>
    <segmented>0</segmented>
    <object>
        <name>Tie Fighter</name>
        <bndbox>
            <xmin>112</xmin>
            <ymin>281</ymin>
            <xmax>122</xmax>
            <ymax>291</ymax>
        </bndbox>
    </object>
    <object>
        <name>Tie Fighter</name>
        <bndbox>
            <xmin>87</xmin>
            <ymin>260</ymin>
            <xmax>95</xmax>
            <ymax>268</ymax>
        </bndbox>
    </object>
</annotation>

Как и в моей модели «Звездных войн», у меня есть коллекция из 308 изображений, на каждом из которых два или три объекта. Я рекомендую найти 200-300 примеров на объект.

«Вау, — можете подумать вы, — я соберу сотни или тысячи изображений и напишу кучу XML для каждого?»

конечно, нет! Существуют различные инструменты аннотации, такие какlabelImgиRectLabel. Я использую RectLabel, но он поддерживает только macOS. Это потребует много работы, поверьте мне. Мне потребовалось три-четыре часа непрерывной работы, чтобы аннотировать весь набор данных.

Если у вас есть деньги, вы можете попросить кого-нибудь сделать это, например, стажера. вы можете использовать что-то вродеMechanical Turkтакие ресурсы. Если вы бедный студент колледжа, как я, или кто-то, кто любит монотонную работу, вам придется делать это самостоятельно.

При создании аннотаций обязательно экспортируйте их в формат PASCAL VOC, если вы не хотите писать собственные сценарии преобразования. Это формат, который использую я и многие другие, и вы можете «украсть» мой сценарий выше (на самом деле у кого-то другого).

Прежде чем мы начнем запускать скрипт, который подготавливает данные для TensorFlow, нам нужно выполнить некоторые настройки.

клонировать репозиторий

из моего клонаскладНачинать.

Структура каталогов выглядит следующим образом:

models
|-- annotations
|   |-- label_map.pbtxt
|   |-- trainval.txt
|   `-- xmls
|       |-- 1.xml
|       |-- 2.xml
|       |-- 3.xml
|       `-- ...
|-- images
|   |-- 1.jpg
|   |-- 2.jpg
|   |-- 3.jpg
|   `-- ...
|-- object_detection
|   `-- ...
`-- ...

Я добавил свои собственные тренировочные данные, чтобы вы могли использовать их из коробки. Но если вы хотите создать модель с вашими собственными данными, вам нужно поместить тренировочные изображения в каталог изображений, поместить XML-аннотации в annotations/xmls и обновить trainval.txt и label_map.pbtxt.

trainval.txt — это список имен файлов, который позволяет нам находить и связывать файлы JPG и XML. Следующий список trainval.txt позволяет нам найтиabc.jpg, abc.xml, 123.jpg, 123.xml, xyz.jpgиxyz.xml:

abc
123
xyz

намекать: убедитесь, что ваши имена файлов JPG и XML совпадают после удаления расширения.

label_map.pbtxt — это список объектов, которые мы пытаемся идентифицировать. Это выглядит так:

item {
  id: 1
  name: 'Millennium Falcon'
}
item {
  id: 2
  name: 'Tie Fighter'
}

запустить скрипт

Сначала установите Python и pip, а также установите требования к сценариям:

pip install -r requirements.txt

Добавьте модели и модели/slim в свой PYTHONPATH:

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

важный намек: Если вы не хотите запускать приведенную выше команду каждый раз, когда открываете терминал, вам нужно добавить ее в свой файл ~/.bashrc.

Запустите скрипт:

python object_detection/create_tf_record.py

После завершения работы скрипта вы получите файлы train.record и val.record. Это файл, который мы будем использовать для обучения модели.

Скачать базовую модель

Обучите распознаватель объектов с нуля, даже используя несколькоGPUЭто также займет несколько дней. Чтобы ускорить обучение, мы возьмем распознаватель объектов, обученный на другом наборе данных, и повторно используем некоторые его параметры для инициализации нашей новой модели.

ты можешь начатьmodel zooСкачать модель. Каждая модель имеет разные точные значения и скорости. Я использую более быстрый_rcnn_resnet101_coco.

Извлеките и переместите все файлы model.ckpt в корень нашей библиотеки.

Вы должны увидеть файл fast_rcnn_resnet101.config. Он работает с моделью fast_rcnn_resnet101_coco. Если вы используете другие модели, вы можете начать сздесьНайдите соответствующий файл конфигурации.

готов тренироваться

Запустите приведенный ниже скрипт, и вы готовы к обучению!

python object_detection/train.py \
        --logtostderr \
        --train_dir=train \
        --pipeline_config_path=faster_rcnn_resnet101.config

намекать: замените pipe_config_path на локальный путь вашего файла конфигурации

global step 1:
global step 2:
global step 3:
global step 4:
...

Ага! Начать обучение!

10 минут спустя:

global step 41:
global step 42:
global step 43:
global step 44:
...

Компьютер начинает дымить:

global step 71:
global step 72:
global step 73:
global step 74:
...

Как долго эта штука будет работать?

Модель, которую я использовал в видео, проходит около 22 000 шагов.

Чего ждать? !

Я использую MacBook Pro, и если вы используете что-то похожее на мое, я предполагаю, что вы тратите около 15 секунд на каждый шаг, а для получения приличной модели потребуется три или четыре дня непрерывной работы.

Ну, это так глупо. У меня нет столько времени на это ?

PowerAIПриходите на помощь!

PowerAI

PowerAI позволяет нам быстро обучать наши модели с помощью графических процессоров P100 в IBM Power System!

Тренировка на 10 000 шагов занимает всего около часа. Однако для этого используется только один графический процессор. Настоящая сила PowerAI заключается в возможности распределенного использования сотен графических процессоров для глубокого обучения, эффективность которого может достигать 95 %.

С помощью PowerAI IBM установила рекорд распознавания изображений: точность распознавания 33,8% за 7 часов. Это превзошло предыдущий рекорд Microsoft с точностью 29,9% за 10 дней.

Супер быстро быстро быстро!

Поскольку я не тренируюсь на миллионах изображений, мне этот ресурс точно не нужен. Достаточно одного графического процессора.

Создать учетную запись Нимбикс

Nimbix предоставляет разработчикам 10-часовую бесплатную учетную запись на платформе PowerAI. ты сможешьздесьрегистр.

намекать: Этот процесс не является автоматическим, и для прохождения проверки требуется 24 часа.

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

Ты можешь сейчасВойти здесь.

Разверните приложение PowerAI Notebook

Начните с поиска ноутбуков PowerAI:

Нажмите на него и выберите TensorFlow.

Выберите тип машины: 32-поточный POWER8, 128 ГБ ОЗУ, 1 * графический процессор P100 с NVLink (np8g1).

После запуска появится верстак ниже. Когда состояние сервера меняется на «Работает», сервер готов.

Нажмите, чтобы показать, чтобы получить пароль. Затем щелкните щелкните здесь, чтобы подключиться к записной книжке.

Войдите под своей учетной записью nimbix и паролем.

начать обучение

Откройте новый терминал, щелкнув раскрывающееся меню «Создать» и выбрав «Терминал».

Вы должны быть знакомы с этим интерфейсом:

Совет: Терминал может иметь проблемы с Safari.

Шаги обучения такие же, как и при локальном запуске. Если вы используете мои обучающие данные, вы можете клонировать мой репозиторий:

git clone https://github.com/bourdakos1/Custom-Object-Detection.git

Затем перейдите в этот каталог:

cd Custom-Object-Detection

Запустите приведенный ниже фрагмент, чтобы загрузить модель fast_rcnn_resnet101_coco:

wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz
tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz
mv faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.* .

Затем нам нужно снова обновить PYTHONPATH, так как используется новый терминал:

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

Наконец, выполните следующую команду, чтобы начать обучение:

python object_detection/train.py \
        --logtostderr \
        --train_dir=train \
        --pipeline_config_path=faster_rcnn_resnet101.config

Скачайте вашу модель

Когда моя модель будет готова? Это зависит от ваших тренировочных данных. Чем больше данных, тем больше шагов вам нужно. Моя модель стабилизирует около 4500 шагов. Пик в 20 000 шагов. Я даже позволил ему тренироваться до 200 000 шагов, но ничего не увеличилось.

Я рекомендую загружать вашу модель каждые 5000 шагов или около того, оценивая ее, чтобы убедиться, что вы на правильном пути.

Нажмите на логотип Jupyter в верхнем левом углу, затем перейдите в Custom-Object-Detection/train.

Загрузите все файлы model.ckpt с наибольшими номерами.

  • model.ckpt-STEP_NUMBER.data-00000-of-00001
  • model.ckpt-STEP_NUMBER.index
  • model.ckpt-STEP_NUMBER.meta

Совет: вы можете загружать только по одному.

Совет: не забудьте нажать красную кнопку питания, когда закончите, иначе отсчет времени не остановится.

Экспорт графика вывода

Чтобы использовать модель в нашем коде, нам нужно преобразовать файлы контрольных точек (model.ckpt-STEP_NUMBER.*) в замороженныеграф вывода.

Переместите только что загруженный файл контрольной точки в корневой каталог библиотеки, которую мы использовали ранее.

Затем выполните команду:

python object_detection/export_inference_graph.py \
        --input_type image_tensor \
        --pipeline_config_path faster_rcnn_resnet101.config \
        --trained_checkpoint_prefix model.ckpt-STEP_NUMBER \
        --output_directory output_inference_graph

Помнитеexport PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

Вы должны увидеть новый каталог output_inference_graph с файлом frost_inference_graph.pb внутри, который мы и собираемся использовать.

тестовая модель

Теперь выполните следующую команду:

python object_detection/object_detection_runner.py

Он найдет файл output_inference_graph/frozen_inference_graph.pb, использует вашу модель распознавания объектов для идентификации всех изображений в каталоге test_images и выведет результаты в каталог output/test_images.

результат

Вот результаты, которые мы получили, когда запустили модель на всех кадрах в клипе «Звездные войны: Пробуждение силы».

Оригинальная ссылка:Tracking the Millennium Falcon with TensorFlow

Рекомендуемое чтение:

Аврора Дейли,Аврора Разработчикего СМИ.

Читайте три технические статьи на английском языке каждый день.