Машин Learning

Конволюция для поиска предмета на картинке

Всем привет!

Сегодня речь пойдёт о самом простом алгоритме поиска предмета на картинке. Здесь мы поговорим о том что такое корреляция и как она работает. Не пугайтесь, обещаю, всё будет просто. Конечно, у такого алгоритма много ограничений. Но при этом большое количество нейронных сетей, используемых, например, для детекции людей или предметов на фотографиях, используют именно этот принцип.  Так что читаем и подписываемся на мой телеграм-канал :).

Как всегда для начала рассмотрим простой пример. Специально для этого случая я создала изображение, которое состоит из нулей (чёрный цвет) и единиц (белый цвет) и содержит две буквы — M и L. На этой картинке мы будем искать местоположение буквы L:

 

Ну и тут первым делом мы сталкиваемся с понятием конволюции или свёртки (кому как нравится).  Наша буква L в данном случае является ядром свёртки. Мы будем как бы прикладывать центр ядра поочерёдно к каждому пикселю изображения и определять схожесть ядра и части изображения:

Каким образом определить схожесть? Сначала, выделяем область картинки, которую покрывает ядро (розовый квадрат) и с которой будем сравнивать это самое ядро (буква L). Ну а затем, вычисляем сумму  произведений пикселей изображения и соответствующих им пикселей ядра. Результат записываем в ячейку, к которой был приложен центр ядра. Выглядит это примерно так:

Ну а вот, что произойдёт в случае полного совпадения ядра и исследуемой части изображения:

Конволюция (свёртка)

Обратите внимание на матрицу справа, в которой записаны результаты всех вычислений. Здесь, самый большой  коэффициент свидетельствует о максимальной схожести ядра и части картинки. Ну вот и всё. Часть изображения, которая максимальна схожа с ядром (буквой L)  найдена.

Конечно, такой элементарный алгоритм практически не используется вследствие большой вычислительной сложности. Представьте себе, что на картинке, размеры которой 4000 х 3000 пикселей,  вы хотите найти предмет размерами 500 х 500 пикселей. То есть в каждом пикселе будет произведено 250 тысяч операций умножения и сложения. Это достаточно много даже для современных компьютеров. Зато если искать сходство с ядром размером 5 х 5 пикселей, операций будет значительно меньше. Поэтому современные нейронные сети двигаются именно в этом направлении.  Они используют конволюцию с небольшими ядрами, но большое количество раз.

На этом я остановлюсь. Надеюсь, статья вам понравилась. Подписывайтесь на мой телеграм-канал и рассказывайте друзьям о моём сайте :).

Добавить комментарий

Ваш адрес email не будет опубликован.