Автор оригинала: 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
Для моей модели звездных войн я собрал 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 Отказ
Если вы нашли эту статью полезную, это будет много значить, если вы дали ему какие-то аплодисменты? И поделился, чтобы помочь другим найти это! И не стесняйтесь оставить комментарий ниже.