Откуда нейросеть знает, что на картинке котик? Все, что вы хотели знать о сверточных нейросетях |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-11-11 09:04
Вы наверняка слышали такой термин: компьютерное зрение, но задумывались ли вы, что за ним стоит? Как может компьютер что-то видеть, да еще и понимать, что он увидел? На эти и другие вопросы я собираюсь ответить в этой статье. Как компьютер работает с изображениями?
Единственное, с чем умеет работать компьютер – это числа. Поэтому все картинки в представлении компьютера, будь то милые животные, мемы или обои на рабочий стол – это просто набор чисел. Каждый пиксель картинки можно окрасить только в один цвет, поэтому в представлении компьютера это просто матрица (таблица) пикселей. Значение в каждой ячейке такой матрицы – инструкция компьютеру: "данный пиксель окрасить в такой-то цвет". Но как задать цвет числом? Существует множество способов: мы остановимся на черно-белых изображениях и rgb-системе. Мы же уже узнали о полносвязной нейросети, почему она не может обрабатывать картинки?
Если коротко: может, но делает это плохо. Сейчас я расскажу почему. Но для начала согласитесь, что сложно воспринимать информацию, не имея перед глазами примера. Поэтому давайте возьмем картинку котика, и поделим ее на условные пиксели. Так мы будем примерно понимать, как картинку видит компьютер. Картинка в условном представлении компьютера Скажу еще раз: сетка на картинке – это не пиксели, но для простоты мы будем считать это пикселями. Нумерация сделана для удобства (и да, матрицы нумеруются с нуля в компьютере). Давайте для удобства временно представим, что цвет в каждой клеточке задается только одним числом. Так будет проще. Вытянутый в линию котик На самом деле, вы уже знаете, что здесь котик, но если бы не знали, вам было бы труднее понять, что это кот. А если бы мы не пользовались условными пикселями, вы бы вообще не поняли, кто здесь изображен. Ваш мозг выделяет какие-то абстрактные признаки. Вы видите, что много пикселей одного цвета образуют треугольник, а ваш мозг подсказывает: это кошачье ухо, вы видите много черных пикселей и по краям коричневые, а мозг говорит: это глазки. Операция свертки
Очередное страшное слово, обозначающее простую операцию. 1 | 0 | 1 | 0 Теперь возьмём другую матрицу 2 на 2 – будем называть ее фильтр. 0 | 1 Теперь мы можем представить себе свертку. Мы накладываем фильтр на нашу матрицу и умножаем число матрицы на соответствующее число фильтра. Затем мы складываем все произведения и получаем один элемент результативной матрицы. Дальше мы сдвигаем фильтр на один элемент. После проделываем все то же самое, пока фильтр не дойдет до конца. 1*0+0*1+0*1+1*0 | 0*0+1*1+1*1+0*0 | 1*0+0*1+0*1+1*0 Или, если посчитать: 0 | 2 | 0 Чтобы было легче понять, вот анимированный пример. Из него несложно увидеть, как получается число в зеленой матрице. Синяя матрица – исходная, зеленая – результативная, а темная область, которая перемещается по зеленой матрице – и есть наш фильтр. Операция свертки Например, самый верхний левый пиксель зеленой картинки получается так: Безжалостная свертка котика Вот это темно-синяя табличка, которая "ездит" по изображению котика и есть наш фильтр. Единички на нем отмечены так, чтобы он реагировал на ухо. Действительно, если мысленно соединить единички ломанной линией, то получится контур левого (левого для нас, правого – для котика) уха. Поэтому когда такой фильтр наложится на ухо, получится большое число: 10, по мере удаления фильтра от уха число становится все меньше и меньше. А когда фильтр вообще не перекрывает ухо, число обращается в 0.
В итоге мы получаем изображение меньшего размера, отсюда и название – "свертка". Применив свертку к новому изображению несколько раз, мы добьемся того, что каждый пиксель будет содержать информацию о большой части картинки, и такое изображение уже можно растянуть в прямую и отдать полносвязной сети без потери значительной информации. Причем здесь нейросети
У читателя, наверное, появился вполне справедливый вопрос: причем тут нейросеть? Помните фильтры, которые проходятся по изображению? В этих фильтрах лежат абстрактные признаки: в одном – ушко, в другом – носик, в третьем – лапки и так далее. Эти фильтры составляет не человек, иначе вам бы не рассказывали о них в статье о машинном обучении. Изначально эти фильтры заполнены случайными числами, их никак нельзя интерпретировать, нейросеть просто не знает, что за признаки есть на картинке.
После такого обучения мы можем отдать нейросети картинку котика, которого она никогда раньше не видела и с восторгом заметить, что модель правильно определила, кто на картинке. А если мы визуализируем фильтры, которые нейросеть настроила, то с еще большим восторгом обнаружим, что это не какие-то непонятные рисунки, а очертания лапок, ушек, хвостика, усиков, мордочки и так далее. То есть нейросеть выделила те же признаки, что и человек, когда смотрит на животных. Такое выделение признаков, понятных человеку, свойственно всем сверточным нейросетям. Надеюсь, после прочтения этой статьи, вы поняли, как нейросеть узнает что на картинке котик. Математика в сочетании с большими вычислительными мощностями способна на удивительные вещи. Источник: smartiqa.ru Комментарии: |
|