Для более качественного контента, пожалуйста, обратите внимание на паблик 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/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