Рубрики
Без рубрики

Отслеживание тысячелетия Сокола с Tensorflow

Автор оригинала: FreeCodeCapm Team.

Ник Бурдакос

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

Следующие изображения были меченными, используя то же самое Уотсон Визуальное распознавание классификатор по умолчанию. Первый, однако, сначала запускается через модель обнаружения объекта.

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

В зависимости от случая использования, вам не понадобится пользовательская модель обнаружения объектов. Tensorflow API обнаружения объектов обеспечивает несколько моделей различной скорости и точности, которые основаны на COCO DataSet Отказ

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

Если вы хотите обнаружить логотипы или что-то не в этом списке, вам придется создать собственный собственный детектор объектов. Я хотел быть в состоянии обнаружить тысячелетие Falcon и некоторые боевики галстуки. Это, очевидно, чрезвычайно важный случай использования, потому что вы никогда не знаете …

Аннотировать ваши изображения

Обучение вашей собственной модели – это много работы. На данный момент вы можете думать: «WHOA, WHOA, WHOA! Я не хочу делать много работы!» Если это так, вы можете проверить Моя другая статья об использовании предоставленной модели. Это намного более гладкая поездка.

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

    images    image1.jpg            1000        563        0            Tie Fighter                    112            281            122            291                        Tie Fighter                    87            260            95            268            

Для моей модели звездных войн я собрал 308 изображений, включая два или три объекта в каждом. Я бы порекомендовал попытаться найти 200-300 примеров каждого объекта.

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

Конечно нет! Там есть много инструментов аннотации, например LARFEIMG и Rectlabel Отказ Я использовал Rectlabel Но это только для MacO. Это все еще много работы, поверь мне. Мне потребовалось около трех или четырех часов безостановочной работы, чтобы аннотировать весь мой набор данных.

Если у вас есть деньги, вы можете заплатить кому-то еще, как стажер, чтобы сделать это. Или вы можете использовать что-то вроде Механический турк Отказ Если вы сломали студента колледжа, как я, и/или нахожу часы монотонной работы, вы сами по себе.

Нам нужно будет сделать небольшую настройку, прежде чем мы сможем запустить скрипт, чтобы подготовить данные для 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 в Аннотации/XMLS , обновите rainval.txt и label_map.pbtxt Отказ

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

abc123xyz

Примечание: Убедитесь, что ваши имена файлов 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

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

Загрузка базовой модели

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

Вы можете скачать модель из этого Модель зоопарк Отказ Каждая модель зависит от точности и скорости. Я использовал faster_rcnn_resnet101_coco Отказ

Извлечь и переместить все Model.Ckpt Файлы для корневого каталога нашего репо.

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

Готов к тренировке

Запустите следующий скрипт, и он должен начать тренироваться!

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

Примечание: Заменить Pipely_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 позволяет нам обучать нашу модель на системах питания IBM с GPU P100 Fast!

Требуется только около часа, чтобы тренироваться на 10000 шагов. Однако это было только с одним графическим процессором. Настоящая сила в Powerai происходит из способности делать распределение глубокого обучения в сотни графических процессоров до 95% эффективности.

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

Wayyy Fast!

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

Создание учетной записи Nimbix

Nimbix предоставляет разработчикам пробный счет с десять часов свободного времени обработки на платформе Powerai. Вы можете зарегистрировать здесь Отказ

Примечание: Этот процесс не автоматизирован, поэтому он может занять до 24 часов, чтобы быть проверенным и утвержденным.

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

Теперь вы должны быть в состоянии войти в систему здесь Отказ

Разверните применение ноутбуков Powerai

Начните с поиска Notebooks Powerai Отказ

Нажмите на него, а затем выберите Tensorflow Отказ

Выберите тип машины 32 нить Power8, 128 ГБ ОЗУ, 1x P100 GPU W/NVLink (NP8G1) Отказ

После запуска появится следующая панель мониторинга. Когда сервер Статус превращается в Обработка Сервер готов к доступу.

Получить пароль, нажав на (Нажмите, чтобы показать) Отказ

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

Войти Использование имени пользователя Nimbix и ранее предоставленный пароль.

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

Получите новое окно терминала, нажав на Новый Выбросить и выбирать Терминал Отказ

Вам следует встретить с знакомым лицом:

Примечание: Терминал не может работать в Safari.

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

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

Затем CD в корневой каталог:

cd Custom-Object-Detection

Запустите этот фрагмент, который скачат предварительно обученный faster_rcnn_resnet101_coco Модель мы скачали ранее.

wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gztar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gzmv 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 Логотип в верхнем левом углу. Затем навигация по файлу дерево в Пользовательские объекты - обнаружение/поезд Отказ

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

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

Примечание: Вы можете загружать только один за раз.

Примечание: Обязательно нажмите на кнопку красной мощности на вашем компьютере. В противном случае часы будут держать тикать бесконечно.

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

Чтобы использовать модель в нашем коде, нам нужно преобразовать файлы контрольно-пропускных пунктов ( Model.Ckpt-step_number. * ) в замороженный График вывода Отказ

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

Затем запустите эту команду:

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

Помните Экспорт PythonPath = $ Pythonpath: `PWD`:` pwd`/slim Отказ

Вы должны увидеть новый yource_inference_graph каталог с frozen_inference_graph.pb файл. Это файл, который нам нужен.

Проверьте модель

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

python object_detection/object_detection_runner.py

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

Результаты

Вот что мы получаем, когда мы запускаем нашу модель по всем рамам в этом клипе от звездных войн: сила просыпается.

Спасибо за прочтение! Если у вас есть какие-либо вопросы, не стесняйтесь добраться до Bourdakos1@gmail.com, свяжите со мной на LinkedIn или следовать за мной на Средний и Twitter Отказ

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