Всем привет!
Сегодня речь пойдёт о самом простом алгоритме поиска предмета на картинке. Здесь мы поговорим о том что такое корреляция и как она работает. Не пугайтесь, обещаю, всё будет просто. Конечно, у такого алгоритма много ограничений. Но при этом большое количество нейронных сетей, используемых, например, для детекции людей или предметов на фотографиях, используют именно этот принцип. Так что читаем и подписываемся на мой телеграм-канал :).
Как всегда для начала рассмотрим простой пример. Специально для этого случая я создала изображение, которое состоит из нулей (чёрный цвет) и единиц (белый цвет) и содержит две буквы — M и L. На этой картинке мы будем искать местоположение буквы L:
Ну и тут первым делом мы сталкиваемся с понятием конволюции или свёртки (кому как нравится). Наша буква L в данном случае является ядром свёртки. Мы будем как бы прикладывать центр ядра поочерёдно к каждому пикселю изображения и определять схожесть ядра и части изображения:
Каким образом определить схожесть? Сначала, выделяем область картинки, которую покрывает ядро (розовый квадрат) и с которой будем сравнивать это самое ядро (буква L). Ну а затем, вычисляем сумму произведений пикселей изображения и соответствующих им пикселей ядра. Результат записываем в ячейку, к которой был приложен центр ядра. Выглядит это примерно так:
Ну а вот, что произойдёт в случае полного совпадения ядра и исследуемой части изображения:
Обратите внимание на матрицу справа, в которой записаны результаты всех вычислений. Здесь, самый большой коэффициент свидетельствует о максимальной схожести ядра и части картинки. Ну вот и всё. Часть изображения, которая максимальна схожа с ядром (буквой L) найдена.
Конечно, такой элементарный алгоритм практически не используется вследствие большой вычислительной сложности. Представьте себе, что на картинке, размеры которой 4000 х 3000 пикселей, вы хотите найти предмет размерами 500 х 500 пикселей. То есть в каждом пикселе будет произведено 250 тысяч операций умножения и сложения. Это достаточно много даже для современных компьютеров. Зато если искать сходство с ядром размером 5 х 5 пикселей, операций будет значительно меньше. Поэтому современные нейронные сети двигаются именно в этом направлении. Они используют конволюцию с небольшими ядрами, но большое количество раз.
На этом я остановлюсь. Надеюсь, статья вам понравилась. Подписывайтесь на мой телеграм-канал и рассказывайте друзьям о моём сайте :).