Продолжая тему нейронных сетей, поговорим о компьютерном зрении

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Продолжая тему нейронных сетей, поговорим о компьютерном зрении. Есть цель: понять, что изображено на картинке. Если человек с этим справляется без проблем, для компьютера фотография будет представлять собой бессмысленную поебень из никак не связанных друг с другом пикселей. Значит, нужно его научить этому! Так как фотографии уникальны, какой-то универсальный алгоритм нам не подойдет - придется клепать нейронную сеть.

Помнишь, в статье про определение языка текста мы изучали кучу примеров на двух языках? Нейросеть сначала обучилась на примерах, а потом сама начала распознавать текст. С фоточками другая проблема. Во-первых, у нас очень мало примеров. Если сравнивать с человеческим мозгом, который учится в течении всей жизни и получает информацию ежесекундно, у компьютера есть какая-то база изображений. Вторая проблема - разбиение картинки на характерные признаки. Не попиксельно же просматривать весь массив данных, нужно как-то формализовать признаки.

Переведем картинку в ч/б - потом поймешь, зачем. Когда человек рассматривает предмет, обычно взгляд цепляется за детали, выбивающиеся из общей картины, так давайте и применим тот же принцип. Один из способов: возьмём и наложим на картинку размытие по Гауссу - фотошопом пользуешься? Незначительные детали размоются, оставив яркие пятна на месте экстремумов - тех самых точек, которые нам интересны. Если мы сравним картинки до и после размытия, разница между точками фона будет незначительной, в то время как точка экстремума сгладится довольно сильно. Отметим это и размоем еще сильнее, повторим процедуру в сравнении с прошлым размытием. Если там были не слишком выделяющиеся места, они размоются, оставив нам те, что выделяются сильнее и которые для нас, безусловно, интереснее. Определить их несложно - достаточно при каждом размытии находить разницу между пикселями с одними координатами и запоминать те, где та самая разница выше порогового значения.

Теперь возьмем кусок изображения возле такой точки и разобьем на маленькие квадратики - например, 2x2 пикселя. Найдем градиент каждого из них. Да-да, математически тот самый градиент - это вектор, указывающий направление наибольшего возрастания функции, в нашем случае от черного к белому. Другими словами, если у нас два черных квадратика сверху, а снизу два белых, то вектор градиента будет направлен вниз, там белее же. Короче, просчитываем градиенты и записываем в массив данных - дескриптор. Обычно в компьютерном зрении столько объектов, что таких дескрипторов нужны сотни, а то и тысячи - зависит от сложности задачи.

Раз у нас есть набор дескрипторов, значит, их можно преобразовать в числа каким-то образом - нужно же как-то сравнить с эталоном. Есть способы сравнения дескрипторов между собой, но это все занимает дохуя времени, в том числе и из-за объемов данных. Поступим проще. Если есть возможность преобразовать в число, значит, можно и нанести на координатную плоскость, разложив по какому-то базису. Например, пусть какой-то дескриптор характеризуется двумя числами (в реальности их бывает гораздо больше). Каждому дескриптору будет соответствовать какая-то точка плоскости. Дескрипторы со всех обработанных нами картинок попадут на эту же плоскость. Оказывается, что дескрипторы у схожих предметов находятся в пределах определенной области - в своем кластере. Окей, тогда давайте с помощью обучающей выборки определим границы этого самого кластера, и каждый новый дескриптор будем наносить на плоскость. Очень упрощенно: если точки оказалась внутри кластера «грифель карандаша» - это, скорее всего, грифель карандаша. Присваиваем дескриптору тип того кластера, в который он попал, ну, а там уже знакомыми методами домножаем типы на их веса, полученные в ходе обучения, и на выходе получаем ответ.

Комментарии: