Пошаговое руководство по компьютерному зрению и распознаванию объектов
Исследуем как работает YOLO для распознавания объектов
Компьютерное зрение — это область искусственного интеллекта, которая позволяет компьютерам "видеть" и понимать визуальный мир, подобно тому, как это делают люди.
Изображение до обработки
Объекты с рамками и метками
Подготовка инструментов для работы
Перед началом работы необходимо подключить все необходимые библиотеки, которые будут использоваться в проекте. Это как подготовка инструментов перед началом ремонта.
OpenCV (cv2) — основная библиотека для компьютерного зрения, предоставляет инструменты для обработки изображений и видео.
NumPy (np) — библиотека для работы с многомерными массивами и математическими операциями, необходима для эффективной обработки данных изображений.
Matplotlib (plt) — используется для визуализации результатов, позволяет отображать изображения и графики прямо в ноутбуке.
Дополнительные утилиты — time для измерения производительности, os для работы с файлами и директориями.
Для работы проекта необходимо установить следующие библиотеки:
Конфигурация нейронной сети YOLO
На этом этапе мы настраиваем параметры нейронной сети и загружаем необходимые файлы для работы с YOLO (You Only Look Once).
Пороги уверенности:
CONFIDENCE = 0.5 означает, что мы доверяем только тем предсказаниям, в которых модель уверена более чем на 50%. Это помогает отфильтровать ложные срабатывания.
Файлы модели:
• yolov3.cfg — конфигурационный файл, описывающий архитектуру нейронной сети
• yolov3.weights — веса модели, содержащие обученные параметры
• coco.names — список из 80 классов объектов, которые может распознавать YOLO
Цвета для визуализации:
Генерируем случайные RGB-цвета для каждого класса объектов, чтобы визуально отличать разные типы обнаруженных объектов.
Инициализация модели YOLO
Теперь мы загружаем предварительно обученную модель YOLO в память и готовим изображение для анализа.
Загрузка сети:
Используем функцию cv2.dnn.readNetFromDarknet() для загрузки модели YOLO из файлов конфигурации и весов. Это создает объект нейронной сети, готовый к работе.
Загрузка изображения:
• cv2.imread() загружает изображение с диска в формате BGR (Blue-Green-Red)
• cv2.cvtColor() преобразует цветовое пространство из BGR в RGB, так как OpenCV использует BGR по умолчанию, а большинство других библиотек — RGB
• plt.imshow() отображает изображение для визуальной проверки
Важно понимать разницу между цветовыми пространствами BGR и RGB, так как неправильное преобразование может привести к искажению цветов на изображении.
Преобразование для нейронной сети
Нейронные сети требуют специального формата входных данных. Мы преобразуем изображение в "blob" — специальный 4D-тензор, подходящий для обработки нейросетью.
Процесс преобразования:
1. Нормализация: делим значения пикселей на 255, чтобы привести их к диапазону [0,1]. Это улучшает обучение и работу нейросети.
2. Изменение размера: YOLO требует входные изображения размером 416×416 пикселей. Мы масштабируем изображение до этого размера.
3. Создание blob: формируем 4D-тензор с формой (1, 3, 416, 416), где:
• 1 — количество изображений в пакете (batch size)
• 3 — количество цветовых каналов (RGB)
• 416×416 — размер изображения
Этот процесс называется "предобработкой" и является критически важным для правильной работы нейронной сети.
Прогнозирование с помощью нейросети
Теперь мы передаем подготовленное изображение в нейронную сеть и получаем результаты анализа.
Процесс анализа:
1. Установка входных данных: используем net.setInput() для передачи blob в сеть
2. Определение выходных слоев: YOLO имеет несколько выходных слоев, каждый из которых отвечает за обнаружение объектов разного размера
3. Выполнение прямого прохода: вызываем net.forward() для получения предсказаний сети
Структура выходных данных:
Каждое обнаружение содержит 85 значений:
• 4 координаты (x, y, ширина, высота)
• 1 значение уверенности (confidence)
• 80 вероятностей для каждого из классов COCO
Время выполнения (обычно 1-3 секунды) зависит от мощности процессора и размера изображения. На GPU этот процесс значительно быстрее.
Извлечение и фильтрация обнаруженных объектов
На этом этапе мы извлекаем полезную информацию из "сырых" выходов нейронной сети и фильтруем результаты.
Процесс обработки:
1. Извлечение данных: для каждого обнаружения извлекаем координаты, уверенность и идентификатор класса
2. Фильтрация по уверенности: оставляем только те обнаружения, где уверенность превышает порог (0.5)
3. Масштабирование координат: преобразуем координаты из размера 416×416 обратно к размеру исходного изображения
Ключевые преобразования:
• Координаты центра (centerX, centerY) преобразуются в координаты верхнего левого угла (x, y)
• Ширина и высота масштабируются в соответствии с размером исходного изображения
• Идентификатор класса определяется как аргумент максимального значения среди 80 вероятностей
На этом этапе мы получаем три списка: координаты рамок, уровни уверенности и идентификаторы классов — все необходимое для визуализации результатов.
Отображение обнаруженных объектов
Финальный этап — отображение обнаруженных объектов на изображении с помощью рамок и подписей.
Процесс визуализации:
1. Рисование рамок: для каждого обнаруженного объекта рисуем прямоугольник соответствующего цвета
2. Добавление подписей: отображаем название класса и уровень уверенности над рамкой
3. Фон для текста: создаем полупрозрачный фон под текстом для лучшей читаемости
4. Удаление дубликатов: применяем алгоритм NMS (Non-Maximum Suppression) для удаления перекрывающихся рамок
Non-Maximum Suppression (NMS):
Этот алгоритм решает проблему множественных рамок вокруг одного объекта. Он:
• Сортирует рамки по уровню уверенности
• Выбирает рамку с наивысшей уверенностью
• Удаляет все остальные рамки, которые сильно перекрываются с выбранной (IOU > 0.5)
• Повторяет процесс для оставшихся рамок
Результат — чистое изображение с одним прямоугольником для каждого обнаруженного объекта и информативными подписями.
Подведение итогов и возможности развития
Мы успешно реализовали полный цикл работы с нейронной сетью YOLO для распознавания объектов на изображениях.
От загрузки изображения до визуализации результатов
Мастер-класс по компьютерному зрению с использованием YOLO | Подготовлено для образовательных целей ТУ УГМК
Используемые технологии: Python, OpenCV, YOLO, Computer Vision, Deep Learning