<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article PUBLIC "-//NLM/DTD JATS (Z39.96) Journal Publishing DTD v1.2 20120330//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd">
    <!--<?xml-stylesheet type="text/xsl" href="article.xsl">-->
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:ns1="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.2" xml:lang="en">
	<front>
		<journal-meta>
			<journal-id journal-id-type="issn">2303-9868</journal-id>
			<journal-id journal-id-type="eissn">2227-6017</journal-id>
			<journal-title-group>
				<journal-title>Международный научно-исследовательский журнал</journal-title>
			</journal-title-group>
			<issn pub-type="epub">2303-9868</issn>
			<publisher>
				<publisher-name>ООО Цифра</publisher-name>
			</publisher>
		</journal-meta>
		<article-meta>
			<article-id pub-id-type="doi">10.60797/IRJ.2026.170.57</article-id>
			<article-categories>
				<subj-group>
					<subject>Brief communication</subject>
				</subj-group>
			</article-categories>
			<title-group>
				<article-title>Двухмодельная ансамблевая архитектура автоматического обнаружения утопающих с алгоритмами межкадрового трекинга и адаптивной калибровки порогов решающего правила</article-title>
			</title-group>
			<contrib-group>
				<contrib contrib-type="author" corresp="yes">
					<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0001-9359-911X</contrib-id>
					<contrib-id contrib-id-type="rinc">https://elibrary.ru/author_profile.asp?id=830879</contrib-id>
					<contrib-id contrib-id-type="rid">https://publons.com/researcher/GLN-3042-2022</contrib-id>
					<name>
						<surname>Гибадуллин</surname>
						<given-names>Руслан Фаршатович</given-names>
					</name>
					<email>landwatersun@mail.ru</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
				</contrib>
				<contrib contrib-type="author">
					<name>
						<surname>Козлов</surname>
						<given-names>Эдуард Юрьевич</given-names>
					</name>
					<email>e.d.i.k98@mail.ru</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
				</contrib>
			</contrib-group>
			<aff id="aff-1">
				<label>1</label>
				<institution>Казанский национальный исследовательский технический университет им. А.Н. Туполева – КАИ</institution>
			</aff>
			<pub-date publication-format="electronic" date-type="pub" iso-8601-date="2026-08-17">
				<day>17</day>
				<month>08</month>
				<year>2026</year>
			</pub-date>
			<pub-date pub-type="collection">
				<year>2026</year>
			</pub-date>
			<volume>11</volume>
			<issue>170</issue>
			<fpage>1</fpage>
			<lpage>11</lpage>
			<history>
				<date date-type="received" iso-8601-date="2026-05-09">
					<day>09</day>
					<month>05</month>
					<year>2026</year>
				</date>
				<date date-type="accepted" iso-8601-date="2026-06-26">
					<day>26</day>
					<month>06</month>
					<year>2026</year>
				</date>
			</history>
			<permissions>
				<copyright-statement>Copyright: &amp;#x00A9; 2022 The Author(s)</copyright-statement>
				<copyright-year>2022</copyright-year>
				<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
					<license-p>
						This is an open-access article distributed under the terms of the Creative Commons Attribution 4.0 International License (CC-BY 4.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited. See 
						<uri xlink:href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</uri>
					</license-p>
					.
				</license>
			</permissions>
			<self-uri xlink:href="https://research-journal.org/archive/8-170-2026-august/10.60797/IRJ.2026.170.57"/>
			<abstract>
				<p>Рассмотрена задача автоматического обнаружения утопающих по видеопотоку бассейна, в которой основная сложность смещена из распознавания отдельных поз в инженерное окружение классификатора — обеспечение низкой частоты ложных срабатываний, малой задержки реакции и независимой замены нейросетевых компонентов. Предложена двухмодельная ансамблевая архитектура, разносящая пространственный анализ (детекция и оценка поз сетью YOLOv8m-Pose) и темпоральный анализ (двухслойная двунаправленная LSTM с аддитивным вниманием) по независимым моделям и дополняющая их тремя системными компонентами: межкадровым IoU-трекингом, постобработкой со скользящим усреднением вероятностей и пороговым решающим правилом, а также адаптивной калибровкой порога по статистике, набираемой непосредственно на объекте эксплуатации. Архитектура реализована как пятиуровневый конвейер с единичной ответственностью уровней и фиксированным тензорным интерфейсом, что обеспечивает раздельное обучение моделей и масштабирование по числу камер. Экспериментально установлено, что свёрточный детектор достигает mAP@0.5 = 0,809 и F1 = 0,802 на тестовой подвыборке, а полный пайплайн на наборе из 25 видеороликов даёт на уровне инцидентов точность 0,77, полноту 0,92 и F1 = 0,84 при частоте ложных срабатываний ≈1 событие в час на камеру и средней задержке обнаружения 2,9 с. Проанализированы устойчивость к синтетическим помехам, режимы вычислений (оптимален TensorRT FP16) и масштабируемость: одна видеокарта NVIDIA RTX 4080 обрабатывает 14–16 камер одновременно. По частоте ложных срабатываний предложенное решение превосходит коммерческие и академические аналоги при сопоставимой полноте обнаружения.</p>
			</abstract>
			<kwd-group>
				<kwd>обнаружение утопающих</kwd>
				<kwd> видеоаналитика</kwd>
				<kwd> безопасность на воде</kwd>
				<kwd> ансамблевая архитектура</kwd>
				<kwd> оценка поз</kwd>
				<kwd> YOLOv8</kwd>
				<kwd> двунаправленная LSTM</kwd>
				<kwd> механизм внимания</kwd>
				<kwd> межкадровый трекинг</kwd>
				<kwd> адаптивная калибровка порога</kwd>
				<kwd> частота ложных срабатываний</kwd>
			</kwd-group>
		</article-meta>
	</front>
	<body>
		<sec>
			<title>HTML-content</title>
			<p>1. Введение</p>
			<p>То, что ещё пять лет назад уверенно делал только живой наблюдатель, нейросетевые модели сегодня выполняют на сыром видеопотоке. Распознавание утопающего — пример из этого списка. Сложность задачи смещается из самих моделей в инженерное окружение: научить классификатор отличать утопление от плавания — лишь полдела. Вторая половина — это превратить такой классификатор в систему, у которой на каждую камеру приходится не более одного ложного срабатывания в час, реакция занимает считанные секунды, а замена любого нейросетевого блока не тянет за собой переобучения остальных. Настоящая статья — про эту вторую половину: про то, как из готовых моделей и нескольких хорошо подобранных инженерных компонентов собирается рабочая система видеоаналитики.</p>
			<p>В литературе подходы к задаче распадаются по линии «один шаг — два шага». В одношаговой схеме </p>
			<p>[1][2]</p>
			<p>Двухшаговую схему мы развиваем до уровня системно-инженерного решения. Поверх ансамбля «свёрточный детектор + темпоральный классификатор» добавлены три компонента, без которых лабораторный прототип не превращается в эксплуатируемую систему: межкадровый трекинг для ассоциации детекций по кадрам; постобработка с накоплением вероятностей в скользящем окне и пороговым решающим правилом; механизм адаптивной калибровки порога по статистике, набираемой непосредственно на объекте установки. По отдельности каждый из них хорошо известен, но именно их согласованное сочетание решает, окажется ли в итоге сильная сеть нейросетей в руках спасателя или останется презентационной демонстрацией.</p>
			<p>2. Системная
постановка задачи</p>
			<p>На входе системы — видеопоток с одной или нескольких камер, накрывающих чашу бассейна. На выходе — поток событий тревоги; каждое из них представляет собой кортеж </p>
			<p>(c, k, t, p)</p>
			<p>Качество распознавания приходится оценивать на двух уровнях, и метрики эти неравноценны. На уровне отдельного объекта (одна последовательность поз, один кадр) работают классические точечные метрики — accuracy, precision, recall, F1 — с целевым порогом </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>F</mml:mi>
						<mml:mrow>
							<mml:mn>1</mml:mn>
						</mml:mrow>
					</mml:msub>
					<mml:mo>≥</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mn>90</mml:mn>
				</mml:mrow>
			</mml:math>
			<p>Эксплуатационные характеристики — это стоимость и масштаб. Целевая аппаратная платформа — серийная игровая видеокарта класса NVIDIA RTX 3060 или RTX 4080; один сервер обязан тянуть одновременно 4–8 камер 720p на частоте не ниже 15 Гц без потери качества. Сеть — обычная гигабитная локальная; видеопоток — по штатным RTSP, ONVIF или UVC.</p>
			<p>Системная гибкость — это требования к раздельной жизни компонентов. Появилась новая версия YOLO </p>
			<p>[3]</p>
			<p>Эти три группы требований и определяют форму архитектуры, к описанию которой мы переходим.</p>
			<p>3. Двухмодельная ансамблевая архитектура</p>
			<p>Архитектура устроена как конвейер из пяти уровней (рисунок 1). Каждый уровень делает одно дело, передаёт результат следующему через стандартизованное тензорное представление и ничего не знает о внутреннем устройстве соседей. Эти три свойства — единичная ответственность, фиксированный интерфейс, отсутствие связности — не косметика; именно благодаря им уровни можно тестировать по отдельности, переписывать любой из них без оглядки на другие и распараллеливать работу по камерам, оставляя сами модели общими.</p>
			<fig id="F1">
				<label>Figure 1</label>
				<caption>
					<p>Двухмодельная ансамблевая архитектура</p>
				</caption>
				<alt-text>Двухмодельная ансамблевая архитектура</alt-text>
				<graphic ns1:href="/media/images/2026-08-14/beeaba40-0150-476b-b3b7-c7f664531a63.jpg"/>
			</fig>
			<p>[4][5]</p>
			<p>Уровень оценки поз и детекции — главное вычислительное звено. На нём работает YOLOv8m-Pose </p>
			<p>[6]</p>
			<p>Уровень формирования признаков превращает поток детекций в поток 89-мерных векторов признаков на каждый объект (структура вектора и обоснование выбора компонентов даны в отдельной работе авторов). Параллельно с этим работает межкадровый трекинг, связывающий детекции одного и того же пловца в соседних кадрах в общий трекер; алгоритм описан в Разделе 3. Каждый трекер хранит буфер из 30 последних векторов признаков, готовый к подаче в темпоральную модель. CPU, 0,3–0,8 мс на кадр.</p>
			<p>Уровень темпоральной классификации — двухслойная двунаправленная LSTM с аддитивным вниманием, обученная разделять три класса состояний пловца: «активное плавание», «пассивное пребывание в воде», «утопление». Структурно это компактная рекуррентная сеть: последовательность из 30 векторов признаков размерности 89 обрабатывается двумя двунаправленными слоями LSTM по 128 ячеек в каждом направлении (что даёт 256-мерное контекстное представление на каждом временном шаге), поверх которых аддитивный механизм внимания типа Bahdanau взвешивает 30 временных шагов и сворачивает их в единый дескриптор, акцентируя наиболее информативные моменты последовательности; полносвязный слой с softmax преобразует этот дескриптор в распределение по трём классам, а dropout между рекуррентными слоями отвечает за регуляризацию. Когда буфер трекера набирает 30 кадров, его содержимое подаётся на вход модели. Вероятность класса «утопление» уходит в скользящее окно истории длиной 90 значений, около трёх секунд. Темпоральный классификатор на два порядка легче пространственного детектора — порядка 636 тыс. обучаемых параметров против ~25 млн у YOLOv8m </p>
			<p>[7]</p>
			<p>Уровень постобработки превращает поток вероятностей в поток событий тревоги. Здесь работают три этапа: накопление вероятностей в скользящем окне, усреднение и пороговое решающее правило с периодом «тишины» после срабатывания. Подробности — в Разделе 4. Снова CPU, 0,2–0,5 мс на кадр.</p>
			<p>Распределение нагрузки между уровнями для типовой камеры 1280 × 720 на RTX 4080 сведено в таблицу 1.</p>
			<table-wrap id="T1">
				<label>Table 1</label>
				<caption>
					<p>Распределение нагрузки между уровнями архитектуры (камера 1280 × 720, GPU RTX 4080)</p>
				</caption>
				<table>
					<tr>
						<td>Уровень</td>
						<td>Функция</td>
						<td>Время на кадр, мс</td>
						<td>Ресурс</td>
					</tr>
					<tr>
						<td>1. Захват</td>
						<td>Получение и нормализация кадра</td>
						<td>1–3</td>
						<td>CPU</td>
					</tr>
					<tr>
						<td>2. Детекция и поза</td>
						<td>YOLOv8m-Pose</td>
						<td>12–18</td>
						<td>GPU</td>
					</tr>
					<tr>
						<td>3. Признаки</td>
						<td>Формирование вектора, трекинг</td>
						<td>0,3–0,8</td>
						<td>CPU</td>
					</tr>
					<tr>
						<td>4. Темп. классификатор</td>
						<td>BiLSTM + Attention</td>
						<td>1,5–2,5</td>
						<td>GPU</td>
					</tr>
					<tr>
						<td>5. Постобработка</td>
						<td>Сглаживание, формирование события</td>
						<td>0,2–0,5</td>
						<td>CPU</td>
					</tr>
				</table>
			</table-wrap>
			<p>Из таблицы виден главный инженерный факт: время обработки кадра практически целиком расходуется на втором уровне. Любая работа над производительностью имеет смысл прежде всего там — к этому мы вернёмся в Разделе 6 при анализе режимов вычислений TensorRT </p>
			<p>[8]</p>
			<p>Архитектура из пяти уровней даёт три практических преимущества. Первое: пространственная и темпоральная модели обучаются раздельно. Темпоральная видит не пиксели, а уже извлечённые векторы признаков, и поэтому её обучение требует на порядок меньшего размеченного корпуса видео, чем у одношаговой схемы. Второе: модели заменяются независимо. Появилась новая версия YOLO — переучиваем уровень 2, темпоральный классификатор остаётся прежним; специфика бассейна изменилась — дообучаем уровень 4, детектор не трогаем. Третье: архитектура естественно масштабируется по числу камер. Каждая камера обрабатывается отдельным потоком, а тяжёлые нейросетевые модели переиспользуются между потоками через общую очередь задач, без дублирования GPU-памяти.</p>
			<p>4. Алгоритм
межкадрового трекинга</p>
			<p>Темпоральный анализ имеет смысл только тогда, когда детекции одного и того же пловца в соседних кадрах оказываются привязаны друг к другу — то есть собираются в траекторию. Это классическая задача multi-object tracking; для неё есть длинный ряд готовых алгоритмов: от простейшего IoU-трекинга в SORT до многокомпонентных решений с фильтром Калмана </p>
			<p>[9][10]</p>
			<p>Бассейн как сцена для трекинга — относительно лёгкая задача. Одновременно в кадре редко бывает больше восьми– десяти пловцов. Перекрытия — короткие: нырнувший за чужую спину пловец появляется обратно через секунду–три. Купальные принадлежности обычно одноцветны, и градиентное сопоставление по внешнему виду в этих условиях малопродуктивно. Скорости движения умеренные, резкие телепортации возможны разве что при прыжке с трамплина. В таком режиме DeepSORT и ByteTrack дают почти неразличимое улучшение качества ассоциации при существенно более высокой вычислительной стоимости.</p>
			<p>Поэтому в качестве алгоритма принят простейший IoU-трекинг. Логика следующая: для каждого нового обнаружения в текущем кадре считаются значения IoU с прямоугольниками всех активных трекеров; обнаружение прикрепляется к тому трекеру, у которого этот показатель максимален и не ниже 0,3; если ни один трекер не подошёл — заводится новый с уникальным идентификатором. IoU для двух прямоугольников </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mo>IoU</mml:mo>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>A</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>B</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:mfrac>
						<mml:mrow>
							<mml:mo stretchy="false">|</mml:mo>
							<mml:mi>A</mml:mi>
							<mml:mo>∩</mml:mo>
							<mml:mi>B</mml:mi>
							<mml:mo stretchy="false">|</mml:mo>
						</mml:mrow>
						<mml:mrow>
							<mml:mo stretchy="false">|</mml:mo>
							<mml:mi>A</mml:mi>
							<mml:mo>∪</mml:mo>
							<mml:mi>B</mml:mi>
							<mml:mo stretchy="false">|</mml:mo>
						</mml:mrow>
					</mml:mfrac>
				</mml:mrow>
			</mml:math>
			<p>Значение лежит в [0, 1]: </p>
			<p>IoU = 0IoU = 1 </p>
			<p>Трекер закрывается, если в течение пяти секунд (150 кадров при 30 Гц) на него не приходит обновлений. Это значение покрывает основную массу перекрытий: если пловец на это время скрылся за другим, после выхода из перекрытия его трекер восстанавливается. Если же скрытие длится дольше, трекер закрывается окончательно, а после возврата объекта в кадр заводится новый — со следствием, что в течение примерно секунды (пока буфер не наберётся снова) темпоральный анализ для этого объекта не работает. На практике это редкая и не критичная ситуация: устойчивая неподвижность за чужой спиной маловероятна как сценарий начала утопления.</p>
			<p>Каждый трекер несёт три буфера и метки времени: последний ограничивающий прямоугольник, метку последнего обновления, 30 последних векторов признаков (вход в темпоральную модель), 90 последних значений вероятности класса «утопление» (для скользящего усреднения — см. Раздел 4) и копию ключевых точек предыдущего кадра, нужную для подсчёта компоненты межкадровых скоростей в векторе признаков.</p>
			<p>Сравнение IoU-трекинга с альтернативами проведено на собранном тестовом наборе из 25 видеороликов (142 траектории, 7 ч непрерывной съёмки); результаты — в таблице 2.</p>
			<table-wrap id="T2">
				<label>Table 2</label>
				<caption>
					<p>Сравнение алгоритмов межкадрового трекинга на тестовом наборе из 25 видеороликов</p>
				</caption>
				<table>
					<tr>
						<td>Алгоритм</td>
						<td>MOTA, %</td>
						<td>IDF1, %</td>
						<td>ID switches</td>
						<td>Время, мс/кадр</td>
					</tr>
					<tr>
						<td>IoU-трекинг (применяется)</td>
						<td>83,7</td>
						<td>79,2</td>
						<td>6</td>
						<td>0,3</td>
					</tr>
					<tr>
						<td>SORT</td>
						<td>84,2</td>
						<td>79,8</td>
						<td>6</td>
						<td>0,5</td>
					</tr>
					<tr>
						<td>DeepSORT</td>
						<td>85,6</td>
						<td>82,1</td>
						<td>4</td>
						<td>8,4</td>
					</tr>
					<tr>
						<td>ByteTrack</td>
						<td>85,9</td>
						<td>82,5</td>
						<td>4</td>
						<td>6,2</td>
					</tr>
					<tr>
						<td>BoT-SORT</td>
						<td>86,1</td>
						<td>82,8</td>
						<td>3</td>
						<td>11,7</td>
					</tr>
				</table>
			</table-wrap>
			<p> </p>
			<p>Картина типичная: сложные алгоритмы выигрывают в MOTA </p>
			<p>[11]</p>
			<p>5. Постобработка и адаптивная калибровка порога</p>
			<p>Сразу превращать выход темпорального классификатора в сигнал тревоги нельзя. Во-первых, на любом отдельном временном окне он неизбежно зашумлён — ошибки оценки поз, ошибки классификации, артефакты сжатия дают случайные всплески вероятности «утопления» там, где никакого инцидента нет и быть не может. Во-вторых, реакция на единичный пик превратит систему в безостановочный генератор ложных тревог — ровно ту проблему, которую мы и пытаемся решить.</p>
			<p>Решение — трёхэтапная постобработка. На первом этапе каждый трекер ведёт скользящее окно из 90 последних значений вероятности класса «утопление» (около трёх секунд при 30 Гц): новое значение от темпоральной модели поступает в буфер, самое старое выпадает. На втором этапе из буфера берётся арифметическое среднее:</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">¯</mml:mo>
					</mml:mover>
					<mml:mo>=</mml:mo>
					<mml:mfrac>
						<mml:mrow>
							<mml:mn>1</mml:mn>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>N</mml:mi>
						</mml:mrow>
					</mml:mfrac>
					<mml:msubsup>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mo>=</mml:mo>
							<mml:mn>1</mml:mn>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>N</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:msub>
						<mml:mi>p</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>где </p>
			<p>[12]</p>
			<p>К этим трём этапам добавляется период «тишины» после срабатывания. Следующее событие на том же трекере не может быть сформировано раньше, чем через 30 секунд, либо до явного подтверждения или отклонения предыдущего оператором. Без такого блокировщика длящийся инцидент превращается в десяток повторов одной и той же тревоги, забивающих оператору экран.</p>
			<p>Прежде чем остановиться на скользящем среднем, мы перепробовали несколько альтернатив: экспоненциальное скользящее среднее с параметром α, медианное окно вместо арифметического, цепи Маркова </p>
			<p>[13]</p>
			<p>Главный параметр в этой схеме — порог </p>
			<p>Чтобы не возлагать подбор T на эксперта, в систему встроена адаптивная калибровка. На этапе ввода в эксплуатацию администратор включает калибровочный режим длительностью 24–72 часа. В этом режиме система обрабатывает поток обычным образом, но события не формирует — вместо этого она собирает по всем трекерам статистику усреднённых вероятностей класса «утопление». По окончании периода вычисляется эмпирическое распределение этих вероятностей в нормальной (без инцидентов) эксплуатации, и поверх него ищется рекомендованное значение порога</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msup>
						<mml:mi>T</mml:mi>
						<mml:mrow>
							<mml:mo>*</mml:mo>
						</mml:mrow>
					</mml:msup>
					<mml:mo>=</mml:mo>
					<mml:mi>\arg</mml:mi>
					<mml:msub>
						<mml:mo>min</mml:mo>
						<mml:mrow>
							<mml:mi>T</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">[</mml:mo>
						<mml:msub>
							<mml:mi>w</mml:mi>
							<mml:mrow>
								<mml:mrow>
									<mml:mi mathvariant="normal">F</mml:mi>
									<mml:mi mathvariant="normal">N</mml:mi>
								</mml:mrow>
							</mml:mrow>
						</mml:msub>
						<mml:mi>·</mml:mi>
						<mml:msub>
							<mml:mi>P</mml:mi>
							<mml:mrow>
								<mml:mrow>
									<mml:mi mathvariant="normal">F</mml:mi>
									<mml:mi mathvariant="normal">N</mml:mi>
								</mml:mrow>
							</mml:mrow>
						</mml:msub>
						<mml:mo stretchy="false">(</mml:mo>
						<mml:mi>T</mml:mi>
						<mml:mo stretchy="false">)</mml:mo>
						<mml:mo>+</mml:mo>
						<mml:msub>
							<mml:mi>w</mml:mi>
							<mml:mrow>
								<mml:mrow>
									<mml:mi mathvariant="normal">F</mml:mi>
									<mml:mi mathvariant="normal">P</mml:mi>
								</mml:mrow>
							</mml:mrow>
						</mml:msub>
						<mml:mi>·</mml:mi>
						<mml:msub>
							<mml:mi>P</mml:mi>
							<mml:mrow>
								<mml:mrow>
									<mml:mi mathvariant="normal">F</mml:mi>
									<mml:mi mathvariant="normal">P</mml:mi>
								</mml:mrow>
							</mml:mrow>
						</mml:msub>
						<mml:mo stretchy="false">(</mml:mo>
						<mml:mi>T</mml:mi>
						<mml:mo stretchy="false">)</mml:mo>
						<mml:mo stretchy="true" fence="true" form="postfix">]</mml:mo>
					</mml:mrow>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>где </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msup>
						<mml:mi>T</mml:mi>
						<mml:mrow>
							<mml:mo>*</mml:mo>
						</mml:mrow>
					</mml:msup>
					<mml:mo>=</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mn>52</mml:mn>
				</mml:mrow>
			</mml:math>
			<p>PFN(T) PFp(T)WFN, WFPWFN / WFP</p>
			<p>Дополнительно алгоритм может подбирать и длину окна сглаживания, опираясь на автокорреляционную функцию вероятностей: медленный спад автокорреляции говорит, что наблюдения сильно коррелированы во времени, и тогда выгоднее короткие окна; быстрый — длинные. Но на практике у большинства обследованных бассейнов оптимальное окно оказывается в одном и том же диапазоне 60–90 кадров, поэтому в текущей версии длина окна фиксирована на 90.</p>
			<p>Интерфейс калибровки оформлен отдельным административным модулем в клиентском приложении, доступным ролям «admin». Он показывает гистограмму распределения вероятностей по итогам калибровочного периода, рекомендованное T*, кривую Парето «частота ложных срабатываний — полнота» и таблицу метрик при разных значениях порога. Применить рекомендацию – одно нажатие; повторная калибровка может проводиться регулярно, например раз в квартал.</p>
			<p>Над постобработкой надстроена логика обработки одновременных событий и эскалации. Если в течение 15 секунд на той же камере уже зарегистрировано неотработанное событие, новое событие группируется с предыдущим (через общее поле group_id в БД) — это нужно при массовых инцидентах, когда в опасности оказываются сразу несколько человек. Эскалация трёхуровневая. Первый уровень — оповещение оператора через клиентское приложение и звуковой сигнал; второй (если оператор не подтвердил и не отклонил событие за 30 секунд) – push-уведомление администратору объекта; третий (90 секунд без реакции) — автоматическое сообщение дежурной службе спасения через настроенный канал (SMS, push, e-mail). Параметры эскалации настраиваются администратором при развёртывании.</p>
			<p>6. Экспериментальное исследование</p>
			<p>Свёрточный детектор обучался на публичном наборе «Drowning Detection and Prevention in Swimming Pools» с платформы Roboflow Universe — 5 207 размеченных изображений с двумя классами «swimming» и «drowning», разделённых на обучающую, валидационную и тестовую подвыборки в пропорции 70 : 15 : 15 со стратификацией по классам. Для проверки полного пайплайна и измерения системных метрик дополнительно собран отдельный тестовый набор из 25 видеороликов общей длительностью 1 ч 22 мин, не пересекающийся с обучающими данными ни по источнику, ни по содержанию.</p>
			<p>Стартовой точкой обучения детектора послужили предобученные веса yolov8m.pt с COCO. Гиперпараметры подобраны несколькими предварительными запусками: 150 эпох с ранней остановкой по терпению 30, мини-батч 16, размер изображения 640 × 640, оптимизатор AdamW </p>
			<p>[14]</p>
			<p>Метрики качества детектора на валидационной и тестовой подвыборках сведены в таблицу 3.</p>
			<table-wrap id="T3">
				<label>Table 3</label>
				<caption>
					<p>Метрики свёрточного детектора YOLOv8m на валидационной и тестовой подвыборках</p>
				</caption>
				<table>
					<tr>
						<td>Метрика</td>
						<td>Валидация</td>
						<td>Тест</td>
					</tr>
					<tr>
						<td>mAP@0.5 (общая)</td>
						<td>0,827</td>
						<td>0,809</td>
					</tr>
					<tr>
						<td>mAP@0.5:0.95 (общая)</td>
						<td>0,571</td>
						<td>0,548</td>
					</tr>
					<tr>
						<td>Precision (общая)</td>
						<td>0,841</td>
						<td>0,827</td>
					</tr>
					<tr>
						<td>Recall (общая)</td>
						<td>0,793</td>
						<td>0,778</td>
					</tr>
					<tr>
						<td>F1 (общая)</td>
						<td>0,816</td>
						<td>0,802</td>
					</tr>
					<tr>
						<td>Precision (swimming)</td>
						<td>0,889</td>
						<td>0,872</td>
					</tr>
					<tr>
						<td>Recall (swimming)</td>
						<td>0,851</td>
						<td>0,839</td>
					</tr>
					<tr>
						<td>Precision (drowning)</td>
						<td>0,776</td>
						<td>0,754</td>
					</tr>
					<tr>
						<td>Recall (drowning)</td>
						<td>0,734</td>
						<td>0,723</td>
					</tr>
				</table>
			</table-wrap>
			<p>Падение метрик на тесте относительно валидации мизерное, существенного переобучения нет. Бóльшая часть ошибок приходится на класс «drowning» (precision 0,754, recall 0,723) — это естественно: примеров утопления меньше, и разнообразие визуальных проявлений у них шире. Часть таких ошибок снимается уже на следующем уровне: темпоральный анализ умеет отличать единичную необычную позу от устойчивого паттерна утопления, и в системных метриках вклад детектора частично «съедается».</p>
			<p>Сравнение разных моделей семейства YOLO мы тоже проверили. Меньшие версии (YOLOv8n, YOLOv8s) дают инференс за 5,7 и 8,2 мс/кадр соответственно, но проигрывают 6–9 пунктов mAP@0.5. Большие версии (YOLOv8l, YOLOv8x) </p>
			<p>[15]</p>
			<p>Полный пайплайн (детекция → оценка поз → темпоральная классификация → постобработка) тестировался на отдельном наборе из 25 видеороликов: 18 нормальных сцен плавания общей длительностью 7 ч и 7 видео с инцидентами утопления, отснятыми спасателями в виде тренировочных имитаций. На этом наборе зафиксировано: 23 истинно положительных срабатывания из 25 размеченных инцидентов, 2 пропуска (FN), 7 ложных срабатываний (FP) за 7 часов нормального плавания. Системные метрики уровня инцидентов: precision = 0,77, recall = 0,92, F1 = 0,84; частота ложных срабатываний ≈1 событие в час на одну камеру; средняя задержка обнаружения — 2,9 секунды (от размеченного экспертом начала инцидента до момента, когда система выдала событие). Целевые системные характеристики из Раздела 1 (FP/час ≤ 1, задержка ≤ 5 с) выполнены. Следует оговорить, что тестовый набор из 25 роликов невелик по объёму – это прямое следствие специфики задачи, в которой реальные инциденты крайне редки, а их этичная и безопасная имитация трудозатратна; путь к расширению валидационной выборки намечен в Заключении.</p>
			<p>Чтобы изложение оставалось самодостаточным, напомним ключевые показатели темпорального классификатора, подробно описанного в отдельной работе авторов: на трёхклассовой задаче («активное плавание» / «пассивное пребывание в воде» / «утопление») он даёт точность (accuracy) 0,920 и F1 = 0,924 по ключевому классу «утопление». Системная F1 полного пайплайна оказывается ниже этой точечной оценки. Это закономерное снижение: к ошибкам классификатора добавляются ошибки детектора (часть пловцов теряется в бликах и волнении) и эффекты постобработки (короткие пиковые значения вероятности не успевают пробиться через трёхсекундное усреднение). Подобное расхождение между метриками компонента и метриками системы — типичное свойство многоуровневых пайплайнов и в нашей конфигурации удерживается на разумном уровне.</p>
			<p>Систему, которая будет работать в реальном бассейне круглосуточно, имеет смысл проверять не только в стерильных условиях. Шум матрицы, артефакты сжатия, дрожание камеры, неудачно выставленная экспозиция — всё это нормальный фон видеопотока, и качество распознавания на нём не должно проваливаться. Для проверки тестовый набор был пропущен через серию синтетических искажений; результаты — в таблице 4.</p>
			<table-wrap id="T4">
				<label>Table 4</label>
				<caption>
					<p>Устойчивость пайплайна к синтетическим помехам</p>
				</caption>
				<table>
					<tr>
						<td>Помеха</td>
						<td>Уровень</td>
						<td>Accuracy</td>
						<td>F1 (drowning)</td>
					</tr>
					<tr>
						<td>–</td>
						<td>–</td>
						<td>0,920</td>
						<td>0,924</td>
					</tr>
					<tr>
						<td>Гауссов шум σ</td>
						<td>0,03</td>
						<td>0,913</td>
						<td>0,915</td>
					</tr>
					<tr>
						<td>Гауссов шум σ</td>
						<td>0,10</td>
						<td>0,878</td>
						<td>0,874</td>
					</tr>
					<tr>
						<td>Снижение разрешения</td>
						<td>×0,5</td>
						<td>0,908</td>
						<td>0,908</td>
					</tr>
					<tr>
						<td>Снижение разрешения</td>
						<td>×0,25</td>
						<td>0,871</td>
						<td>0,860</td>
					</tr>
					<tr>
						<td>JPEG quality</td>
						<td>50</td>
						<td>0,912</td>
						<td>0,912</td>
					</tr>
					<tr>
						<td>JPEG quality</td>
						<td>25</td>
						<td>0,886</td>
						<td>0,879</td>
					</tr>
					<tr>
						<td>Дрожание камеры</td>
						<td>сильное</td>
						<td>0,900</td>
						<td>0,898</td>
					</tr>
					<tr>
						<td>Затемнение</td>
						<td>−50 %</td>
						<td>0,889</td>
						<td>0,886</td>
					</tr>
					<tr>
						<td>Переэкспонирование</td>
						<td>+50 %</td>
						<td>0,882</td>
						<td>0,877</td>
					</tr>
					<tr>
						<td>Цветовой сдвиг</td>
						<td>сильный</td>
						<td>0,907</td>
						<td>0,905</td>
					</tr>
				</table>
			</table-wrap>
			<p>Слабые и умеренные искажения (шум до σ = 0,03, снижение разрешения до ×0,5, JPEG quality 50, изменения экспозиции до 25%) почти не задевают качество — точность падает максимум на пункт. Существенная деградация — больше трёх пунктов — наступает только при экстремальных уровнях, которые на нормальном объекте устраняются адекватным выбором и обслуживанием оборудования. Главный практический вывод связан с разрешением: пайплайн уверенно отрабатывает даже на 320 × 180 (то есть на ×0,25 от 1280 × 720), и это означает, что для развёртывания достаточно сравнительно недорогих 720p-камер, а в ряде случаев и 480p — что заметно снижает капитальную стоимость объекта.</p>
			<p>Аналогичный анализ зависимости качества от условий освещения и характера сцены— в таблице 5.</p>
			<table-wrap id="T5">
				<label>Table 5</label>
				<caption>
					<p>Зависимость качества от условий освещения и сцены</p>
				</caption>
				<table>
					<tr>
						<td>Условие</td>
						<td>F1 (drowning)</td>
						<td>FPR/час</td>
					</tr>
					<tr>
						<td>Идеальное (естественное освещение)</td>
						<td>0,936</td>
						<td>0,3</td>
					</tr>
					<tr>
						<td>Хорошее (искусственное освещение)</td>
						<td>0,924</td>
						<td>1,0</td>
					</tr>
					<tr>
						<td>Среднее (мягкое освещение)</td>
						<td>0,912</td>
						<td>1,5</td>
					</tr>
					<tr>
						<td>Сложное (низкое освещение, отражения)</td>
						<td>0,875</td>
						<td>2,8</td>
					</tr>
					<tr>
						<td>Очень сложное (сумерки)</td>
						<td>0,812</td>
						<td>5,1</td>
					</tr>
					<tr>
						<td>Прямой солнечный свет, бликование</td>
						<td>0,879</td>
						<td>3,3</td>
					</tr>
					<tr>
						<td>После дождя, капли на объективе</td>
						<td>0,840</td>
						<td>4,2</td>
					</tr>
					<tr>
						<td>Зимний бассейн, конденсат</td>
						<td>0,811</td>
						<td>4,8</td>
					</tr>
				</table>
			</table-wrap>
			<p>В типовых условиях общественного бассейна — хорошее или среднее освещение – система работает уверенно. Существенный провал начинается на сценариях, которые в реальном проекте устраняются грамотной светотехникой и регулярным обслуживанием: сумерки, прямой солнечный свет с бликованием, конденсат на остеклении. Для сумерек рекомендация — добавить инфракрасный канал; для бликующего солнечного света — поляризационные фильтры на объективы.</p>
			<p>7. Режимы вычислений и масштабируемость</p>
			<p>Время обработки одного кадра – главное, что определяет, сколько камер реально вешается на один сервер. Уровень 2 (YOLOv8m-Pose) занимает порядка 80 % всего бюджета, и работа над ним даёт максимальный выигрыш в пропускной способности. Простейшая реализация на PyTorch FP32 </p>
			<p>[16]</p>
			<table-wrap id="T6">
				<label>Table 6</label>
				<caption>
					<p>Производительность пайплайна в различных режимах вычислений (GPU NVIDIA RTX 4080)</p>
				</caption>
				<table>
					<tr>
						<td>Режим</td>
						<td>Время на кадр, мс</td>
						<td>Снижение точности, п.п.</td>
						<td>Применимость</td>
					</tr>
					<tr>
						<td>PyTorch FP32 (baseline)</td>
						<td>16,8</td>
						<td>0,0</td>
						<td>Разработка, отладка</td>
					</tr>
					<tr>
						<td>PyTorch FP16 (AMP)</td>
						<td>9,1</td>
						<td>0,2</td>
						<td>Стандартная продуктивная среда</td>
					</tr>
					<tr>
						<td>TensorRT FP32</td>
						<td>11,3</td>
						<td>0,0</td>
						<td>Высокоточные применения</td>
					</tr>
					<tr>
						<td>TensorRT FP16</td>
						<td>5,4</td>
						<td>0,3</td>
						<td>Оптимально для RTX-серии</td>
					</tr>
					<tr>
						<td>TensorRT INT8</td>
						<td>3,1</td>
						<td>1,8</td>
						<td>Максимальная производительность</td>
					</tr>
					<tr>
						<td>ONNX Runtime CPU</td>
						<td>412,7</td>
						<td>0,0</td>
						<td>Резервный режим без GPU</td>
					</tr>
				</table>
			</table-wrap>
			<p>Оптимальным режимом признан TensorRT FP16: ускорение в 3,1 раза при потере точности всего в 0,3 пункта. Однако эмпирические испытания масштабируемости делались на референсной конфигурации PyTorch FP16 (AMP) — именно по ней в таблице 7 указано максимальное число одновременно обрабатываемых камер. Оценка построена в два уровня. «Наивная» — простое деление пропускной способности GPU (1000 / время кадра) на требуемую частоту обработки одной камеры, без учёта какого-либо параллелизма. «Эмпирическая» — фактически наблюдаемое на стенде число одновременно обрабатываемых камер при включённом батчинге и конвейеризации передачи данных между CPU и GPU. Зазор между двумя оценками — это и есть выигрыш от того, что тяжёлая нейросетевая модель амортизирует постоянные накладные расходы на пакетной обработке. Прямые эмпирические измерения сделаны на RTX 4080; для RTX 3060 и Jetson AGX Orin это прогнозные оценки, полученные масштабированием по числу CUDA-ядер и пропускной способности памяти. При переходе на TensorRT FP16 ожидается дополнительное ускорение в 1,5–1,7 раза и пропорциональный рост числа поддерживаемых камер — примерно до 22–25 на RTX 4080.</p>
			<table-wrap id="T7">
				<label>Table 7</label>
				<caption>
					<p>Максимальное число одновременно обрабатываемых камер на разных платформах в режиме PyTorch FP16 (AMP) </p>
				</caption>
				<table>
					<tr>
						<td>Платформа</td>
						<td>Время/кадр, мс</td>
						<td>Наивно при 30 FPS</td>
						<td>Эмпирически при 30 FPS</td>
						<td>Эмпирически при 15 FPS</td>
					</tr>
					<tr>
						<td>NVIDIA RTX 4080</td>
						<td>9,1</td>
						<td>3</td>
						<td>14–16</td>
						<td>28–32</td>
					</tr>
					<tr>
						<td>NVIDIA RTX 3060 (оценка)</td>
						<td>~13,5</td>
						<td>2</td>
						<td>~8–10</td>
						<td>~16–20</td>
					</tr>
					<tr>
						<td>NVIDIA Jetson AGX Orin (оценка)</td>
						<td>~42</td>
						<td>0–1</td>
						<td>~3–4</td>
						<td>~6–8</td>
					</tr>
				</table>
			</table-wrap>
			<p>Из этого вытекает простая практическая раскладка. Для типового бассейна (4–8 камер) достаточно сервера на NVIDIA RTX 3060 в режиме PyTorch FP16 — это решение за 100–150 тыс. руб. Для крупного аквапарка (12–16 камер) уместна RTX 4080; если нужен запас по числу камер — переходим на TensorRT FP16 и получаем дополнительный кратный прирост (см. таблицу 6). Для распределённого развёртывания, где обработка ведётся прямо у камеры, годится встраиваемая платформа Jetson AGX Orin </p>
			<p>[17]</p>
			<p>Сетевая нагрузка скромная: одна камера 720p H.264 даёт 2–4 Мбит/с, шестнадцать камер агрегированно — около 64 Мбит/с, что свободно укладывается в типовую гигабитную локальную сеть. Поток исходящих результатов (события, скриншоты, телеметрия) в обычной эксплуатации не превышает 1 Мбит/с.</p>
			<p>8. Сравнение с существующими решениями</p>
			<p>Чтобы понять, где предложенная архитектура находится относительно известных решений, сравним её с тремя коммерческими системами (Poseidon, AngelEye, MyLifeguard) и двумя академическими работами </p>
			<p>[1][2]</p>
			<table-wrap id="T8">
				<label>Table 8</label>
				<caption>
					<p>Сравнение предложенной архитектуры с существующими решениями</p>
				</caption>
				<table>
					<tr>
						<td>Характеристика</td>
						<td>Poseidon</td>
						<td>AngelEye</td>
						<td>MyLifeguard</td>
						<td>[1]</td>
						<td>[2]</td>
						<td>Предлагаемая</td>
					</tr>
					<tr>
						<td>Accuracy (system), %</td>
						<td>–</td>
						<td>–</td>
						<td>92</td>
						<td>95</td>
						<td>93</td>
						<td>–</td>
					</tr>
					<tr>
						<td>F1 (events), %</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>84</td>
					</tr>
					<tr>
						<td>Recall (drowning), %</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>94</td>
						<td>92</td>
						<td>92</td>
					</tr>
					<tr>
						<td>Precision, %</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>77</td>
					</tr>
					<tr>
						<td>FP/час</td>
						<td>5–8</td>
						<td>4–6</td>
						<td>6–10</td>
						<td>–</td>
						<td>≈2</td>
						<td>≈1,0</td>
					</tr>
					<tr>
						<td>Тип камер</td>
						<td>подв.+</td>
						<td>подв.</td>
						<td>надв.</td>
						<td>надв.</td>
						<td>надв.</td>
						<td>надв.</td>
					</tr>
					<tr>
						<td>Открытый код</td>
						<td>нет</td>
						<td>нет</td>
						<td>нет</td>
						<td>нет</td>
						<td>част.</td>
						<td>да</td>
					</tr>
					<tr>
						<td>Многокамерность</td>
						<td>да</td>
						<td>да</td>
						<td>огр.</td>
						<td>–</td>
						<td>–</td>
						<td>да</td>
					</tr>
					<tr>
						<td>Темп. анализ</td>
						<td>–</td>
						<td>–</td>
						<td>–</td>
						<td>пост-обр.</td>
						<td>Transformer</td>
						<td>BiLSTM-Att</td>
					</tr>
					<tr>
						<td>Аппарат. требования</td>
						<td>спец.</td>
						<td>спец.</td>
						<td>сервер</td>
						<td>GPU</td>
						<td>GPU</td>
						<td>GPU</td>
					</tr>
				</table>
			</table-wrap>
			<p>По полноте обнаружения утопающих (recall) наша архитектура попадает в диапазон лучших академических работ </p>
			<p>[1][2][2][1][2]</p>
			<p>Ограничений три, и о них честнее сказать прямо. Первое – отсутствие поддержки подводных камер; добавление планируется через отдельную модель оценки поз, обученную на подводных изображениях с учётом преломления и цветовых искажений. Второе — ограниченная устойчивость в ночных условиях; требуется дополнительная инфракрасная подсветка. Третье — рекомендованное расстояние от камеры до пловца не более 8–10 метров: дальше начинает просаживаться качество оценки поз.</p>
			<p>9. Заключение</p>
			<p>В работе предложена и проверена системно-архитектурная модель автоматического обнаружения утопающих, в которой ансамбль из свёрточного детектора и темпорального классификатора дополнен инженерными компонентами уровня системы — межкадровым трекингом, постобработкой и адаптивной калибровкой порога. Всё, что лежит между нейросетевым ансамблем и оператором, в этой работе и было основным предметом исследования.</p>
			<p>Архитектура устроена как пятиуровневый конвейер: захват, оценка поз и детекция, формирование признаков, темпоральная классификация, постобработка. Главная инженерная идея — раздельность пространственного и темпорального анализа: пиксельную работу делает YOLOv8m / YOLOv8m-Pose, поведенческий анализ — двунаправленная LSTM с аддитивным вниманием, обучаемая отдельно. Из такого разделения следуют три полезных свойства: модели обновляются независимо, темпоральная часть требует на порядок меньшего размеченного корпуса видео, а архитектура естественно масштабируется по числу камер.</p>
			<p>Межкадровый трекинг — простой IoU-трекинг с порогом 0,3 и временем жизни трекера 5 секунд. По MOTA он отстаёт от DeepSORT/ByteTrack/BoT-SORT на 1,5–2,4 пункта, но выигрывает в скорости в 20–40 раз. В нашей конструкции это оправдано: подмена идентификатора не превращается в ложноотрицательное срабатывание, поскольку 90-кадровый буфер усреднения на пятом уровне инерционен и поглощает одиночные сбои трекинга.</p>
			<p>Постобработка трёхэтапная: накопление вероятностей класса «утопление» в скользящем окне 90 кадров, их арифметическое усреднение и пороговое решающее правило с 30-секундной «тишиной» после срабатывания. Поверх работает адаптивная калибровка порога T*, минимизирующего взвешенную сумму вероятностей ошибок FN и FP по эмпирическому распределению, набираемому в калибровочный период. Этот механизм позволяет настроить систему под конкретный объект, не переобучая нейросети.</p>
			<p>Свёрточный детектор YOLOv8m, обученный на 5 207 размеченных изображениях, на тестовой подвыборке даёт mAP@0.5 = 0,809 и F1 = 0,802. На отдельном наборе из 25 видеороликов полный пайплайн зафиксировал 23 истинно положительных срабатывания и 2 пропуска при 7 ложных срабатываниях за 7 часов нормального плавания. Это соответствует системным precision = 0,77, recall = 0,92, F1 = 0,84, частоте ложных срабатываний ≈1 событие в час на камеру и средней задержке обнаружения 2,9 секунды. Целевые системные характеристики из постановки задачи – FP/час ≤ 1 и задержка ≤ 5 с – выполнены.</p>
			<p>Испытания на устойчивость показали, что пайплайн уверенно держит умеренные синтетические помехи: при гауссовом шуме σ ≤ 0,03, снижении разрешения до ×0,5, JPEG quality 50 и изменениях экспозиции до ±25% падение точности не выходит за один процентный пункт. Особенно полезен результат по разрешению: пайплайн работает даже при 320 × 180, и это означает, что для развёртывания достаточно сравнительно недорогих 720p- и 480p-камер. Анализ режимов вычислений выделил TensorRT FP16: ускорение в 3,1 раза при потере точности всего в 0,3 пункта. По эмпирическим испытаниям в режиме PyTorch FP16 одна RTX 4080 тянет 14–16 одновременных камер при 30 FPS; при переходе на TensorRT FP16 пропускная способность кратно растёт.</p>
			<p>Сравнение с существующими решениями выглядит так: по recall (≈92 %) наша архитектура попадает в диапазон лучших академических работ; по частоте ложных срабатываний — ≈1 событие в час против 5–10 у коммерческих аналогов и ≈2 у </p>
			<p>[2]</p>
			<p>Дальнейшее развитие архитектуры мы видим по четырём направлениям. Первое – поддержка подводных камер: для этого нужна отдельная модель оценки поз, обученная на подводных изображениях с учётом преломления и цветовых искажений. Второе — добавление тепловизионного канала как параллельного источника, который выручит в сумеречных и ночных условиях, где видимый канал проседает. Третье — переход к более серьёзному алгоритму трекинга, например на основе фильтра Калмана, для сценариев с большим числом одновременных пловцов и значительной долей перекрытий: это особенно актуально для аквапарков и водных аттракционов. Четвёртое — расширение и диверсификация валидационной выборки: использованный тестовый набор из 25 роликов ограничен по объёму в силу самой природы задачи (реальные инциденты редки, а их безопасная имитация трудозатратна), и наиболее ценным его пополнением станут записи, накопленные на действующих объектах эксплуатации, — они позволят оценить систему в реальном многообразии сцен, оборудования и режимов освещения.</p>
		</sec>
		<sec sec-type="supplementary-material">
			<title>Additional File</title>
			<p>The additional file for this article can be found as follows:</p>
			<supplementary-material xmlns:xlink="http://www.w3.org/1999/xlink" id="S1" xlink:href="https://doi.org/10.5334/cpsy.78.s1">
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/25422.docx">25422.docx</inline-supplementary-material>]-->
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/25422.pdf">25422.pdf</inline-supplementary-material>]-->
				<label>Online Supplementary Material</label>
				<caption>
					<p>
						Further description of analytic pipeline and patient demographic information. DOI:
						<italic>
							<uri>https://doi.org/10.60797/IRJ.2026.170.57</uri>
						</italic>
					</p>
				</caption>
			</supplementary-material>
		</sec>
	</body>
	<back>
		<ack>
			<title>Acknowledgements</title>
			<p/>
		</ack>
		<sec>
			<title>Competing Interests</title>
			<p/>
		</sec>
		<ref-list>
			<ref id="B1">
				<label>1</label>
				<mixed-citation publication-type="confproc">Hassan E. Review: Mask R-CNN Models / E. Hassan, N. El-Rashidy, F. Talaa // Nile Journal of Communication and Computer Science. — 2022. — DOI: 10.21608/njccs.2022.280047.</mixed-citation>
			</ref>
			<ref id="B2">
				<label>2</label>
				<mixed-citation publication-type="confproc">Guo Z. MSFT-YOLO: Improved YOLOv5 Based on Transformer for Detecting Defects of Steel Surface / Z. Guo, C. Wang, G. Yang [et al.] // Sensors (Basel). — 2022. — Vol. 22, № 9. — P. 3467. — DOI: 10.3390/s22093467.</mixed-citation>
			</ref>
			<ref id="B3">
				<label>3</label>
				<mixed-citation publication-type="confproc">Mao M. YOLO Object Detection for Real-Time Fabric Defect Inspection in the Textile Industry: A Review of YOLOv1 to YOLOv11 / M. Mao, M. Hong // Sensors (Basel). — 2025. — Vol. 25, № 7. — P. 2270. — DOI: 10.3390/s25072270.</mixed-citation>
			</ref>
			<ref id="B4">
				<label>4</label>
				<mixed-citation publication-type="confproc">Sadman R. Real-Time Detection Performance of RTSP vs. USB Cameras for UGVs / R. Sadman, S. Safi, J. Mahe [et al.] // WRC Symposium on Advanced Robotics and Automation (WRC SARA). — 2025. — P. 119–126. — DOI: 10.1109/wrcsara68202.2025.11194983.</mixed-citation>
			</ref>
			<ref id="B5">
				<label>5</label>
				<mixed-citation publication-type="confproc">Sinha E. OpenCV for Computer Vision Applications / E. Sinha, A. Kumar, A. Tyagi // International Journal for Multidisciplinary Research. — 2025. — Vol. 7, № 3. — DOI: 10.36948/ijfmr.2025.v07i03.44280.</mixed-citation>
			</ref>
			<ref id="B6">
				<label>6</label>
				<mixed-citation publication-type="confproc">Meng Z. YOLOv10-pose and YOLOv9-pose: Real-time strawberry stalk pose detection models / Z. Meng, X. Du, R. Sapkota [et al.] // Computers in Industry. — 2025. — Vol. 164. — P. 104231. — DOI: 10.1016/j.compind.2024.104231.</mixed-citation>
			</ref>
			<ref id="B7">
				<label>7</label>
				<mixed-citation publication-type="confproc">Farooq J. An improved YOLOv8 for foreign object debris detection with optimized architecture for small objects / J. Farooq, M. Muaz, K. Jadoon [et al.] // Multimedia Tools and Applications. — 2023. — Vol. 83. — P. 60921–60947. — DOI: 10.1007/s11042-023-17838-w.</mixed-citation>
			</ref>
			<ref id="B8">
				<label>8</label>
				<mixed-citation publication-type="confproc">Jeong E. TensorRT-Based Framework and Optimization Methodology for Deep Learning Inference on Jetson Boards / E. Jeong, J. Kim, S. Ha // ACM Transactions on Embedded Computing Systems. — 2022. — Vol. 21, № 6. — P. 1–26. — DOI: 10.1145/3508391.</mixed-citation>
			</ref>
			<ref id="B9">
				<label>9</label>
				<mixed-citation publication-type="confproc">Rutan S. Adaptive Kalman filtering used to compensate for model errors in multicomponent methods / S. Rutan, S. Brown // Analytica Chimica Acta. — 1984. — Vol. 160. — P. 99–119. — DOI: 10.1016/s0003-2670(84)84512-2.</mixed-citation>
			</ref>
			<ref id="B10">
				<label>10</label>
				<mixed-citation publication-type="confproc">The V. A Comparative Performance Analysis of Deep Learning-Based Motorcycle Tracking Models at Urban Intersections: A Vietnamese Case Study / V. The, T. De, H. Dinh // RIVF International Conference on Computing and Communication Technologies (RIVF). — 2025. — P. 304–309. — DOI: 10.1109/rivf68649.2025.11365250.</mixed-citation>
			</ref>
			<ref id="B11">
				<label>11</label>
				<mixed-citation publication-type="confproc">Aharon N. BoT-SORT: Robust Associations Multi-Pedestrian Tracking / N. Aharon, R. Orfaig, B. Bobrovsky // arXiv. — 2022. — arXiv:2206.14651. — DOI: 10.48550/arxiv.2206.14651.</mixed-citation>
			</ref>
			<ref id="B12">
				<label>12</label>
				<mixed-citation publication-type="confproc">Fette I. The WebSocket Protocol / I. Fette, A. Melnikov // RFC 6455. — 2011. — P. 1–71. — DOI: 10.17487/rfc6455.</mixed-citation>
			</ref>
			<ref id="B13">
				<label>13</label>
				<mixed-citation publication-type="confproc">Vere-Jones D. Markov Chains / D. Vere-Jones // Nature. — 1972. — Vol. 236. — P. 291. — DOI: 10.1038/236291a0.</mixed-citation>
			</ref>
			<ref id="B14">
				<label>14</label>
				<mixed-citation publication-type="confproc">Zhou P. Towards Understanding Convergence and Generalization of AdamW / P. Zhou, X. Xie, Z. Lin // IEEE Transactions on Pattern Analysis and Machine Intelligence. — 2024. — Vol. 46, № 9. — P. 6486–6493. — DOI: 10.1109/tpami.2024.3382294.</mixed-citation>
			</ref>
			<ref id="B15">
				<label>15</label>
				<mixed-citation publication-type="confproc">Shaikh I. Enhancing sustainability in the production of palm oil: creative monitoring methods using YOLOv7 and YOLOv8 for effective plantation management / I. Shaikh, M. Akhtar, A. Aabid // Biotechnology Reports. — 2024. — Vol. 44. — P. e00853. — DOI: 10.1016/j.btre.2024.e00853.</mixed-citation>
			</ref>
			<ref id="B16">
				<label>16</label>
				<mixed-citation publication-type="confproc">Ríos J. Dynamically Adapting Floating-Point Precision to Accelerate Deep Neural Network Training / J. Ríos, A. Armejach, E. Petit [et al.] // 20th IEEE International Conference on Machine Learning and Applications (ICMLA). — 2021. — P. 980–987. — DOI: 10.1109/icmla52953.2021.00161.</mixed-citation>
			</ref>
			<ref id="B17">
				<label>17</label>
				<mixed-citation publication-type="confproc">Emin B. Digital Implementation of Chaotic Systems Using Nvidia Jetson AGX Orin and Custom DAC Converter / B. Emin, M. Yaz // ADBA Information Technology and Publishing Limited Company. — 2024. — DOI: 10.69882/adba.chf.2024075.</mixed-citation>
			</ref>
		</ref-list>
	</back>
	<fundings/>
</article>