DSINSIGHTS Telegram 281
В прошлой статье по задаче сопоставления изображения с помощью ключевых точек мы рассмотрели самый простой алгоритм 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]))


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



tgoop.com/dsinsights/281
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

During the meeting with TSE Minister Edson Fachin, Perekopsky also mentioned the TSE channel on the platform as one of the firm's key success stories. Launched as part of the company's commitments to tackle the spread of fake news in Brazil, the verified channel has attracted more than 184,000 members in less than a month. Step-by-step tutorial on desktop: Avoid compound hashtags that consist of several words. If you have a hashtag like #marketingnewsinusa, split it into smaller hashtags: “#marketing, #news, #usa. The administrator of a telegram group, "Suck Channel," was sentenced to six years and six months in prison for seven counts of incitement yesterday. When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name.
from us


Telegram ML Advertising
FROM American