Копируем человеческий мозг: операция «Свертка»

в 18:42, , рубрики: Компьютерное зрение, машинное обучение, нейронные сети, свёрточная нейросеть

Чему уже научились сверточные искусственные нейронные сети (ИНС) и как они устроены?

1. Предисловие.

Такие статьи принято начинать с экскурса в историю, дабы описать кто придумал первые ИНС, как они устроены и налить прочую, бесполезную, по большей части, воду. Скучно. Опустим это. Скорее всего вы представляете, хотя бы образно, как устроены простейшие ИНС. Давайте договоримся рассматривать классические нейронные сети (типа перцептрона), в которых есть только нейроны и связи, как черный ящик, у которого есть вход и выход, и который можно натренировать воспроизводить результат некой функции. Нам не важна архитектура этого ящика, она может быть очень разной для разных случаев. Задачи, которые они решают — это регрессия и классификация.

2. Прорыв.

Что же такого произошло в последние годы, что вызвало бурное развитие ИНС?
Ответ очевиден — это технический прогресс и доступность вычислительных мощностей.

Приведу простой и очень наглядный пример:

2002:
image
Earth Simulator – один из самых быстрых в мире вычислительных комплексов. Он был построен в 2002 году. До 2004 года эта машина оставалась самым мощным вычислительным устройством в мире.

Стоимость: $350.000.000.
Площадь: четыре теннисных корта,
Производительность: 35600 гигафлопс.

2015:
image
NVIDIA Tesla M40/M4: GPU для нейронных сетей

Стоимость: $5000
Площадь: помещается в карман,
Производительность: До 2,2 Терафлопс производительности в операциях с одинарной точностью с NVIDIA GPU Boost

Итогом такого бурного роста производительности стала общедоступность ресурсоемких математических операций, что позволило испытать давно зародившиеся теории на практике.

3. Операция свертки.

Одной из ресурсоемких в реализации теорий, а точнее методом, который требует очень больших мощностей, является операция свертки.

Что же это такое?
Попробуем разложить всё по полочкам:

Котики

image
Экспериментируя на животных, David Hubel и Torsten Wiesel выяснили, что одинаковые фрагменты изображения, простейшие формы, активируют одинаковые участки мозга. Другими словами, когда котик видит кружочек, то у него активируется зона “А”, когда квадратик, то “Б”. И это сподвигло ученых написать работу, в которой они изложили свои идеи по принципам работы зрения, а затем они это подтвердили опытами:

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

Математика

image
Графические редакторы давно используют математику для изменения стиля изображения, но как оказалось, те же самые принципы можно применить и в области распознавания образов.
Если мы рассмотрим картинку как двумерный массив точек, каждую точку — как набор значений RGB, а каждое значение — это просто 8-ми битовое число, то получим вполне себе классическую матрицу. Теперь возьмем и придумаем свою, назовем её Kernel, матрицу, и будет она такой:
image

Попробуем пройтись по всем позициям, от начала и до конца матрицы изображения и перемножить наш Kernel на участок с таким же размером, а результаты сформируют выходную матрицу.

image

Вот что мы получим:
image

Взглянув на секцию Edge Detection мы увидим, что результатом являются грани, т.е. мы легко можем подобрать такие Kernel, которые на выходе будут определять линии и дуги разной направленности. И это именно то что нам нужно — фичи изображения первого уровня. Соответственно, можно предположить, что применив те же действия еще раз, мы получим комбинации фич первого уровня — фичи второго уровня (кривые, окружности и т.п.) и это можно было бы повторять очень много раз, если бы мы не были ограничены в ресурсах.

Вот пример наборов Kernel матриц:
image
image

А вот так выглядит фича-экстрактор от слоя к слою. На пятом слое уже формируются очень сложные фичи, например глаза, образы животных и прочего вида объекты, на которые и натренирован экстрактор.

image

Сначала разработчики пытались сами подобрать Kernel, но вскоре выяснилось, что его можно получить обучением, и это намного эффективнее.

Подводные камни

Поняв, как работают мозги котов и как применить математический аппарат, мы решили создать свой фича-экстрактор! Но… подумав сколько фич нужно извлекать, сколько уровней извлечения нам надо и, прикинув, что для нахождения сложных образов мы должны анализировать сочетания фич “каждая с каждой” мы поняли, что памяти для хранения этого всего нам точно не хватит.
На помощь вновь пришли математики и придумали операцию объединения (pooling).
Суть ее проста — если в определенной области присутствует фича высокого уровня, то можно откинуть другие.
image

Такая операция не только помогает экономить память, но и избавляет от мусора и шумов на изображении.

На практике чередуют слои свертки и объединения несколько раз.

image

Финальная архитектура.

Применив всё, что описано выше, можно получить вполне рабочую архитектуру фиче-экстрактора, не хуже, чем у кошки в голове, более того, в настоящее время точность распознавания компьютерного зрения достигает в отдельных случаях >98%, а, как подсчитали ученые, точность распознавания образа человеком составляет в среднем 97%. Будущее пришло, Скайнет наступает!

Вот примеры нескольких схем реальных фича-экстракторов:
image
image
image

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

Это видео просто шикарно демонстрирует как работают фича-экстракторы:

4. Кто всем заправляет?

1. Tensorflow

Свободная программная библиотека для машинного обучения.
Практически всё, что делает сервисы Google такими умными использует эту библиотеку.

Пример того, что дает Inception-v3 (классификатор изображений от Google, построенный на Tensorflow) и натренированный на ImageNet наборе изображений:
image

2. MS Cognitive Services (The Microsoft Cognitive Toolkit)

Компания Microsoft пошла другой дорогой, она предоставляет готовые API, как за деньги, так и бесплатно, с целью ознакомления, но лимитируя количество запросов. API — очень обширные, решают десятки задач. Это всё можно попробовать прямо на их сайте.
Можно, конечно, использовать MSCT так же как и TF, там даже синтаксис и идея очень похожи, оба описывают графы с заглушками, но ведь зачем тратить время, когда можно использовать уже обученные модели?
image

3. Caffe (Caffe2)

Открытая библиотека, фрэймворк на котором можно построить любые архитектуры. До недавнего времени был самым популярным. Существует множество готовых (натренированных) бесплатных моделей сетей на этом фрэймворке.

Яркий пример применения Caffe:
Rober Bond, используя натренированную на распознавание котов сеть, соорудил автоматизированную прогонялку котов с его газона, которая при обнаружении кота на видео, поливает его водой.
image

Существует еще много разных, популярных в свое время библиотек, оберток, надстроек: BidMach, Brainstorm, Kaldi, MatConvNet, MaxDNN, Deeplearning4j, Keras, Lasagne(Theano), Leaf, но лидером считается Tensorflow, в силу своего бурного роста за последние два года.

5. Области применения (вместо заключения)

В конце статьи хочу поделиться некоторыми яркими примерами использования сверточных сетей:

Область применения Коментарии Ссылки
Распознавание рукописного текста Точность человека — 97.5% CNN — 99.8% Визуализация образов натренированной сети в TF, JS интерактивная визуализация работы свертки, MNIST
Компьютерное зрение CNN распознает не только простые объекты на фото, но и эмоции, действия, а еще анализирует видео для автопилотов (семантическая сегментация). Эмоции, Семантическая сегментация, Skype Caption бот, Google Image поиск
3D реконструкция Создание 3D моделей по видео Deep stereo
Развлечение Стилизация и генерация картинок Deep dream, Deep style, Перенос стиля на видео, Генерация лиц, Генерация различных объектов
Фото Улучшение качества, оцветнение Face Hallucination, Colorizing
Медицина Создание лекарств
Безопасность Обнаружение аномального поведения (Свертка + Реккурентрость) Пример 1, 2, 3
Игры В итоге сеть играет круче профессионала, выбивая дырку и специально загоняя туда шар. Atari Breakout

Автор: verych

Источник

Поделиться

* - обязательные к заполнению поля