6.5 KiB
2.3.1 Применение архитектуры сиамских близнецов для сопоставления кадров из различных доменов
Абстрактно, сиамские близнецы представляют собой следующую архитектуру (рисунок 1): На вход подаются два или более объекта с одинаковой сигнатурой. Каждая входная информация проходит одинаковый пайплайн обработки (получение признаков при помощи CNN). Полученные наборы признаков объединяются в вектор (1\times M). Голова модели представляет собой полносвязную нейронную сеть.
Рисунок 1 – Абстрактная архитектура сиамских близнецов
В качестве входной информации выступят два кадра: текущий снимок видеокамеры и эталонный снимок, для которого точно известна позиция. Выходная информация будет представлять собой вещественное число от 0 до 1 – степень схожести двух картинок (Рисунок 2).
Рисунок 2 – Интерфейс алгоритма (входные и выходные данные)
На базе такой архитектуры реализована модель «SiaN-Similarity» с использованием фреймворка PyTorch и включает общий скелет на базе предобученной модели «ResNet18» и голову сравнения (рисунок 3). На вход подаются два изображения размером \left(B,3,256,256\right), где B – размер пакета данных (batch). Эти изображения представляют собой текущий кадр («Image 1») и кандидат-эталон «Image 2». Извлеченные при помощи «ResNet18» признаки f_1 и f_2 объединяются в вектор [f_1,f_2,f1–f2,f1*f2] размером \left(B,2048\right), так как каждый из векторов f_1 и f_2 имеет размер (B,\ 256). Все это проходит через многослойный перцептрон (MLP), где выход – вероятность схожести картинок (рисунок 3). Обучение модели проводилось на собственном датасете «ya_go_maps» - собственный набор, состоящий из 327 пар изображений разных доменов (261 тренировочных и 66 валидационных) с бинарными метками (одинаковы или разный домен). Датасет сформирован на основе снимков из различных онлайн-карт («Яндекс.Карты» и «Google Maps»). Для обучения использовалась функция потерь Binary Cross Entropy Loss (BCELoss), которая идеально подходит для бинарной классификации схожести изображений: l_n=-\left(y_nlog\left(x_n\right)+\left(1-y_n\right)log\left(1-x_n\right)\right), где x_n – предсказанная вероятность, y_n – истинная метка (1 для одинаковых пар снимков, 0 – для разных). Средняя потеря по батчу вычисляется как \frac{1}{N}\sum_{n}l_n BCELoss выбрана из-за совместимости с сигмоидным выходом и способности эффективно различать градиенты для вероятностей, что отлично подходит для задач сопоставления изображений с доменным сдвигом.
Рисунок 3 – Архитектура модели «SiaN-Similarity»
Платформа обучения – «Kaggle» с видеокартой «Tesla P100». Весь процесс обучения занял 24 минуты и остановился на 56 эпохе (ранняя остановка). Train Loss снизилась до 0.27 и монотонно убывала на протяжении всех эпох (за небольшими исключениями. После ~30 эпохи модель начала переобучаться и сработала ранняя остановка (early stopping). Лучшая Val Loss – 0.2929 (эпоха 36) при Val Accuracy 0.90. Однако лучшая точность достигнута на последней эпохе – 0.9630, правда функция потерь в том случае слишком высокая и слишком низкий recall, что критично для дальних полетов, ведь высок риск еще большего накопления ошибок.
Рисунок 4 – Графики обучения «SiaN-Similiarity»
Модель демонстрирует консервативный характер: высокий recall минимизирует пропуски истинных совпадений эталонных кадров (false negatives), что критично для коррекции траектории БПЛА. Низкая объясняется доменным сдвигом и малым размером датасета – модель склонна классифицировать неоднозначные пары как одинаковые. Это приемлемо для навигации, где false positives приводят лишь к проверке дополнительных кандидатов, а false negatives могут вызвать потерю позиции (рисунок 5).
Рисунок 5 – Матрица ошибок «SiaN-Similarity»
На рисунке 6 и 7 показаны примеры верных предсказании модели и неверных соответственно.
Рисунок 6 – Верно угаданные сэмплы «SiaN-Similarity»
Рисунок 7 – Неверно угаданные сэмплы «SiaN-Similiarity»