\documentclass[a4paper,14pt]{extarticle}

\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}

\usepackage{newtxtext,newtxmath}

% Поля
\usepackage{geometry}
\geometry{
  a4paper,
  left=3cm,
  right=1.5cm,
  top=2cm,
  bottom=2cm,
  headsep=0pt,
  footskip=1.5cm
}

% Качество набора текста
\usepackage{microtype}        % красивые переносы/кернинг
\sloppy                      % мягче к переносам, меньше overfull hbox

% Межстрочный интервал
\usepackage{setspace}
\linespread{1.5}

% Абзацы
\setlength{\parindent}{1.25cm}
\setlength{\parskip}{0pt}

% Оформление разделов
\usepackage{titlesec}
\titleformat{\section}{\normalsize\bfseries}{\thesection}{1em}{}
\titlespacing*{\section}{0pt}{*3}{*1}

% Таблицы и рисунки
\usepackage{array}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{graphicx}
\usepackage{float}
\usepackage{subcaption}
\usepackage{caption}
\captionsetup{
  labelsep=period,
  justification=centering,
  font=small,
  width=0.9\textwidth
}

% Математика
\usepackage{amsmath}

% Управление списками (аккуратнее в PDF)
\usepackage{enumitem}
\setlist[itemize]{leftmargin=1.25cm, itemsep=2pt, topsep=2pt}
\setlist[enumerate]{leftmargin=1.25cm, itemsep=2pt, topsep=2pt}

% Ссылки
\usepackage{hyperref}
\usepackage{url}
\def\UrlBreaks{\do\/\do-}
\hypersetup{
  colorlinks=true,
  linkcolor=black,
  urlcolor=black,
  citecolor=black
}

% Фиксация "уплывающих" рисунков между разделами
\usepackage{placeins}

% Отступ первой строки
\usepackage{indentfirst}

% Колонтитулы
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0pt}

% Путь к картинкам: держи файлы либо рядом с .tex, либо в папке img/ или fig/
\graphicspath{{./}{./img/}{./fig/}}

\setcounter{page}{4}
\setcounter{tocdepth}{2}

\begin{document}

\tableofcontents
\newpage

\section*{Введение}
\addcontentsline{toc}{section}{Введение}

Распознавание и детекция объектов на изображениях являются важной частью современных
инженерных систем: от видеонаблюдения и мониторинга до автономных комплексов и
аэрофотосъёмки. Отдельный интерес представляет обнаружение малогабаритных целей
(например, беспилотных летательных аппаратов), поскольку такие объекты часто имеют
малую площадь на изображении и могут находиться на сложном фоне (небо, растительность,
городская застройка).

В данной работе рассматривается практическая задача детектирования БПЛА на изображениях
с использованием семейства моделей YOLO. В качестве базового решения выбран одноэтапный
детектор YOLOv5: локализация рамок, оценка наличия объекта и принадлежность к классу
вычисляются за один проход нейросети. Это обеспечивает высокую скорость работы, что важно
для обработки видеопотока и применения в системах реального времени.

Существенной частью проекта является подготовка обучающих данных. Для обучения детектора
требуется размеченный датасет: для каждого кадра необходимо задать координаты ограничивающей
рамки. Полностью ручная разметка больших видеоматериалов занимает много времени и часто
даёт неоднородное качество. Поэтому в работе применялся полуавтоматический подход на основе
сегментации и трекинга (модель SAM + инструменты OpenCV), позволяющий ускорить процесс
разметки и снизить количество ошибок оператора.

\section{Цель и задачи работы}

\textbf{Цель работы} — обучить модель YOLOv5 для обнаружения БПЛА на изображениях и провести
оценку качества полученной модели на отложенных данных.

Для достижения цели был выполнен полный цикл работ, характерный для практического ML-проекта:
сбор исходных данных и их приведение к удобному формату, подготовка и проверка разметки,
обучение модели с использованием transfer learning и последующий анализ качества по стандартным
метрикам детекции.

В рамках работы решались следующие задачи:
\begin{itemize}
\item сформировать датасет из видеозаписей (извлечение кадров, фильтрация неудачных кадров);
\item выполнить разметку БПЛА и привести аннотации к формату YOLO;
\item организовать структуру train/val и подготовить конфигурацию \texttt{dataset.yaml};
\item обучить YOLOv5 на пользовательском датасете с предобученными весами;
\item оценить качество по метрикам Precision, Recall, mAP и по графикам \texttt{val.py};
\item выполнить тестовую детекцию и оценить пригодность модели для практического применения.
\end{itemize}

\section{Теоретические сведения}

\subsection{Свёрточные нейронные сети}

Свёрточные нейронные сети (CNN) являются базовой архитектурой для обработки изображений.
Главная причина их эффективности заключается в том, что изображение рассматривается как
данные с пространственной структурой, а признаки извлекаются локально, постепенно усложняясь
от слоя к слою. На ранних слоях сеть выделяет простые границы и текстуры, а на глубоких —
композиции признаков, соответствующие частям объекта и его форме.

Ключевой операцией CNN является свёртка — применение обучаемого фильтра к локальному участку.
Для входного тензора $I(x,y,c)$ выход одной карты признаков можно записать:
\[
F(x,y)=\sum_{i=1}^{k}\sum_{j=1}^{k}\sum_{c}W(i,j,c)\cdot I(x+i,y+j,c)+b,
\]
где $W$ — ядро свёртки размером $k\times k$, $b$ — смещение. После свёртки применяется
нелинейность (часто ReLU: $f(x)=\max(0,x)$), а также операции понижения размерности
(например, max-pooling). Это уменьшает вычислительную сложность и повышает устойчивость к
малому сдвигу объекта.

На практике важную роль играет баланс между детализацией признаков и вычислительными
затратами. Для детекции мелких объектов (БПЛА на дальних дистанциях) особенно важно сохранять
достаточное разрешение признаков и использовать многомасштабные представления.

\subsection{Задача детекции объектов}

Детекция объектов отличается от классификации тем, что требуется не только определить класс,
но и локализовать объект. Результат детекции представляется набором рамок:
\[
B=\{(x,y,w,h,c,p)\},
\]
где $(x,y)$ — центр рамки, $w,h$ — ширина и высота, $c$ — класс, $p$ — уверенность (confidence).

Качество локализации оценивают по метрике IoU (Intersection over Union):
\[
IoU=\frac{S_{intersection}}{S_{union}}.
\]
Чем ближе IoU к 1, тем точнее предсказанная рамка совпадает с истинной. Поскольку детектор
может выдать несколько пересекающихся рамок для одного объекта, применяется подавление
немаксимумов (NMS): оставляется рамка с максимальной уверенностью, а остальные удаляются,
если их IoU превышает заданный порог. NMS позволяет уменьшить число дублей и улучшает
интерпретируемость результата.

\subsection{Принцип работы YOLOv5 и метрики качества}

YOLOv5 относится к одноэтапным детекторам. В типовой постановке модель предсказывает:
координаты рамки, objectness (вероятность наличия объекта) и вероятность класса. За счёт
такого подхода достигается высокая скорость. Для практической задачи детекции БПЛА это важно,
так как модель должна обрабатывать видеопоток и выдавать результат без существенной задержки.

Для оценки качества детекции обычно используют:
\[
Precision=\frac{TP}{TP+FP}, \qquad Recall=\frac{TP}{TP+FN},
\]
где $TP$ — верные детекции, $FP$ — ложные срабатывания, $FN$ — пропуски. На практике порог
уверенности (confidence threshold) управляет компромиссом между Precision и Recall: увеличение
порога обычно повышает Precision, но может снижать Recall.

Интегральной метрикой является mAP (mean Average Precision). В отчётах часто приводят:
mAP@0.5 (фиксированный порог IoU=0.5) и mAP@0.5:0.95 (усреднение по нескольким порогам IoU).
В данной работе дополнительно анализируются кривые зависимости метрик от порога уверенности
и PR-кривая, что позволяет более осмысленно подобрать рабочие параметры детекции.

\section{Подготовка и анализ данных}

Исходные данные представляли собой видеозаписи с БПЛА. Для обучения детектора видеоряд был
преобразован в набор кадров, поскольку YOLOv5 обучается на отдельных изображениях. На этом
этапе важно контролировать качество исходных кадров: слишком размытые кадры, сильные засветки,
переэкспонированные сцены и кадры без объектов ухудшают обучение и могут увеличить долю
ложных срабатываний.

Разметка выполнялась в полуавтоматическом режиме. Идея метода заключается в следующем:
на первом кадре объект сегментируется (SAM), далее по последовательности кадров объект
отслеживается трекером OpenCV, а оператор при необходимости исправляет положение рамки.
Такой подход позволяет существенно ускорить подготовку датасета по сравнению с полностью
ручной разметкой, а также обеспечивает более равномерное качество аннотаций в пределах
одной видеосцены.

Финальные рамки конвертировались в формат YOLO (нормированные координаты), что важно для
корректной работы пайплайна обучения и последующей валидации.

\subsection{Структура датасета и формат разметки}

Датасет организован в стандартном виде для YOLOv5:
\begin{verbatim}
dataset/
├── train/images, train/labels
├── val/images,   val/labels
└── dataset.yaml
\end{verbatim}

Каждому изображению соответствует файл разметки \texttt{.txt} с тем же именем. Внутри файла
каждая строка задаёт один объект:
\[
\langle class\_index \rangle\ \langle x_{center} \rangle\ \langle y_{center} \rangle\ \langle w \rangle\ \langle h \rangle,
\]
где координаты нормализованы относительно ширины и высоты изображения. Нормализация делает
формат независимым от конкретного разрешения, а также упрощает масштабирование изображений
на этапе обучения.

Для контроля корректности разметки полезно выборочно визуализировать рамки поверх изображений
и проверять отсутствие систематических ошибок: перепутанных осей, неправильных размеров,
смещённого центра и т.п.

\subsection{Предобработка и разбиение}

Изображения приведены к разрешению Full HD ($1920\times1080$), что особенно актуально для
мелких объектов: при низком разрешении БПЛА может занимать слишком мало пикселей, и модель
будет хуже выделять его признаки.

Данные разделены на обучающую и валидационную выборки в пропорции примерно 80/20.
Валидационная часть используется для объективной оценки качества по ходу обучения и позволяет
контролировать переобучение. Важно, чтобы валидация не содержала кадров, слишком близких к
обучающим (например, соседних кадров из той же сцены), иначе метрики могут оказаться
завышенными. В идеальном случае разделение делают по видеосценам.

\subsection{Статистика разметки датасета}

Анализ распределения центров и размеров рамок позволяет понять характер данных и возможные
источники смещения. На рис.~\ref{fig:labels} видно, что класс один (\texttt{drone}), а большинство объектов
имеет малые размеры по ширине и высоте. Это соответствует реальной постановке задачи: БПЛА
часто наблюдаются на дальних дистанциях и занимают небольшую часть кадра.

Также заметно, что центры объектов чаще встречаются ближе к центру изображения. Такая
особенность типична для кадров, где оператор (или система наведения) старается удерживать цель
в области прицела. С одной стороны, это помогает обучению на «типичном» сценарии, с другой —
может снижать обобщающую способность модели для случаев, когда объект появляется у краёв кадра.
Одним из способов уменьшить эффект является добавление более разнообразных сцен и аугментаций.

\begin{figure}[H]
\centering
\includegraphics[width=0.92\textwidth]{labels.jpg}
\caption{Статистика разметки: количество объектов по классу и распределение центров/размеров рамок}
\label{fig:labels}
\end{figure}

На рис.~\ref{fig:corr} приведена коррелограмма параметров разметки. По ней можно оценить
взаимосвязь ширины и высоты рамок, а также характер распределений $x$, $y$, $w$, $h$.
Корреляция между $w$ и $h$ ожидаема: при изменении расстояния до объекта его размеры в кадре
обычно изменяются согласованно. Такие графики помогают выявлять выбросы (слишком большие рамки,
аномальные соотношения сторон), которые часто являются следствием ошибок разметки.

\begin{figure}[H]
\centering
\includegraphics[width=0.92\textwidth]{labels_correlogram.jpg}
\caption{Коррелограмма параметров разметки ($x$, $y$, $w$, $h$) и их распределения}
\label{fig:corr}
\end{figure}

\FloatBarrier

\section{Обучение модели YOLOv5}

Обучение выполнялось с использованием репозитория Ultralytics YOLOv5 и вычислений на GPU.
Чтобы не обучать модель «с нуля», применялся transfer learning: стартовые веса брались от модели,
предварительно обученной на датасете COCO (например, \texttt{yolov5x.pt}). Это позволяет быстрее
сойтись к хорошему решению, поскольку сеть уже содержит универсальные визуальные признаки
(контуры, формы, текстуры), и в ходе дообучения требуется «подстроить» модель под конкретный
класс БПЛА.

Важный практический момент — выбор размера входного изображения. Для мелких объектов увеличение
\texttt{img} обычно даёт выигрыш в качестве, так как объект представлен большим числом пикселей.
Однако это повышает нагрузку на видеопамять и снижает скорость. В данной работе использовался
размер \texttt{img=1920} как компромисс в пользу качества детекции.

Пример команды запуска обучения:
\begin{verbatim}
python train.py --img 1920 --batch 8 --epochs 50 \
--data dataset.yaml --weights yolov5x.pt
\end{verbatim}

В ходе обучения контролировались функции потерь (локализация рамки, objectness и классификация),
а также метрики Precision/Recall/mAP на валидационной выборке. По итогам сохранялись веса
\texttt{best.pt} (лучшие по качеству на валидации) и \texttt{last.pt} (последние веса).
Дополнительно YOLOv5 формирует графики обучения, которые удобно прикладывать к отчёту
(динамика loss и рост метрик).

\section{Проверка модели и обсуждение результатов}

После обучения модель тестировалась на отложенных изображениях с использованием скрипта
\texttt{detect.py}. Результаты детекции сохранялись в виде изображений с рамками и текстовых файлов
с координатами предсказанных объектов. Такой формат удобен для дальнейшего анализа: можно
сопоставлять предсказания с истинной разметкой, оценивать типовые ошибки и подбирать
рабочий порог уверенности.

Пример команды:
\begin{verbatim}
python detect.py --source dataset/test/images --weights runs/train/exp/weights/best.pt \
--img 1920 --save-txt --save-img
\end{verbatim}

По наблюдениям модель демонстрировала уверенную детекцию дронов, включая сложные случаи:
малый размер объекта, неоднородный фон, частичная окклюзия. Типовые причины ошибок в подобных
задачах — это очень мелкие объекты, низкий контраст и наличие фоновых элементов, визуально
похожих на цель. Улучшение качества возможно за счёт расширения датасета (новые сцены и условия),
а также подбора гиперпараметров и аугментаций.

\subsection{Результаты валидации (скрипт \texttt{val.py})}

Для количественной оценки качества обученной модели была выполнена валидация с помощью
скрипта \texttt{val.py}, который автоматически строит матрицу ошибок и набор стандартных кривых
качества детекции.

На рис.~\ref{fig:confmat} приведена матрица ошибок. В задаче с одним классом (\texttt{drone})
матрица может выглядеть «упрощённой», так как основные события относятся к единственной категории,
а строка/столбец \texttt{background} отражают вклад пропусков и ложных срабатываний.
Поэтому для более информативной оценки дополнительно анализируются PR-кривая и зависимости
метрик от порога уверенности.

\begin{figure}[H]
\centering
\includegraphics[width=0.92\textwidth]{confusion_matrix.png}
\caption{Матрица ошибок (валидация \texttt{val.py})}
\label{fig:confmat}
\end{figure}

На рис.~\ref{fig:valcurves} показаны кривые качества: зависимости F1, Precision и Recall от порога
уверенности, а также PR-кривая. По PR-кривой видно, что качество детекции высокое:
для класса \texttt{drone} получено \textbf{mAP@0.5 $\approx 0.995$}. Такое значение означает, что в рамках
валидационной выборки модель стабильно локализует объект и даёт высокую уверенность предсказаний.

С практической точки зрения порог уверенности выбирают как компромисс. Если важнее минимизировать
ложные срабатывания (например, в системе тревоги), порог увеличивают, ориентируясь на рост Precision.
Если важнее не пропускать цели, порог уменьшают, повышая Recall. Часто используют максимум кривой F1
как «универсальную» точку, где баланс Precision/Recall наиболее равномерный.

\begin{figure}[H]
\centering

\begin{subfigure}{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{F1_curve.png}
\caption{Зависимость F1 от порога уверенности}
\end{subfigure}
\hfill
\begin{subfigure}{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{P_curve.png}
\caption{Зависимость Precision от порога уверенности}
\end{subfigure}

\vspace{0.6em}

\begin{subfigure}{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{R_curve.png}
\caption{Зависимость Recall от порога уверенности}
\end{subfigure}
\hfill
\begin{subfigure}{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{PR_curve.png}
\caption{PR-кривая и значение mAP@0.5}
\end{subfigure}

\caption{Кривые качества по результатам валидации (\texttt{val.py})}
\label{fig:valcurves}
\end{figure}

\FloatBarrier

\section*{Выводы}
\addcontentsline{toc}{section}{Выводы}

В ходе работы был выполнен полный цикл обучения детектора YOLOv5 для обнаружения БПЛА на изображениях:
подготовлены исходные данные, сформирован размеченный датасет, организована структура train/val и выполнено
обучение с использованием предобученных весов. Проведён анализ разметки показал, что большинство объектов
являются «мелкими», что подтверждает актуальность выбора высокой входной детализации и многомасштабного
подхода YOLO.

По результатам валидации модель демонстрирует высокие показатели качества (по PR-кривой получено
mAP@0.5 $\approx 0.995$). Это означает, что на данных, близких к обучающим/валидационным, модель уверенно
локализует БПЛА и показывает высокий баланс точности и полноты при корректном выборе порога уверенности.

Дальнейшее улучшение качества возможно за счёт расширения и усложнения датасета (новые сцены, разные погодные
условия, различные дальности и ракурсы), а также за счёт более строгого разделения данных по сценам и проверки
на независимых видеоматериалах, чтобы исключить завышение метрик из-за близких кадров.

\newpage
\section*{Список используемых источников}
\addcontentsline{toc}{section}{Список используемых источников}

\begin{enumerate}
\item Обучение YOLOv5 на кастомном датасете / Habr \\
\url{https://habr.com/en/articles/733536/}
\item Документация Ultralytics YOLOv5 \\
\url{https://docs.ultralytics.com/ru/yolov5/tutorials/train_custom_data/}
\item Метрики производительности YOLO \\
\url{https://docs.ultralytics.com/ru/guides/yolo-performance-metrics/}
\end{enumerate}

\end{document}
