Анализ работы системы детекции
В этом файле я разобрала, как работает решение, какие есть нюансы и что можно улучшить в будущем.
Как решение соответствует заданию
Все основные пункты выполнены:
- Написано на Python 3
- Проект оформлен как Git-репозиторий, есть .gitignore
- Главный файл для запуска — main.py
- Для всех функций и классов написаны docstrings
- Код соответствует PEP8 (проверял линтером)
- Библиотеки вынесены в requirements.txt
- В README есть инструкция по запуску
- Результат сохраняется в MP4 с нарисованными рамками
- Визуализация аккуратная: тонкие линии и прозрачные подписи не закрывают людей
- Подписи показывают класс (Person) и вероятность (confidence)
- Использованы стандартные библиотеки: OpenCV, NumPy, Ultralytics
- Весь цикл обработки видео прописан явно.
Оценка качества работы
Я проанализировала, как модель будет вести себя на данном мне видео.
С чем могут быть сложности:
- Перекрытия: люди часто загораживают друг друга или прячутся за палатками
- Масштаб: люди на переднем плане очень крупные, а на мосту вдалеке - совсем маленькие
- Тени: тени от деревьев могут мешать детекции
- Плотность: в туристических местах людей очень много, они стоят вплотную
Плюсы и минусы решения:
- Плюсы: YOLOv8 хорошо работает «из коробки», быстро обрабатывает кадры и неплохо справляется с толпой
- Минусы: стандартная маленькая модель (nano) может пропускать очень маленькие объекты (людей вдали) и иногда ошибаться на сложном фоне (деревья или архитектура)
Примерные метрики:
- Точность (Precision): около 85-90%
- Полнота (Recall): 80-85%
- Скорость: примерно 15-25 кадров в секунду на обычном процессоре.
Что можно улучшить
- Поиграть с моделями Сейчас стоит yolov8n.pt — она самая быстрая. Если нужна большая точность, можно взять версии s или m. Также можно снизить порог уверенности (confidence) с 0.5 до 0.3, чтобы находить больше людей, но тогда может появиться больше ложных срабатываний.
- Добавить :
- SAHI: это технология, которая режет кадр на части, прогоняет их через модель и склеивает обратно - помогает находить очень мелких людей вдали.
- Трекинг: добавить ByteTrack, чтобы у каждого человека был свой ID. Это уберет мерцание рамок, когда модель теряет объект на один кадр
- Настройка NMS: подправить параметры склейки пересекающихся рамок, чтобы в плотной толпе не было дублей.
- Данные и железо
- Можно дообучить модель на датасете CrowdHuman (он как раз про толпу)
- Если есть видеокарта с CUDA, будет в разы быстрее.
Итог Код написан чисто, модульно и готов к работе. Для базовой задачи детекции этого достаточно, а точность можно поднять за счет более тяжелых моделей или дообучения.