Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Person Detection

Система детекции людей на видео с использованием RT-DETR.

Описание

Этот проект предоставляет инструмент для детекции людей на видео с использованием современных моделей CV. Проект поддерживает четыре режима работы:

  • Чистый YOLO: Стандартная детекция
  • YOLO + SAHI: Улучшенная детекция с разбиением изображения на перекрывающиеся фрагменты для лучшего обнаружения мелких объектов
  • RT-DETR: Детекция на оснвое Vision Transformer
  • RT-DETR + SAHI: Детекция на оснвое Vision Transformer с разбиением изображения на перекрывающиеся фрагменты

🛠️ Установка

Требования

  • Python 3.8+
  • CUDA (опционально, для ускорения)

Установка зависимостей

  1. Клонируйте репозиторий:
git clone https://github.com/yourusername/yolo-person-detection.git
cd yolo-person-detection
  1. Создайте виртуальное окружение:
python -m venv venv
source venv/bin/activate  # для Linux/Mac
# или
venv\Scripts\activate  # для Windows
  1. Установите необходимые пакеты:
pip install -r requirements.txt

Файл requirements.txt

ultralytics>=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/cu121

Использование

Базовый запуск

python 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              	# Документация

🔍 Компоненты системы

Детекторы

YoloDetector

Стандартный детектор YOLO:

from detectors import YoloDetector

detector = YoloDetector(
    model_path='yolo12n.pt',
    preprocessing_func=None,
    device='cuda'
)

detections = detector.detect(frame)

YoloSahiDetector

Детектор с использованием 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)

RTDETRDetector

Стандартный детектор RT-DETR:

from detectors import RTDETRDetector

detector = RTDETRDetector(
    model_path='rtdetr-l.pt',
    preprocessing_func=None,
    device='cuda'
)

detections = detector.detect(frame)

TDETRSahiDetector

Детектор 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)

⚙️ Настройка

Параметры SAHI

В файле 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
)

Выбор модели YOLO

Все доступные модели можно найти здесь: https://docs.ultralytics.com/models/

Рекомендуется использовать модели серии YOLO12:

  • yolo12n.pt - Nano (самая быстрая)
  • yolo12s.pt - Small
  • yolo12m.pt - Medium
  • yolo12l.pt - Large
  • yolo12x.pt - Extra Large (самая точная)

Выбор модели RT-DETR

Доступные модели:

  • rtdetr-l.pt - Large
  • rtdetr-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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages