tgoop.com/dsinsights/281
Last Update:
В прошлой статье по задаче сопоставления изображения с помощью ключевых точек мы рассмотрели самый простой алгоритм SIFT. Он доступен из коробки в OpenCV, не требует обученых моделей, и его часто применяют в качестве бейзлайна.
Но поскольку SIFT имеет свои ограничения и корректно срабатывает, только когда имеются большие пересечения между кадрами нам нужен алгоритм, который будет способен обучиться матчить определенные сцены и генерировать дескрипторы под ключевые точки.
SuperPoint
Первым из таких алгоритмов является SuperPoint. Он основан на свёрточной сетке, с двумя выходными головами:
- Одна голова отвечает за классификацию ключевых точек: определяет, является пиксель ключевой точкой или нет.
- Вторая голова генерирует дескрипторы для каждого пикселя. Здесь каждый дескриптор – это вектор размерностью 128.
Для обучения модели используются два основных лосса:
- Кросс-энтропия для классификации ключевых точек.
- Hinge Loss для дескрипторов.
Как обучать SuperPoint?
- Генерируем синтетические данные. Создаём изображения, на которых будет понятно, где нужно разместить ключевые точки. Квадраты, линии, чёрточки, сетки, всё на фоне гауссового шума. Выучиваем сеть на этих данных и называем её MagicPoint.
- Для получения разметки на реальных картинках применяем аффинные преобразования, homography adaptation например, меняем ракурс, масштаб etc. После этого прогоняем через MagicPoint эти картинки, а предсказанные точки объединяем. Таким образом, получаем разметку на предсказание ключевых точек.
- Обучаем сетку. Считаем матрицу M применения homography adaption. Мы можем взять ключевые точки с одной матрицы и спроецировать их на другую.
kp1_projected = cv2.perspectiveTransform(kp1_np.reshape((1, -1, 2)), M)[0, :, :]
dists = cdist(kp1_projected, kp2_np)
M = sample_homography_alb(image)
warped = cv2.warpPerspective(src=image, M=M, dsize=(image.shape[1], image.shape[0]))
Сопоставив дескрипторы между двумя версиями изображения, будем оценивать расстояние между ними: если расстояние маленькое, то это одна и та же точка, и такие дескрипторы и нужно в конечном счёте стянуть. В итоге нейросеть обучается на основе сопоставления расстояний между точками и их дескрипторов, минимизируя ошибку в сопоставлении.
BY ML Advertising
Share with your friend now:
tgoop.com/dsinsights/281