Вопрос или проблема
Я пытаюсь реализовать YOLO v3 в Tensorflow-Keras с нуля, с целью обучить свою модель на пользовательском наборе данных. Под этим я подразумеваю без использования предобученных весов. Я ознакомился со всеми тремя статьями по YOLOv1, YOLOv2 (YOLO9000) и YOLOv3, и не могу указать полную архитектуру, которая продолжается после того, как используется Darknet53 в качестве извлекателя признаков – “детекционные” слои, о которых говорится здесь. После множества чтений блогов на Medium, kdnuggets и других подобных сайтах у меня остались несколько значительных вопросов:
- Неужели я пропустил полную архитектуру детекционных слоев (которые продолжаются после Darknet53, используемого для извлечения признаков) в статье по YOLOv3 где-то?
- Автор, похоже, использует разные размеры изображений на разных этапах обучения. Сеть автоматически выполняет это увеличение/уменьшение размера изображений?
- Для предварительной обработки изображений действительно достаточно только изменить размер и затем нормализовать (разделив на 255)?
Пожалуйста, будьте добры указать мне правильное направление. Я буду признателен за помощь!
Это старое, но в YOLOv1 есть все необходимое в статье. Однако реализовать это не так просто.
Что вам, я думаю, не хватает, так это того, что сначала они обучают нейронную сеть классификации, то есть они убирают последние несколько слоев и, вероятно, запускают с регрессионной головой и функцией softmax, стандартным способом классификации изображений. В этом случае вы можете обучать любой размер (в данном случае 224×224); результаты свертки общие.
Таким образом, нейронная сеть научилась извлекать признаки.
Затем они загружают веса без сети головы и добавляют другую, 5-слойную голову, которая заканчивается 2 полностью связанными регрессионными слоями и другой функцией потерь, которую они разработали, и вам придется ее реализовать.
Ответ или решение
Полная архитектура YOLO v3: Основные аспекты
Введение
YOLO (You Only Look Once) представляет собой эффективный алгоритм для обнаружения объектов, который использует единую нейронную сеть для предсказания bounding box и класса объектов в изображениях. YOLOv3, представленная Джозефом Редмоном и другими авторами, является третьей версией этого подхода и достигает значительных улучшений по сравнению с предыдущими версиями. В этой статье мы подробно рассмотрим архитектуру YOLOv3, включая слои обнаружения и важные аспекты реализации с использованием TensorFlow-Keras.
Структура архитектуры YOLOv3
-
Особенности Darknet53
- YOLOv3 использует Darknet53 в качестве экстрактора признаков. Darknet53 состоит из 53 слоев, включая свёрточные слои, которые обеспечивают нелинейные преобразования с помощью функции активации Leaky ReLU.
- Architektura включает наличие блоков residual, что позволяет улучшить обучение модели за счет более эффективного преобразования градиентов.
-
Слои обнаружения
- После извлечения признаков, архитектура YOLOv3 состоит из трех уровней обнаружения, которые работают на разных масштабах изображений. Это достигается путем последующей передачи признаков через несколько свёрточных слоев. Конкретно, используются разные разрешения для улучшения обнаружения объектов разного размера:
- Слои для разрешения 13×13: Этот уровень способствуется признаками из более глубоких слоев Darknet53. Он подходит для обнаружения крупных объектов.
- Слои для разрешения 26×26: Этот уровень использует менее глубокие слои и позволяет обнаруживать объекты среднего размера.
- Слои для разрешения 52×52: Этот уровень работает с более высокими слоями сети и предназначен для обнаружения мелких объектов.
- После извлечения признаков, архитектура YOLOv3 состоит из трех уровней обнаружения, которые работают на разных масштабах изображений. Это достигается путем последующей передачи признаков через несколько свёрточных слоев. Конкретно, используются разные разрешения для улучшения обнаружения объектов разного размера:
-
Обработка выходных данных
- YOLOv3 генерирует предсказания в виде bounding box, классов и вероятностей, применяя особую функцию активации Sigmoid для классификаций и координат.
- Выходы формируются в формате, который включает значения для центрирования bounding box, широты, высоты и вероятность наличия объекта в каждом из классов. Важно отметить, что предсказания объединяются через временные компоненты, чтобы уменьшить количество пустых пробелов между предсказаниями.
Вопросы по реализации
-
Архитектура слоев обнаружения: Да, в документации YOLOv3 может не быть детального описания всех слоев обнаружения, но они каждый раз применяются поверх извлеченных особенностей из Darknet53. Рекомендуется обратиться к исходному коду YOLOv3 и документации, чтобы составить более полное представление.
-
Разные размеры изображений: В процессе обучения действительно практикуется использование различных размеров изображений. Это позволяет модели лучше обобщать информацию и адаптивно работать с разными аспектами изображения. Обычно размерение изображений осуществляется в рамках конкретной фазы обучения.
-
Предобработка изображений: Вы правы, что предобработка включает в себя Resize и нормализацию (деление на 255). Это необходимо для обеспечения масштабирования значений пикселей в диапазон от 0 до 1, что улучшает качество и скорость обучения.
Заключение
Реализация YOLOv3 с нуля требует глубокого понимания архитектуры и оперативных моментов, особенно в части слоев обнаружения после Darknet53. Реализация детекции на уровне различных разрешений объектов и правильная предобработка изображений — ключевые элементы успешной модели. Опираясь на материалы, доступные в исходных кодах и документации, достижение успеха в обучении модели на ваших собственных данных станет более вероятным.