SIFT и совмещение ключевых точек
Ключевые точки — это точки, которые можно легко и последовательно найти на изображениях. Например, вы найдете нижний левый угол экрана на многих его изображениях и определите, что это — один и тот же экран.
Соответствие (correspondence) — определение того, что два изображения, снятые с различных точек, — это изображения одной и той же вещи. Ключевые точки долгие годы были очень полезным инструментом для такого сопоставления. Например, у вас есть два изображения: красная точка на левом изображении и синяя точка на правом — это одна и та же вещь, проекция одной и той же точки, это и есть соответствие.
Точки на картинке с горой Рашмор — это точки интереса, соотнесенные друг с другом на различных изображениях. SIFT (scale-invariant feature transform — «Хайтек») — алгоритм обнаружения и описания объектов на изображениях. Его создал Дэвид Лоу в конце прошлого века. А статья с описанием этого алгоритма до сих пор является самой цитируемой в области компьютерного зрения. Но в ней не было никакого процесса обучения. Эти точки используются для вычисления гомографии — того, насколько изображения искажены. Когда вы делаете панораму на свой смартфон, он фактически этим и занимается — совмещает ключевые точки.
С помощью дрона, множества снимков и стереовидения можно построить 3d-модель вершины Маттерхорн. Такие методы больше не требуют ручного вмешательства. Они заключаются в совмещении ключевых точек с различных изображений и вычислении на их основе высоты.
Метод поиска ключевых точек основан на создании дескрипторов особенностей (feature descriptor). Детектор локальных особенностей находит угловые точки на изображении, а также вычисляет локальный масштаб. Затем он определяет локальную ориентацию и использует ее для вычисления дескриптора. Созданные дескрипторы не зависят от ориентации. Перемещая камеру, вы сопоставляете их, а затем сравниваете между различными изображениями.
Глубокие нейросети
Есть два изображения Франкфурта: одно сделано ночью, другое — днем. Одна из проблем заключается в освещении. Если встроить каждый компонент алгоритма обнаружения объектов в глубокую сеть, собрать их вместе, то получится — «сквозное обучение» (end-to-end training). Мы научили глубокую сеть отличать стабильные ключевые точки от остальных. Поэтому сложно найти ключевые точки, которые бы совпадали. Мы использовали фиксированные и постоянно работающие веб-камеры. На полученных с каждой камеры изображениях мы запустили SIFT и создали обучающую базу данных.
Глубокие нейросети в корне изменили компьютерное зрение. Принцип их работы хорошо описывается фразой: «Мы не понимали, как они работают, но мы понимали, как их использовать».
Для получения ориентации ключевых точек, обеспечивающей хорошие соответствия, необходимо написать функцию потерь. А затем на ее основе оптимизировать процесс. Ориентация ключевых точек — неоднозначная вещь. Горизонтальная или вертикальная ориентация — в большинстве методов принимают произвольное решение. Вычисляют ориентации по гистограмме и выбирают доминирующую. Но не всегда это работает.
На обучающем наборе данных, вычисляя ориентацию, вы обучаете глубокую сеть. Дескриптор зависит от ориентации. Им может быть SIFT или все что угодно. Глубокая сеть зависит от значения фрагмента 1 (Patch1) и его ориентации. Разница между значением дескриптора от фрагмента 1 (Patch1) и его ориентацией, и значением дескриптора от фрагмента 2 (Patch2) и его ориентацией при наличии соответствия — минимальна.
Если вы делаете это с помощью CNN (сверточной нейросети — «Хайтек») вам необходимо дифференцировать. Но если вы используете SIFT — вы просто вычисляете числовые производные. Перед началом вы табулируете их и используете в вычислении.
Если между двумя фрагментами есть соответствие, то дескрипторы должны быть близки, а если соответствия нет — разными. Для этого вы опять обучаете сиамскую сеть. Архитектура нашей сети проста. Ей уже три года, и она хорошо работает. Но появляются более сложные модели. Они работают еще лучше. Правда, идея в них заложена та же.
Эпиполярная геометрия и основная матрица
Процесс определения локальных признаков состоит из трех компонентов: обнаружение локальных особенностей, оценка ориентации и вычисление дескриптора особенностей. Все они теперь реализованы в CNN. Я могу их подключить к огромной CNN-монстру, которую обучают сквозным образом (end-to-end).
При обучении для сцен в помещении мы использовали карты глубины (depth maps). Чтобы сделать вывод о наличии соответствия, мы также воспользовались сенсорами Kinect. Для сцен на открытом воздухе мы использовали наборы данных фототуризма. Применяя технику определения структуры из действия (structure from motion), мы получили соответствия, а затем использовали их в обучении.
Известный алгоритм RANSAC не справится при «установлении соответствий» между изображениями, снятыми со слишком разных углов, и с повторяющимися структурами. Если вы используете традиционный способ установления соответствий, то получите один мусор. RANSAC не берет в расчет общую геометрию. В нашем алгоритме вы не учитываете, что установленные соответствия накладывают ограничения на следующее соответствие. Это известно как эпиполярная геометрия — различные соответствия связаны между собой.
Мы обучили глубокую сеть предсказывать соответствия и одновременно вычислять основную матрицу. Если установить 8 соответствий, можно вычислить основную матрицу (essential matrix). Она полностью характеризует геометрию. Это классический алгоритм, известный с самого начала компьютерного зрения. Вы используете соответствия для построения матрицы. После ее разложения по единичным значениям получаете эпиполярную геометрию.
Если вам известны уравнения — ищите способ встроить их в сеть. Теоретически обладая бесконечными вычислительными мощностями и бесконечным количеством данных для обучения, система обучится эпиполярной геометрии, изобретет заново проективную геометрию. Но у нас нет ни бесконечных данных, ни бесконечных вычислительных мощностей. Мы хотим интегрировать получение соответствия с использованием глубокой CNN в единый процесс сквозного обучения.
Редакция «Хайтек» благодарит саммит Machine Can See, организованный VisionLabs при поддержке «Сбербанк» и Sistema_VC, за помощь в подготовке материала.