/
Alx89
/
EdgeCV-Model-Development-Guide
Обзор
Документация
Войти
/
Alx89
/
EdgeCV-Model-Development-Guide
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Content.tex
113 строк
17 KB
Никита Шубин
V 0.0.2
13 янв 2026, 23:52
13 янв 2026, 23:52
27ab607
Код
Авторство
О чём код?
\section{Цели и задачи проекта} Главный проект декомпозируется представителями всех команд на составляющие, одной из которых и является ML-часть, выделяющаяся в отдельный Git-проект. ML-проект так же должен быть разбит на элементы. В идеале \textit{\textbf{составляющие ML-проекта должны быть сведены к давно известным задачам, решение которых является стереотипным}}: детекция, трекинг, сегментация, классификация, регрессия, фильтрация и т.п. \subsection{Классификация ML-задачи} От типа решаемой ML-задачи зависят дальнейшие шаги. Без этого невозможно даже формализовать требования к разметке, не говоря уже о последующих этапах. В первом приближении декомпозиция ML-проекта должна сводить его элементы к использованию хорошо известных и успешно апробированных в мировой практике решений. Любое отклонение от этого переводит проект из разряда чисто инженерных в исследовательские, что влечёт дополнительные риски. Всё это необходимо учитывать ещё на этапе декомпозиции главной задачи. Стереотипными CV-задачами являются: сегментация, детекция, трекинг, фильтрация, классификация, регрессия и т.п. \subsection{Выбор модели подходящего семейства} Если ML-задачу удалось свести к стереотипному решению, то оно автоматически диктует: архитектуру модели, пред- и постобработки данных, метрики и открытые датасеты. Например, для сегментации подходят U-Net или DeepLab, а для детекции - YOLO или R-CNN.Так же в большинстве случаев имеется возможность выбирать базовую модель (backbone) для извлечения признаков из изображений. Однако, использование моделей на базе трансформеров обычно не представляется возможным ввиду ограничений бортового оборудования и необходимости работы в реальном времени. Но определять модель настолько детально на этом этапе не требуется, т.к. впереди должны быть ещё исследования соотношений точности/скорости для различных гиперпараметров. Следует лишь иметь это ввиду и учитывать возможности выбранной аппаратной платформы. Если для ML-задачи было выбрано нетипичное решение, следует выделить дополнительные ресурсы на проведение исследований. Это в любом случае потребует времени и резко увеличит риски провалить проект или завершить его позже планируемого срока. \section{Создание датасета} Исходя из типа задачи и формата эталонных данных можно в первом приближении определить что за данные необходимо собрать и разметить. Большинство проблем почти любого ML-проекта (особенно на ранних стадиях) связано с недостатками датасета: \begin{enumerate} \item беден даже с учётом аугментации или вообще отсутствует; \item нерелевантен (не в полной мере соответствует задаче, условиям наблюдения, типу используемых датчиков и т.п.); \item противоречиво, неполно или неточно размечен; \end{enumerate} Сам процесс сбора новых данных и их разметка так же могут вызывать трудности: \begin{enumerate} \item дороговизна получения новых данных; \item привязка к независящим от человека условиям (например, погода) или редкость фиксируемого явления; \item высокие требования к квалификации разметчика или трудоёмкость самой разметки; \item юридические ограничения (персональные данные, секретность и т.п.). \end{enumerate} Для компенсации указанных проблем зачастую прибегают к компьютерному моделированию. Это может быть разработка полноценного симулятора с нуля или модификация какого-то из существующих решений. К тому же \textit{\textbf{полноценный симулятор снимает необходимость размечать синтетические данные и открывает большое количество возможностей по тестированию}}. Но и это направление сопряжено с рядом проблем: \begin{enumerate} \item необходимость иметь команду соответствующих разработчиков в штате или на аутсорсе; \item труднодостижимый фотореализм; \item сложная механика моделирования динамических систем, особенно относящихся к передвижению носителя или ОИ; \item некоторым задачам требуется большое количество 3D-моделей для наполнения фона или разнообразия ОИ, которые не всегда можно найти в открытых асетах. \end{enumerate} Если разработать полноценный симулятор нет возможности, то прибегают к созданию относительно релевантного набора данных, синтезированного иным образом. Например, с использованием какой-либо компьютерной игры или генеративной НС. В крайнем случае модифицируют имеющиеся данные в полуручном режиме. Но при всех этих вариантах, во-первых, недоступно полноценное моделирование работы замкнутой системы, а во-вторых, сохраняется необходимость размечать данные в ручном режиме. \subsection{Оптимизация процессов формирования датасета} Из-за всех вышеперечисленных проблем процесс сбора и/или разметки данных почти всегда крайне обременителен для проекта. На этапах от POC до MVP вообще стараются использовать датасеты из открытых источников, даже если они соответствуют задаче с большой натяжкой. Зрелые проекты почти всегда отличаются хорошо продуманным и отлаженным процессом непрерывного пополнения датасета. Переход от вакуума к эффективно выстроенному конвейеру обработки данных должен быть эволюционным, а не революционным. При любом изменении в архитектуре такой системы руководствоваться надо исключительно эффектом, который оно окажет на результат обучения модели. Сначала создаётся самое необходимое для работы, и постепенно добавляются всё менее остро необходимые элементы системы. Узкие места процесса могут быть совершенно разными от проекта к проекту. Узких мест обычно всего два: сбор первичных данных и разметка. \subsubsection{Нехватка сырых данных} \label{subsubsec:slowdataacquisition} Получать релевантные данные может быть крайне затруднительно или дорого. В таких случаях следует начать со сбора и разметки менее релевантных данных, параллельно разрабатывая свой симулятор, если на долгой дистанции он окупит вложения. При этом те немногие данные, что имеются сейчас, должны использоваться в первую очередь в проверочной и тестовой выборках. Если нужными данными располагает некая третья сторона, стоит поискать возможность заинтересовать её в предоставлении этих данных. Например, создать онлайн-сервис по обработке этих данных, который закроет какие-то из потребностей этой стороны. По этой схеме работают психологические тесты в соц. сетях, которые требуют доступ к страничке с личными данными испытуемого. Бесплатный доступ к языковым моделям тоже делается в обмен на право использовать всю накопленную переписку. \subsubsection{Низкая скорость разметки} \label{subsubsec:slowlabeling} Объём поступающих на разметку данных может кратно или даже на порядки превышать возможности команды разметки. В этом случае необходимо выстроить конвейер фильтров, каждый из которых отбраковывает какую-то часть данных. Начинать надо с создания самых поверхностных фильтров, имеющих максимальный объём отбракованных данных при минимальном задействовании людей. Например, вести поиск повторяющихся кадров или удаление продолжительных фрагментов видео, где нет изменений в кадре. Далее можно ускорить разметку путём использования фундаментальных CV-моделей для выполнения предварительной автоматизированной разметки (предразметки). Для задач сегментации может подойти SAM2, а для детекции - Grounding DINO. \begin{comment} \begin{figure}[H] % Позиционирование (здесь, верх, низ, страница) \centering % Центрирование \begin{tikzpicture}[every node/.style={align=center}] % Узлы схемы \node (start) [startstop] {Создание датасета}; \node (train) [block, below=of start] {Обучение модели}; \node (test) [decision, below=of train] { Модель\\ работает удовлетворительно\\ на всех фоноцелевых\\ обстановках? }; \node (fix) [block, right=of test] { Пополнение датасета\\ недостяющими случаями }; \node (end) [startstop, below=of test] {Конец}; % Соединения \draw [arrow] (start) -- (train) coordinate[midway] (totrain); \draw [arrow] (train) -- (test); \draw [arrow] (test) -- node[anchor=south] {Нет} (fix); \draw [arrow] (test) -- node[anchor=east] {Да} (end); \draw [arrow] (fix) |- (totrain); % Г-образная стрелка \end{tikzpicture} \caption{Цикл улучшения данных с опорой на результат обучения} \label{fig:dataimprovementcycle} \end{figure} \end{comment} \subsection{Формализация требований к отбору и разметке данных} Однако невозможно без достаточного опыта с первого раза составить исчерпывающий список требований, предъявляемый к данным. Это продиктовано итеративным подходом в самой разработке ML-проектов: \subsection{Организация сбора первичных данных} \subsection{Фильтрация данных по релевантности} \subsection{Разметка данных} \subsection{Конвертация данных в итоговый датасет} \subsection{Подбор параметров аугментации} \section{Обучение модели} \subsection{Определение гиперпараметров модели в первом приближении с учётом аппаратных возможностей бортового вычислителя (рабочее разрешение изображения, базовая модель, сложность архитектуры и т.п.)} \subsection{Сборка первой (ещё необученной) версии модели, её конвертация в ONNX и измерение fps её инференса на устройстве (коррекция гиперпараметров в случае необходимости)} \subsection{Создание кода обучения модели} \subsection{Запуск серии пристрелочных экспериментов (сужение размера пространства гиперпараметров)} \subsection{Выбор метрик и оценка их объективности путём сравнения с результатами визуализации работы модели} \subsection{Разработка и запуск кода обучения гипермодели для поиска субоптимального набора гиперпараметров (опционально)} \subsection{До- или повторное обучение модели с лучшими гиперпараметрами} \subsection{Фиксация версии модели с кратким описанием в таблице, доступной для команды плюсовиков (необходимо для версионирования конечного продукта и прозрачности дальнейших испытаний)} \subsection{Конвертация в ONNX и передача модели в сопровождении описания алгоритма пред- и постобработки данных для корректной интеграции в прод} \section{Тестирование} \subsection{В симуляторе (симуляция / in silico)} Преимущества симулятора: \begin{enumerate} \item возможность испытать работу в замкнутом контуре не только модель, но и всю систему целиком; \item быстрый и дешёвый способ воспроизвести и отладить проблемы, выявленные на натурных и полунатурные испытаниях; \end{enumerate} \subsection{На заводе (полунатурные испытания / in vitro)} \subsection{В полях (натурные испытания / in vivo)}