Это мое первое самостоятельное исследование в рамках курса прикладного искусственного интеллекта. Я видел много сообщений в LinkedIn, показывающих обнаружение объектов, которые вдохновили меня попробовать такие вещи самостоятельно.
Поэтому я решил использовать обнаружение объектов в качестве своего примера. Тогда мне в голову пришли следующие вопросы:
- Какие объекты обнаруживать?
- Какой набор данных мне использовать?
- Какие у меня вычислительные ресурсы?
- Какую модель обнаружения объектов мне следует использовать?
- Какую платформу мне следует использовать для обучения / тестирования модели?
В наши дни беспилотный автомобиль - это актуальная тема. В таких автомобилях основная система восприятия обнаруживает пешеходов и транспортные средства. Я знал, что это можно сделать с помощью обнаружения объектов, поэтому решил выбрать эту тему.
Меня больше всего беспокоит то, что у меня нет графического процессора, поэтому сначала я решил использовать совместную работу Google в качестве платформы для обучения и тестирования. Доступно множество наборов данных о беспилотных автомобилях и дорожных объектах, таких как BDD100k, Kitty, Pascal VOC и т. Д. У меня осталось очень мало времени, чтобы завершить мои тематические исследования, и совместная работа также имеет следующие 2 ограничения:
- Его время работы составляет 12 часов. Через 12 часов мы должны снова подключиться, что приведет к потере всех переменных и данных.
- Кроме того, мы не можем держать сеанс в режиме ожидания более 1,5 часов.
Учитывая все ограничения, я выбрал Pascal VOC в качестве набора данных для обучения и проверки.
Когда дело доходит до обнаружения объектов на основе глубокого обучения, вы можете столкнуться с тремя основными детекторами объектов:
- R-CNN и их варианты, включая исходный R-CNN, Fast R-CNN и Faster R-CNN.
- Детектор одиночного выстрела (SSD)
- ЙОЛО
R-CNN являются одними из первых детекторов объектов на основе глубокого обучения и являются примером двухступенчатого детектора.
- В первой публикации R-CNN, Богатые иерархии функций для точного обнаружения объектов и семантической сегментации, (2013) Girshick et al. предложил детектор объектов, который требовал такого алгоритма, как Выборочный поиск (или эквивалентного), чтобы предлагать возможные ограничивающие прямоугольники, которые могли бы содержать объекты.
- Затем эти области были переданы в CNN для классификации, что в конечном итоге привело к созданию одного из первых детекторов объектов на основе глубокого обучения.
Проблема со стандартным методом R-CNN заключалась в том, что он был мучительно медленным и не являлся полноценным сквозным детектором объектов.
Чтобы повысить скорость детекторов объектов на основе глубокого обучения, как Single Shot Detectors (SSD), так и YOLO используют стратегию одноэтапного обнаружения.
Эти алгоритмы рассматривают обнаружение объекта как проблему регрессии, принимая заданное входное изображение и одновременно изучая координаты ограничивающего прямоугольника и соответствующие вероятности меток классов.
В целом одноступенчатые детекторы обычно менее точны, чем двухступенчатые детекторы , но значительно быстрее.
YOLO - отличный пример одноступенчатого детектора.
Редмон и Фархади недавно опубликовали новую статью YOLO YOLOv3: постепенное улучшение (2018). YOLOv3 работает очень быстро и точно. В MAP, измеренном на 0,5, IOU YOLOv3 находится на одном уровне с Focal Loss, но примерно в 4 раза быстрее. Более того, вы можете легко найти компромисс между скоростью и точностью, просто изменив размер модели, без переобучения!
Собрав вышеуказанную информацию, я решил использовать YOLOv3 для своего тематического исследования, а также Pascal VOC в качестве набора данных для обучения.
Набор данных Pascal VOC состоит из 20 меток, включая, но не ограничиваясь:
- Человек: человек
- Автомобиль: велосипед, автобус, автомобиль, мотоцикл и т. д.
- … Некоторые другие классы.
Благодарим пользователя GitHub qqwweee за создание Keras реализации YOLOv3, который уже обучался на наборе данных PASCAL, но я хочу обучаться самостоятельно, поэтому создал аннотации и якоря и изображения, содержащие человека и транспортные средства.
Я выполнил процедуру преобразования веса YOLOv3 в Keras. Я загрузил набор данных из коллаборации и начал обучение с необходимыми наборами данных для обучения и проверки.
У меня потеря валидации составила 10,687, которую я определенно могу улучшить с помощью дополнительных тренировок, но я остановился на этом этапе. У меня очень мало времени на все это, и из-за ограничений совместной работы я много раз терял все свои данные и тренированные сеансы. После этого процесс уменьшения потерь был очень медленным.
Поэтому я решил протестировать свою модель на этом этапе и результат оказался неплохим!
Будущие улучшения:
В будущем я хочу обучить эту модель большему количеству эпох, чтобы получить лучшие результаты. Я попробую эту модель с наборами данных, такими как BDD100K, чтобы научить мою модель обнаруживать другие дорожные объекты, такие как светофор, дорожные знаки, полосы движения, дорожные повреждения / выбоины.
Ссылки: