Учебник | Использование Tensorflow для обнаружения Пикачу из видео!

искусственный интеллект TensorFlow Python Android
Автор | Хуан Де Диос Сантос
Переводчик | Чжиюн Лю
Редактор | Натали, Дебра
Руководство по передовой ИИ:Классификация изображений и обнаружение объектов — два основных модуля компьютерного зрения. По сравнению с классификацией изображений задачи обнаружения объектов являются более сложными и сложными. Обнаружение объектов изображения достигло огромного прогресса в контексте развития глубокого обучения за последние несколько лет, и производительность обнаружения была значительно улучшена. Обнаружение цели должно не только обнаруживать конкретную цель, но и определять конкретное местоположение цели. Однако самоотверженная преданность великих богов моделям Tensorflow сделала модель обнаружения целей популярной, и вы можете легко обучить нужную модель обнаружения целей, подготовив обучающие данные в определенном формате. За границей есть поклонник Пикачу, использующий TensorFlow для обнаружения Пикачу по видео, давайте посмотрим, как они это делают? Что еще более важно, они выпустили полный код!

Для более качественного контента, пожалуйста, обратите внимание на паблик WeChat "AI Frontline", (ID: ai-front)

Среди множества функций и инструментов TensorFlow есть компонент под названием TensorFlow Object Detection API. Как следует из названия, цель этой библиотеки — обучить нейронную сеть, способную распознавать объекты в видеокадрах, например изображения.

На одной из своих предыдущих работ я опубликовал статью, объясняющую мой процесс обнаружения Пикачу с помощью пакета TensorFlow на устройстве Android. Кроме того, я представил библиотеку и обсудил различные архитектуры и функции, которые она предоставляет, а также продемонстрировал, как оценивать процесс обучения с помощью TensorBoard.

Примечание AI Frontline: эту статью можно посмотреть по адресу http://suo.im/4GPhqa.

Через несколько месяцев я начал работать над улучшением ранее обученной модели для обнаружения Пикачу, надеясь обнаружить Пикачу в видео, используя Python, OpenCV и, конечно же, TensorFlow Object Detection. Код этой модели можно найти на Github:

https://github.com/juandes/pikachu-detection

Супер милый Пикачу

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

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

Пикачу обнаружен

Обнаруженный Пикачу в зеленой рамке

Улучшить модель

Как упоминалось ранее, на предыдущей работе я изначально обучал модель обнаружения Пикачу с целью использования этой модели на устройстве Android и ноутбуке Python. Тем не менее, я не очень доволен производительностью этой модели, и мотивация сделать систему обнаружения Пикачу заставляет меня постоянно улучшать эту модель, поэтому у меня есть эта статья.

Меня больше всего беспокоит количество изображений Пикачу, необходимых для построения системы: 230. Около 70% используется для обучения, а остальные 30% используются для тестирования, так что обучения немного. Хотя технически это не проблема (поскольку модель работает «хорошо»), я добавил в тренировочный набор более 70 изображений (немного, но лучше, чем ничего).

Так как теперь у меня больше фотографий, я должен продлить обучение модели. Вместо обучения с нуля я использовал контрольную точку обучения более ранней модели и продолжил оттуда; первая обучалась на 15 000 эпох, а новая тренировка заняла 20 000 эпох. Следующие два рисунка показывают общие потери и точность (источник: TensorBoard); по этим двум рисункам легко увидеть, что от 15000 до 20000 эпох (особенно по потерям) мало что изменилось.

Кривая степени потерь

Кривая точности

Последним (и относительно небольшим) улучшением, которое я сделал, было изменение порога обнаружения для приложений Android, увеличив значение по умолчанию с 0,6 до 0,85.

Могут ли эти улучшения что-то изменить, спросите вы? Даже без предвзятости я бы сказал да! Я заметил небольшие улучшения. Самое большое изменение, которое я заметил, заключалось в том, что количество ложных срабатываний в приложении для Android уменьшилось, потому что цель выглядела как желтая капля; конечно, это также могло быть связано с более высоким порогом.

Теперь у меня есть обновленная (и, надеюсь,) улучшенная модель, которую я готов использовать для обнаружения Пикачу в видео. Прежде чем сделать это, я хотел бы отметить, что я пропущу весь процесс замораживания и импорта модели, так как это было рассмотрено в моей предыдущей работе.

Обнаружить по видео

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

Большая часть моего кода основана на записной книжке Python, предоставленной в TensorFlow Object Detection; этот код выполняет большую часть работы, так как включает множество функций, упрощающих процесс обнаружения. Кроме того, я предлагаю вам взглянуть на мой сценарий и использовать его в качестве руководства при чтении следующих абзацев.

С точки зрения высокого уровня написанный мной код выполняет три основные задачи:

ресурс загрузки

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

Просмотрите видео

Основная функция скрипта основана на зацикливании каждого кадра видео. На каждой итерации кадр считывается, и его цветовое пространство изменяется. Затем пройдите фактический процесс обнаружения, чтобы найти всех этих красивых Пикачу. Затем он возвращает координаты ограничивающей рамки, в которой находится Пикачу (если он найден), и значение достоверности обнаружения. Затем этот скрипт создаст копию кадра, содержащего ограничивающую рамку Пикачу, если значение достоверности выше заданного порога. Для этого проекта я установил порог достоверности на очень низкий 20%, потому что я заметил, что количество ложных срабатываний, обнаруженных в видео, очень мало, поэтому я решил «рискнуть» установить такой порог, просто чтобы иметь возможность Больше Пикачу обнаружено.

Создать новое видео

Все вновь созданные копии кадра с полями обнаружения, упомянутыми в предыдущих шагах, используются для построения нового видео. Чтобы создать это видео,VideoWriterобъект, и на каждой итерации вышеупомянутого цикла в этот объект будет записываться копия кадра (без звука).

Результаты и обсуждение

Эти два видео демонстрируют работу модели.

V.QQ.com/small/afraid/ah 061…

V.QQ.com/small/afraid/please 065…

Результаты обнаружения этой модели в первом видео очень хорошие. Хотя Пикачу держит бутылку с кетчупом на протяжении всего видео, модель может обнаружить Пикачу в большинстве сцен. С другой стороны, Пикачу не был обнаружен на 0:22, а отрезок с 0:40 до 0:44, где летающий богомол разбил бутылку с кетчупом, был обнаружен как ложноположительный.

Модель работала на втором видео не так хорошо, как на первом, основная проблема заключается в том, что на экране два Пикачу, в этом случае модель, кажется, рассматривает обоих Пикачу как одного, а не каждого обнаруженного Пикачу как одного: очевидная ошибка. пример будет начинаться в 0:13, когда два Пикачу бьют друг друга.

Резюме и обзор

В этой статье я рассказал о том, как обнаружить Пикачу в видео с помощью пакета TensorFlow Object Detection. В начале этой статьи я рассказал о предыдущей работе, упомянув, что использовал более раннюю версию модели для обнаружения Пикачу на устройствах Android. Пока модель работала, остались некоторые проблемы, которые я хотел решить; эти улучшения позволили мне завершить этот новый проект и построить модель для обнаружения Пикачу для видео.

Эта новая модель сделала именно то, что я ожидал. Конечно, бывают случаи, когда это невозможно обнаружить, что связано с ложными срабатываниями, но модель делает то, что должна делать. В качестве будущего направления исследований я надеюсь добавить в свой обучающий набор больше изображений Пикачу с разных ракурсов, например, виды Пикачу сбоку и сзади, чтобы сделать данные более разнообразными и, таким образом, получить лучшие результаты.

Оригинальная ссылка:

https://towardsdatascience.com/detecting-pikachu-in-videos-using-tensorflow-object-detection-cd872ac42c1d