Система детекции людей на видео с использованием RT-DETR.
Этот проект предоставляет инструмент для детекции людей на видео с использованием современных моделей CV. Проект поддерживает четыре режима работы:
- Чистый YOLO: Стандартная детекция
- YOLO + SAHI: Улучшенная детекция с разбиением изображения на перекрывающиеся фрагменты для лучшего обнаружения мелких объектов
- RT-DETR: Детекция на оснвое Vision Transformer
- RT-DETR + SAHI: Детекция на оснвое Vision Transformer с разбиением изображения на перекрывающиеся фрагменты
- Python 3.8+
- CUDA (опционально, для ускорения)
- Клонируйте репозиторий:
git clone https://github.com/yourusername/yolo-person-detection.git
cd yolo-person-detection- Создайте виртуальное окружение:
python -m venv venv
source venv/bin/activate # для Linux/Mac
# или
venv\Scripts\activate # для Windows- Установите необходимые пакеты:
pip install -r requirements.txtultralytics>=8.3.0
sahi>=0.11.36
opencv-python>=4.10.0
torch>=2.0.0+cu121
torchvision>=0.15.0+cu121
--extra-index-url https://download.pytorch.org/whl/cu121python main.py --input input_video.mp4 --output output_video.mp4| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
--input |
str | обязательный | Путь к входному видеофайлу |
--output |
str | output.mp4 |
Путь к выходному видеофайлу |
--confidence |
float | 0.5 |
Порог уверенности для детекции (0.0-1.0) |
python main.py --input video.mp4 --output result.mp4 --confidence 0.5Проект поддерживает одновременную визуализацию результатов работы нескольких моделей на одном видео. Каждая модель отображается своим цветом, что позволяет визуально сравнивать их производительность.
Для использования этой функции раскомментируйте соответствующий блок кода в main.py:
# Инициализация нескольких моделей
model1 = detectors.YoloDetector(
'yolo12l.pt',
device=device
)
model2 = detectors.YoloSahiDetector(
'yolo12n.pt',
slice_height=800,
slice_width=800,
overlap_height_ratio=0.3,
overlap_width_ratio=0.3,
preprocessing_func=apply_clahe,
device=device
)
model3 = detectors.RTDETRDetector(
model_path="rtdetr-l.pt",
preprocessing_func=apply_clahe,
device=device
)
# Обработка видео с визуализацией всех моделей
video_writers.draw_multi_detections(
input_path,
output_path,
[model1, model2, model3],
confidence
)yolo-person-detection/
├── main.py # Главный скрипт для обработки видео
├── detectors.py # Классы детекторов (YOLO, YOLO+SAHI, RT-DETR, RT-DETR+SAHI)
├── preprocessors.py # Функции предобработки изображений
├── video_writers.py # Функции создания видео
├── requirements.txt # Зависимости проекта
└── README.md # Документация
Стандартный детектор YOLO:
from detectors import YoloDetector
detector = YoloDetector(
model_path='yolo12n.pt',
preprocessing_func=None,
device='cuda'
)
detections = detector.detect(frame)Детектор с использованием SAHI для улучшенной детекции мелких объектов:
from detectors import YoloSahiDetector
from preprocessors import apply_clahe
detector = YoloSahiDetector(
model_path='yolo12n.pt',
slice_height=512,
slice_width=512,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2,
preprocessing_func=apply_clahe,
device='cuda'
)
detections = detector.detect(frame)Стандартный детектор RT-DETR:
from detectors import RTDETRDetector
detector = RTDETRDetector(
model_path='rtdetr-l.pt',
preprocessing_func=None,
device='cuda'
)
detections = detector.detect(frame)Детектор RT-DETR с использованием SAHI для улучшенной детекции мелких объектов:
from detectors import RTDETRSahiDetector
from preprocessors import apply_clahe
detector = RTDETRSahiDetector(
model_path='rtdetr-l.pt',
slice_height=512,
slice_width=512,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2,
preprocessing_func=apply_clahe,
device='cuda'
)
detections = detector.detect(frame)Проект включает различные методы предобработки изображений:
- CLAHE - Адаптивная гистограммная эквализация
- Retinex SSR - Single-Scale Retinex для улучшения деталей
- Гамма-коррекция - Настройка яркости
- Повышение резкости - Kernel и Unsharp Masking
- Шумоподавление - Bilateral, NLM, Gaussian фильтры
- Автоматическая коррекция - Яркость и контраст
from preprocessors import apply_clahe, adjust_gamma
# Применение CLAHE
enhanced_frame = apply_clahe(frame)
# Гамма-коррекция
brightened_frame = adjust_gamma(frame, gamma=1.5)В файле main.py можно настроить параметры разбиения изображения:
model = YoloSahiDetector(
'yolo12n.pt',
slice_height=512, # Высота фрагмента
slice_width=512, # Ширина фрагмента
overlap_height_ratio=0.2, # Перекрытие по высоте (20%)
overlap_width_ratio=0.2, # Перекрытие по ширине (20%)
preprocessing_func=apply_clahe,
device=device
)
model = RTDETRSahiDetector(
'rtdetr-x.pt',
slice_height=512, # Высота фрагмента
slice_width=512, # Ширина фрагмента
overlap_height_ratio=0.2, # Перекрытие по высоте (20%)
overlap_width_ratio=0.2, # Перекрытие по ширине (20%)
preprocessing_func=apply_clahe,
device=device
)Все доступные модели можно найти здесь: https://docs.ultralytics.com/models/
Рекомендуется использовать модели серии YOLO12:
yolo12n.pt- Nano (самая быстрая)yolo12s.pt- Smallyolo12m.pt- Mediumyolo12l.pt- Largeyolo12x.pt- Extra Large (самая точная)
Доступные модели:
rtdetr-l.pt- Largertdetr-x.pt- Extra-Large
В ходе тестирования различных конфигураций моделей и методов предобработки были сделаны следующие выводы:
-
RT-DETR демонстрирует превосходство над YOLO в условиях стандартной съемки, показывая более высокую точность и скорость работы по сравнению с YOLO12x.
-
Метод SAHI является мощным инструментом для обнаружения мелких объектов (людей на заднем плане), где чистые модели YOLO и RT-DETR не справляются. Однако его применение ведет к увеличению числа ложноположительных срабатываний.
-
Предобработка изображений критически важна. Применение CLAHE для увеличения контрастности значительно повысило уверенность и точность RT-DETR при детекции в сложных ситуациях.
-
YOLO более устойчива к размытию. В то время как YOLO сохраняет способность детектировать объекты на заднем плане при размытии, RT-DETR в этих условиях значительно теряет в эффективности.
Заключение: Наилучшие результаты в рамках эксперимента показала связка RT-DETR + SAHI, которая сочетает в себе высокую точность базовой модели и способность детектировать мелкие объекты.
-
Fine tuning моделей. Дообучение RT-DETR на специализированном датасете для адаптации под конкретные условия.
-
Оптимизация предобработки. Эксперименты с адаптивными настройками CLAHE, и добавление других типов постобработки.
-
Умный слайдинг. Оптимизация параметров SAHI (размер блоков, перекрытие) и оптимизация алгоритма NMS для баланса между обнаружением мелких объектов и минимизацией ложных срабатываний.
-
Временная стабилизация. Интеграция алгоритмов трекинга (ByteTrack, Bot-SORT) для повышения устойчивости детекции в видео-потоке и фильтрации мимолетных ложных срабатываний.
-
Архитектурный эксперимент. Тестирование альтернативных моделей детекции, потенциально лучше работающих с мелкими объектами.
Пример работы модели с построением bounding boxes(RT-DETR + SAHI, model_name = rtdetr-x.pt, slice_height=800, slice_width=800,overlap_height_ratio=0.3, overlap_width_ratio=0.3):
https://disk.yandex.ru/i/f09QCtc4iiJEWg