Первыйкликните сюдаПосмотрите видео финального эффекта (иначе можете потерять мотивацию на полпути)
Теперь многие технологические гиганты, такие как IBM, Google, Microsoft и Amazon, запустили простые в использовании API-интерфейсы визуального распознавания, и даже некоторые небольшие компании, такие как Clarifai, запустили аналогичные API. Кроме того, ранее в этом году Facebook объявил, что откроет исходный код своей платформы обнаружения объектов.Detectron, используемый для продвижения исследований в области компьютерного зрения.
Оба изображения ниже были помечены классификатором по умолчанию в IBM Watson Visual Recognition, но первое изображение было сначала помечено моделью обнаружения объектов до этого.
Сама технология обнаружения объектов гораздо более продвинута, чем визуальное распознавание, но если вы хотите использовать эту технологию, вам придется проделать собственную работу.
В зависимости от вашего фактического использования вам может не понадобиться пользовательская модель обнаружения объектов. API обнаружения объектов TensorFlow предоставляет несколько моделей, скорость и точность которых можно настроить на основеНабор данных COCO
Чтобы упростить вам задачу, я (автор Ник Бурдакос — прим. переводчика) составил список, объединив объекты, которые можно обнаружить с помощью модели COCO:
Если вы хотите обнаруживать объекты, которых нет в приведенном выше списке, например логотипы или что-то еще, вы можете создать только собственный детектор объектов. Я сам люблю смотреть «Звездные войны», особенно «Тысячелетнего сокола», поэтому я хотел построить модель, которая идентифицировала бы «Тысячелетний сокол» и некоторые истребители Tie в фильме. Может быть, вы думаете, что это идея, но вы не знаете, насколько это важно для несгибаемого фаната «Звездных войн»…
Аннотируйте свои фотографии
Обучение вашей модели требует много работы. Увидев это, вы можете подумать:Эй Эй Эй! Последнее, что я хочу услышать, это много работы!«Если вам действительно не хочется создавать и обучать модели самостоятельно, вы можете поискать соответствующие руководства и использовать некоторые готовые модели, представленные на платформе.
Вернемся к теме, поговорим о том, как использовать TensorFlow для отслеживания «Тысячелетнего сокола» в «Звездных войнах».
Во-первых, нужно собрать много фотографий, аннотировать их все, в том числе обозначить координаты объекта и соответствующие метки и т.д. Для случая, когда на фото два истребителя СИД, его можно аннотировать так:
<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 изображений, на каждом из которых было по 2 или 3 объекта. Я предлагаю вам попробовать найти 200-300 образцов на объект.
Вы можете подумать: «Боже мой, почему бы мне не просмотреть сотни изображений и не написать целую кучу XML для каждого изображения?»
Конечно, нет! Мы можем использовать множество инструментов для создания аннотаций, таких как LabelImg и RectLabel. я используюRectLabel, но он доступен только для macOS. Но у LabelImg естьверсия для Windows, Студенты, использующие систему Windows, могут изучить, как использовать этот инструмент.
Несмотря на инструменты аннотирования, предстоит еще много работы, и на аннотирование всего моего набора данных ушло 3 часа.
Если вы сочтете это хлопотным, местные тираны могут нанять стажера для выполнения этой работы или заплатить людям, чтобы они сделали это за вас на Mechanical Turk. Но если ты плохой студент, как я, то засучи рукава и работай усердно.
При создании аннотаций обязательно экспортируйте аннотации в формат PASCAL VOC, если вы не хотите писать свой собственный скрипт преобразования. Я и многие другие студенты тоже пользуемся этим форматом, так что вы можете напрямую "украсть" сценарий, который я написал выше (собственно, я тоже "украл" у других).
Прежде чем мы сможем запустить скрипт для подготовки данных для TensorFlow, нам еще нужно немного поработать.
Копировать репозиторий
Сначала нажмите здесь, чтобы скопировать мойrepo.
Структура каталогов должна выглядеть так:
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, обновить 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. Мы будем использовать их для обучения модели.
Скачать базовую модель
Обучение детектора объектов с нуля может занять несколько дней, даже при использовании нескольких графических процессоров. Чтобы ускорить обучение, мы будем использовать модель, обученную на различных наборах данных, и повторно использовать параметры модели для инициализации нашей новой модели.
Вы можете скачать один из этой модели зоопаркаМодель. Точность и скорость у каждой модели разная, я использую fast_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 секунд на шаг, что примерно так. Тогда по этим данным вам придется провести 3-4 дня безостановочных тренировок, чтобы получить подобную модель.
Ну, это так безмолвно, у меня нет времени ждать этого.
PowerAI приходит на помощь! !
PowerAI
PowerAI позволяет нам очень быстро обучать нашу модель на серверах IBM P-Series с графическими процессорами P100!
С PowerAI для тренировки 10 000 шагов требуется всего 1 час. Однако это использует только 1 GPU. Настоящая сила PowerAI заключается в его способности выполнять распределенное глубокое обучение на сотнях графических процессоров с эффективностью до 95 %.
высокоскоростной!
Поскольку мне не нужно тренироваться на миллионах изображений, поэтому мне не нужно использовать сотни графических процессоров, 1 достаточно.
Создать учетную запись Нимбикс
Разработчики могут создать учетную запись на Nimbix, и каждая учетная запись может бесплатно обрабатывать данные в PowerAI в течение 10 часов. нажмитеЗарегистрируйтесь здесь.
Уведомление:Этот процесс регистрации не является автоматическим и требует 24 часов рассмотрения и утверждения, поэтому студенты, которые хотят использовать эти 10 часов бесплатно, пожалуйста, планируйте свое время.
Как только ваша заявка будет одобрена, вы получите электронное письмо с подтверждением и созданием вашей учетной записи Nimbix. Вам будет предложено ввести код скидки в электронном письме, просто оставьте это поле пустым.
Теперь вы должны быть в состоянииздесьвошли в систему.
Разверните приложение PowerAI Notebooks
Начните с поиска ноутбуков PowerAI.
Нажмите на него и выберите TensorFlow.
Выберите тип машины: 32-поточная POWER8, 128 ГБ ОЗУ, 1 графический процессор P100 с NVLink (np8g1).
После запуска появится панель управления ниже. Когда статус сервера меняется на обработку, он начинает обращаться к серверу.
Нажмите, чтобы показать, чтобы получить пароль.
Затем нажмите Щелкните здесь, чтобы подключиться, чтобы запустить Notebook.
Войдите в систему с именем пользователя nimbix и паролем, который вы только что получили.
начать обучение
Щелкните раскрывающееся меню «Создать» и выберите «Терминал», чтобы открыть новое окно терминала:
Тогда вы увидите знакомый взгляд:
Примечание. Терминал может не работать в Safari.
Шаг обучения такой же, как и в нашей локальной среде. Если вы используете мои обучающие данные, вы можете просто скопировать мое репо, выполнив следующую инструкцию (если не используете мои обучающие данные, скопируйте свое собственное репо):
git clone https://github.com/bourdakos1/Custom-Object-Detection.git
Затем перейдите в корневой каталог:
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.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 шагов и пик около 20000 шагов. Я продолжал тренироваться на протяжении 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
Не забудьте экспортировать PYTHONPATH=$PYTHONPATH:pwd
:pwd
/стройный.
Вы должны увидеть новый каталог output_inference_graph, содержащий файл Frozen_inference_graph.pb. Это файл, который нам нужен.
тестовая модель
Теперь выполните следующую команду:
python object_detection/object_detection_runner.py
Затем модель обнаружения объектов, найденная в файле output_inference_graph/frozen_inference_graph.pb, запускается для всех изображений в каталоге test_images, а результаты экспортируются в каталог output/test_images.
результат
Запускаем построенную модель на клипах в «Звездных войнах: Пробуждение силы», и получаем результаты обнаружения, как на вступительном ролике.
Как видно из видео, построенная нами модель успешно отслеживала космический корабль «Тысячелетний сокол» и истребитель Tie на видео.
Конечно, вы также можете попрактиковаться на других работах и поделиться ими после завершения.@JingluejizhiДавайте взглянем.