Нейронная сеть и распознавание

Содержание
  1. Как распознаёт образы человек – и как нейронная сеть
  2. Распознавание образов человеком
  3. Распознавание образов нейронными сетями
  4. Поиск объекта на изображении с помощью полносвёрточных нейронных сетей
  5. Реализация
  6. 1. Особенности применения полносвёрточных нейронных сетей
  7. 2. Сравнение свёрточных и полносвёрточных нейронных сетей
  8. 3. Архитектура
  9. 4. Препроцессинг – формирование датасета (набора данных) для создания модели архитектуры нейросети
  10. 5. Тренировка сети на поиск нужного объекта
  11. Заключение
  12. AlexNet — свёрточная нейронная сеть для классификации изображений
  13. Особенности AlexNet
  14. Датасет ImageNet
  15. Архитектура
  16. Обучение
  17. Примеры использования и реализация
  18. Результат
  19. Анализируем изображения с помощью нейронных сетей
  20. Распознавание рукописных цифр
  21. Распознавание объектов на изображениях
  22. Итоги
  23. Полезные ссылки
  24. Применение нейронных сетей в распознавании рукописного текста
  25. Нейронные сети: практическое применение
  26. Нейронные сети, что это такое?
  27. Как же учится наша нейронная сеть?
  28. Как выглядит архитектура глубины нейронной сети?

Как распознаёт образы человек – и как нейронная сеть

Нейронная сеть и распознавание

В нашей новой рубрике мы публикуем статьи, написанные учёными, работающими в области нейронаук. Сегодня наш автор — Екатерина Малахова, аспирантка сразу двух крупных нейроцентров мира: Института физиологии им. И.Павлова в России и RIKEN в Японии.

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

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

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

Обратите внимание

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

Получение зрительного сигнала — первоочередная, но не самая существенная стадия зрения. Давайте представим видеокамеру, фиксирующую происходящее на пленку: понять, что же происходило во время съёмки, можно будет только после просмотра видеоматериала человеком или дополнительной программной обработки.

Так же обстоят дела и со зрительной системой, в которой важнейшим условием для работы с поступающим сигналом является умение распознавать образы. Человек легко опознает объекты, несмотря на вариации в их размерах, положении и освещении. Эта способность называется инвариантным распознаванием образов. Она есть у людей, обезьян, крыс, цыплят и, по-видимому, у многих других животных.

С появлением глубоких нейронных сетей появилась такая способность и у машин.

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

Распознавание образов человеком

На рис. 1 изображено иерархическое строение зрительной системы. На нижних уровнях изображение можно представить в виде матрицы пикселей.

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

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

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

Рис. 1. Слева: Иерархическое строение зрительной системы с прямым распространением сигнала: от сетчатки к латеральному коленчатому телу (LGN), далее к областям зрительной коры V1, V2, V4, и нижневисочной (IT) коре. Принятие решения на основании поступившего сигнала осуществляется в лобной коре.

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

Справа: Нижние уровни иерархии отвечают за распознавание базовых признаков изображений, таких как углы и линии. Нейроны высоких уровней собирают с нижележащих областей и кодируют информацию о более сложных признаках, таких как сложные формы, объекты и лица.

Изображение взято из “When crowding of crowding leads to uncrowding” by Manassi, M., Sayim, B., & Herzog, M. H. (2013). Journal of Vision, 13 (13), 10-10.

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

Важно

Например, в лаборатории в RIKEN, где я сейчас работаю над диссертацией, в 2013 году опубликовали карту регионов, «занимаемых» отдельными категориями объектов.

Но это лишь начальные шаги к пониманию механизмов работы с информацией на высоких уровнях зрительной системы.

Распознавание образов нейронными сетями

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

Начиная с 2012 года, искусственные нейронные сети получили широкое распространение и практическое применение. Несмотря на то, что архитектура для подобных сетей была предложена еще в 1980 году К.

Фукушимой, вдохновлённым открытиями нобелевских лауреатов Дэвида Хьюбела и Торстена Визеля о строении зрительной системы, технологии позволили создавать глубокие свёрточные нейронные сети (Convolutional Neural Networks, CNNs) и обучать их на больших объемах данных сравнительно недавно. Высокая точность сетей в задачах детектирования, классификации и сегментации образов быстро вытеснила годами разрабатываемые алгоритмы компьютерного зрения.

В отличие от биологических, искусственные нейронные сети гораздо проще изучать. Были разработаны методы визуализации, позволяющие изобразить «идеальный» стимул для каждого нейрона, а также выбрать из предложенных изображений, те, которые вызывают максимальную активацию.

Когда удалось «заглянуть внутрь» сетей, удивительным оказалось их сходство с известными нам данными о работе зрительной системы человека: на нижних слоях, изображение пропускается через всё те же фильтры ориентации линий, цвета и частотности, хотя вручную параметры фильтров не настраивались — они сформировались естественно после просмотра сетью миллионов изображений.

Рис. 2. Архитектура слоев нейронной сети AlexNet. Обозначения слоев: Conv — convolutional, Pool — max-pooling, Norm — normalization.

Архитектура свёрточных нейронных сетей, как уже было упомянуто выше, первоначально создавалась на основе представлений о строении зрительной системы. Наиболее классический вариант архитектуры (см. рис. 2) — AlexNet — включает в себя Convolutional (сверточные), Pooling (объединяющие) и Fully-connected (полностью соединенные) слои.

Свёрточные слои обрабатывают изображение фильтрами небольшого размера. Каждый фильтр кодирует какой-либо графический признак в виде матрицы, например, если говорить о первом слое, это может быть наличие наклонной линии под определенным углом, цветового градиента и т.д.

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

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

Рис. 3. Convolution: Пример применения фильтра 3×3 пикселя к бинарному изображению, размером 5×5 пикселей. В данном случае фильтр предполагает активацию в ответ на Х-образный паттерн, то есть учитываются только пиксели, находящиеся на обеих диагоналях фильтра.

После некоторых свёрточных слоев находятся pooling-слои, которые производят обобщение за счет выбора одного значения из заданного диапазона входного слоя. Чаще всего, это операция max-pooling, то есть выбирается только максимальное значение.

Совет

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

Рис. 4. Pooling: пример обобщения и уменьшения размерности: из определенного региона выбирается одно значение, области не перекрываются.

Каждый нейрон в fully-connected (полносвязном) слое соединен со всеми нейронами предыдущего слоя, получая, таким образом, сигнал со всего рецептивного поля, то есть, изображения целиком.

В архитектуре AlexNet также присутствуют слои нормализации, однако их влияние на результат оказалось минимальным, поэтому постепенно они перестали применяться.

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

Архитектура её соответствует архитектуре, изображённой на рис. 2. В качестве визуализации работы сети приводятся фильтры слоёв, карты их активаций и примеры изображений, вызывающий максимальный ответ в случайно выбранных нейронах слоя. Фильтры слоёв формируются в процессе обучения и не меняются после.

Карты активации же зависят от изображения, поданного в сеть на обработку.

Фильтры первого свёрточного слоя (рис. 5) выделяют простые признаки вроде цвета и наклона линии, они универсальны практически для всех сетей, работающих с изображениями, вне зависимости от выполняемой задачи. Изображения, вызывающие максимальную активацию в нейронах данного слоя, представляют из себя фрагменты небольшого размера, содержащие линии, углы, решетки и так далее.

Рис. 5. Первый свёрточный слой (conv1): a) фильтры слоя. b) карты активации выделенных фильтров. c) фрагменты изображений, вызывающих максимальную активацию отдельного нейрона слоя (для девяти случайно выбранных нейронов представлены 9 лучших фрагментов). d) оригинальное изображение, для которого строились карты активации.

На втором свёрточном слое (рис. 6) фильтры не выглядят настолько же легко интерпретируемыми, размер рецептивного поля увеличивается и изображения, подобранные для визуализации максимальной активации, содержат менее тривиальные формы.

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

Обратите внимание

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

И только в полносвязных слоях сети достигается инвариантное — независимое от положения и размера — распознавание образов.

Рис. 6. Второй свёрточный слой (conv2): a) фильтры слоя. b) карты активации выделенных фильтров. c) фрагменты изображений, вызывающих максимальную активацию отдельного нейрона слоя (для трех случайно выбранных нейронов представлены 9 лучших фрагментов). d) оригинальное изображение, для которого строились карты активации.

Каждый нейрон полносвязного слоя получает информацию от всех нейронов предыдущего слоя, что позволяет учитывать все возможные пространственные локации объектов. Для некоторых нейронов возможно определить признаки/объекты, выделяемые ими на изображениях, для других же это сделать довольно затруднительно (рис. 7).

Рис. 7. Изображения, наилучшим образом активирующие девять случайно выбранных нейронов первого полносвязного слоя (fc6).

Последний из полносвязных слоев содержит количество нейронов, равное количеству классов в исходной задаче классификации, т.е. в случае задачи детекции лица на изображении, этот будет состоять из двух нейронов: один, представляющий категорию «лица», другой — представляющий категорию «не лица» (рис. 8).

Рис. 8. Изображения, наилучшим образом активирующие нейроны последнего полносвязного слоя сети (fc8), обученной для задачи детекции лиц на изображениях. a) нейрон, отвечающий за категорию «не лица». b) нейрон, отвечающий за категорию «лица».

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

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

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

Поиск объекта на изображении с помощью полносвёрточных нейронных сетей

Нейронная сеть и распознавание

Распознавание объектов на изображении с помощью алгоритмов машинного обучения решает многие задачи гораздо эффективнее, чем человеческое зрение.

Скажем, свёрточные нейронные сети нашли широкое применение в задачах классификации, детектирования и распознавания изображений.

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

Важно

В своих исследовательских проектах мы часто обращаемся к методам свёрточных нейронных сетей. В частности, в своём недавнем исследовании по распознаванию кассовых чеков на изображении мы использовали отдельный тип нейросетей – полносвёрточные нейронные сетей.

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

Цель исследования – найти и выделить объект на изображении методом полносвёрточных нейронных сетей.

Исследование выполняется в рамках проекта по распознаванию кассовых чеков. Для достижения поставленной цели исследования требуется натренировать полносвёрточную нейросеть распознавать, где на фото находится объект – кассовый чек, а где фон.

В рамках исследования реализованы следующие стадии:

1. Изучение особенностей применения полносвёрточных нейронных сетей 2. Сравнение свёрточных и полносвёрточных нейросетей 3. Освоение архитектуры полносвёрточной нейронной сети 4. Препроцессинг

5. Тренировка сети на поиск нужного объекта

Реализация

1. Особенности применения полносвёрточных нейронных сетей

Полносвёрточные сети – это особый тип искусственных нейронных сетей, результатом работы которых является сегментированное изображение оригинала, где искомые элементы уже выделены требуемым образом.

Рис. 1. Пример работы полносвёрточной нейронной сети

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

Подобные задачи проблематично решать с использованием простых свёрточных нейросетей.

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

2. Сравнение свёрточных и полносвёрточных нейронных сетей

Самым очевидным отличием полносвёрточных сетей от других нейросетей является конечный результат работы сети. Простые сверточные сети могут использоваться для классификации, определяя к какому классу принадлежит то или иное изображение, и для локализации объекта на изображении (регрессия).

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

Полносвёрточные нейронные сети на выходе выдают сегментированое изображение, соответствующее по размерности входному. Поэтому их второе название – сегментационные нейронные сети.

Сегментация – это объединение объектов в группы по общим признакам. Таким образом, мы получаем от сети намного больше информации, а достигнутый результат можем обработать простыми эвристическими методами.

3. Архитектура

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

При проектировании свёрточных сетей в архитектуру могут добавляться разнообразные слои для повышения точности распознавания (drop out layer, local response normalization layer и т.д.).

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

Совет

Основа работы полносвёрточных сетей – свёртка изображения. Ключевыми слоями являются свёрточные слои (convolution layer). В свёрточном слое указывается количество выходов со слоя, ядро свёртки, его шаг, размеры, отступ.

Операция свёртки проходит ядром по всему изображению, в результате мы получаем величину отклика на ядро свёртки в каждой точке изображения. Количество ядер каждого слоя свёртки равно произведению количества выходов со слоя на количество входных картинок.

Далее результаты проходят через следующий слой свёртки, получая значения уже для других ядер. К каждому свёрточному слою можно добавлять слои регуляризации или нормализации (в зависимости от выбора разработчика).

Прохождение изображений через многие свёрточные слои позволяет получить богатое разнообразие возможных интерпретаций изображения.

Пройдя через требуемое количество слоёв свёртки, изображение затем попадает в слой пулинга (pooling layer). Этот слой уменьшает размер входных изображений, не уменьшая их количества. Слой имеет ядро, которое движется подобно ядру свертки, вычисляя единственное значение для каждой области изображения.

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

Дело в том, что на уменьшенном изображении ядра свёртки того же размера способны захватывать большую область искомого объекта.

Последовательность: convolution/../../convolution/pooling (где количество convolutions layers определяется разработчиком) может повторяться несколько раз, вплоть до того, пока не будет достигнут минимальный размер изображения. Этот размер определяется экспериментально.

Рис. 2. Архитектура полносвёрточной сети

Обратите внимание

Для того чтобы выделенные объекты соответствовали оригинальному масштабу, уменьшенное изображение требуется вернуть к изначальному размеру. Слой upsample (upsample layer) выполняет увеличение изображения.

На каждый выход имеется два входных изображения: первое – это обработанная картинка с предыдущего слоя (это может быть convolution или pooling), второе – это картинка из pooling layer, количество выходов которого равны количеству входов соответствующего upsample, а также размеры выходной картинки pooling равны размеру входной картинки upsample.

Так мы получаем симметричную архитектуру относительно последнего pooling слоя и первого upsample слоя. Между слоями увеличения размеров изображения также помещаются свёрточные слои, но количество выходов с них постепенно уменьшается.

Последовательность upsample/convolution/../../convolution необходима, чтобы привести изображение к исходным размерам, при этом сократив количество возможных интерпретаций изображения до количества искомых групп объектов.

4. Препроцессинг – формирование датасета (набора данных) для создания модели архитектуры нейросети

Для реализации алгоритма полносвёрточной сети в своём исследовании мы используем фреймворк Caffe Segnet – это версия Caffe специально разработанная для полносвёрточных нейронных сетей.

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

Маска – это монохромное изображение, на котором каждая группа объектов определена определенным цветом от 0 до 255. Например, в нашем случае всего 2 группы – чек и фон. Фону присваивается цвет 0, а всей области чека – цвет 1. На рисунке ниже представлен пример пары изображение-маска, а для того чтобы увидеть помеченный чек, его значение цвета установлено в 255.

Рис. 3. Изображение для обучения сети и маска для него

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

5. Тренировка сети на поиск нужного объекта

Большой датасет изображений, который мы подготовили для обучения сети, удобнее формировать в виде двух директорий: оригинал и маска. Пусть каждая маска имеет такое же имя, как и изображение оригинала, тогда алгоритм поиска будет проще, если нужно будет отыскать пару оригинал/маска.

Далее необходимо добавить текстовый файл, содержащий пути к парам изображений, где каждая пара может быть задана как “путь/к/изображению/оригиналу” и “путь/к/изображению/маске”. Одна строка – одна пара.

Данный файл необходимо подавать в сеть, чтобы определить местоположение загружаемых тренировочных данных.

Рис. 4. Архитектура сети для задачи сегментации чека

Первым делом мы загружаем в сеть изображение и его маску.

Затем начинается итерация обучения – изображение проходит через все слои по порядку, а получившийся на выходе результат сравнивается с маской с помощью функции ошибки (loss function).

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

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

Важно

На выходе изображение имеет формат, где каждый пиксель представлен значением от 0.0 до 1.0 в зависимости от принадлежности к какой-либо группе искомых объектов. Поэтому необходимо привести изображение в одноканальное, серое изображение (от 0 до 255).

Затем, для лучшего визуального отображения, результат можно перевести в трёхканальное RGB-изображение, где каждому цветовому значению на сером изображении соответствует свой RGB-цвет.

Рис. 5. Примеры работы обученной сети

Заключение

В процессе решения задачи по поиску необходимого объекта мы изучили новую модель нейронных сетей – полносвёрточную нейронную сеть. В результате изучения сегментационной нейросети мы выявили наиболее ключевые моменты, которые следует учитывать, чтобы значительно повысить качество распознавания:

  • Выборка изображений для тренировки должна быть как можно более полной и разнообразной
  • Изображения выборки должны быть наиболее схожими с теми изображениями, которые ожидаемо будут подаваться во время работы сети
  • Следует максимально точно выполнить разметку объектов
  • При проектировании архитектуры не стоит сильно зацикливаться на каком-то одном варианте – нет универсальной модели архитектуры, которая бы работала хорошо при любой задаче

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

AlexNet — свёрточная нейронная сеть для классификации изображений

Нейронная сеть и распознавание

AlexNet — сверточная нейронная сеть, которая оказала большое влияние на развитие машинного обучения, в особенности — на алгоритмы компьютерного зрения. Сеть с большим отрывом выиграла конкурс по распознаванию изображений ImageNet LSVRC-2012 в 2012 году (с количеством ошибок 15,3% против 26,2% у второго места).

Архитектура AlexNet схожа с созданной Yann LeCum сетью LeNet. Однако у AlexNet больше фильтров на слое и вложенных сверточных слоев. Сеть включает в себя свертки, максимальное объединение, дропаут, аугментацию данных, функции активаций ReLU и стохастический градиентный спуск.

Особенности AlexNet

  • Как функция активации используется Relu вместо арктангенса для добавления в модель нелинейности. За счет этого при одинаковой точности метода скорость становится в 6 раз быстрее.
  • Использование дропаута вместо регуляризации решает проблему переобучения. Однако время обучения удваивается с показателем дропаута 0,5.
  • Производится перекрытие объединений для уменьшения размера сети.

    За счет этого уровень ошибок первого и пятого уровней снижаются до 0,4% и 0,3%, соответственно.

  • Датасет ImageNet

    ImageNet — набор из 15 миллионов помеченных изображений с высоким разрешением, разделенных на 22 000 категорий. Изображения собраны в интернете и помечены вручную с помощью краудсорсинга Amazon’s Mechanical Turk.

    Начиная с 2010 года проводится ежегодный конкурс ImageNet Large-Scale Visual Recognition Challenge (ILSVRC), являющийся частью Pascal Visual Object Challenge. В челлендже используется часть датасета ImageNet с 1000 изображений в каждой из 1000 категорий.

    Всего получается 1,2 миллиона изображений для обучения, 50 000 изображений для проверки и 150 000 — для тестирования. ImageNet состоит из изображений с разным разрешением. Поэтому для конкурса их масштабируют до фиксированного разрешения 256 × 256.

    Если изначально изображение было прямоугольным, то его обрезают до квадрата в центре изображения.

    Архитектура

    Рисунок 1

    Архитектура сети приведена на рисунке 1. AlexNet содержит восемь слоев с весовыми коэффициентами. Первые пять из них сверточные, а остальные три — полносвязные. Выходные данные пропускаются через функцию потерь softmax, которая формирует распределение 1000 меток классов.

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

    Ядра третьего сверточного слоя связаны со всеми картами ядер второго слоя. Нейроны в полносвязных слоях связаны со всеми нейронами предыдущего слоя.

    Таким образом, AlexNet содержит 5 сверточных слоев и 3 полносвязных слоя. Relu применяется после каждого сверточного и полносвязного слоя. Дропаут применяется перед первым и вторым полносвязными слоями. Сеть содержит 62,3 миллиона параметров и затрачивает 1,1 миллиарда вычислений при прямом проходе.  Сверточные слои, на которые приходится 6% всех параметров, производят 95% вычислений.

    Обучение

    AlexNet проходит 90 эпох. Обучение занимает 6 дней одновременно на двух графических процессорах Nvidia Geforce GTX 580, что является причиной того, что сеть разделена на две части.

    Используется стохастический градиентный спуск со скоростью обучения 0,01, импульсом 0,9 и распадом весовых коэффициентов 0,0005. Скорость обучения делится на 10 после насыщения точности и снижается в 3 раза в течение обучения.

    Схема обновления весовых коэффициентов w имеет вид:

    где i — номер итерации, v — переменная импульса, а epsilon — скорость обучения. В ходе всего этапа обучения скорость обучения выбиралась равной для всех слоев и корректировалась вручную. Последующая эвристика заключалась в том, чтобы разделить скорость обучения на 10, когда количество ошибок при проверке переставало уменьшаться.

    Примеры использования и реализация

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

    Через год после публикации AlexNet все участники конкурса ImageNet стали использовать сверточные нейронные сети для решения задачи классификации. AlexNet была первой реализацией сверточных нейронных сетей и открыла новую эру исследований.

    Сейчас реализовать AlexNet стало проще с помощью библиотек глубокого обучения: PyTorch, TensorFlow, Keras.

    Результат

    Сеть достигает следующего уровня ошибок первого и пятого уровней: 37,5% и 17,0%, соответственно.

    Лучшая производительность, достигнутая в ходе конкурса ILSVRC-2010, составляла 47,1% и 28,2% при использовании подхода, в котором усредняются предсказания, полученные шестью моделями с разреженным кодированием, обученных на различных векторах свойств.

      С тех пор достигнуты результаты: 45,7% и 25,7% при использовании подхода, в котором усредняются предсказания двух классификаторов, обучаемых на векторах Фишера. Результаты ILSVRC-2010 приведены в таблице 1.

    Слева: восемь тестовых изображений ILSVRC-2010 и пять ярлыков, которые наиболее вероятны по мнению модели. Правильная метка записывается под каждым изображением, а вероятность показана красной полосой, если она находится в верхней пятерке. Справа: пять тестовых изображений ILSVRC-2010 в первом столбце. В остальных столбцах показаны шесть обучающих изображений.

    Анализируем изображения с помощью нейронных сетей

    Нейронная сеть и распознавание

    В курсе “Глубокое обучение на Python” мы научились обучать нейронные сети для распознавания рукописных цифр и объектов из набора данных CIFAR-10. Давайте посмотрим, как применять эти нейронные сети для анализа своих изображений.

    Распознавание рукописных цифр

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

    Для распознавания рукописных цифр воспользуемся сверточной нейронной сетью.

    Keras содержит специальный модуль для работы с изображениями, который называется image. С его помощью можно быстро загрузить изображение из файла и преобразовать его в массив numpy, который мы можем передать модели для распознавания:

    import numpy as np
    from keras.preprocessing import image # Загружаем изображение
    img_path = '2.png'
    img = image.load_img(img_path, target_size=(28, 28), grayscale=True) # Преобразуем изображением в массив numpy
    x = image.img_to_array(img) # Инвертируем и нормализуем изображение
    x = 255 – x
    x /= 255
    x = np.expand_dims(x, axis=0)

    Загружаем из файла обученную сверточную нейронную сеть:

    json_file = open(“mnist_model.json”, “r”)
    loaded_model_json = json_file.read()
    json_file.close()
    loaded_model = model_from_json(loaded_model_json)
    loaded_model.load_weights(“mnist_model.h5”)

    Компилируем модель перед использованием

    loaded_model.compile(loss=”categorical_crossentropy”, optimizer=”adam”, metrics=[“accuracy”])

    Теперь мы готовы к распознаванию цифры. Для распознавания вызываем метод модели predict:

    prediction = loaded_model.predict(x)
    Совет

    Модель выдает массив из 10 значений в формате One Hot Encoding. Выбираем индекс максимального значения и печатаем его:

    print(np.argmax(prediction))

    [2]

    Распознавание объектов на изображениях

    Давайте рассмотрим более сложную задачу – распознавание объектов на изображении. Будем использовать нейронную сеть, обученную на наборе данных CIFAR-10. Попробуем распознать картинку самолета, которую сеть не видела в процессе обучения:

    Загружаем изображение в Keras:

    import numpy as np
    from keras.preprocessing import image img_path = 'plane.jpg'
    img = image.load_img(img_path, target_size=(32, 32))

    В отличие от рукописных цифр, в этот раз изображение цветное и его размер 32х32, в соответствии с форматом CIFAR-10. Преобразуем картинку в массив numpy:

    x = image.img_to_array(img)
    x /= 255
    x = np.expand_dims(x, axis=0)

    Загружаем сеть, обученную на наборе данных CIFAR-10, и компилируем модель:

    json_file = open(“cifar10_model.json”, “r”)
    loaded_model_json = json_file.read()
    json_file.close()
    loaded_model = model_from_json(loaded_model_json)
    loaded_model.load_weights(“cifar10_model.h5”)
    loaded_model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    Запускаем распознавание объекта:

    prediction = loaded_model.predict(x)

    Для удобства вывода задаем список с названиями классов объектов:

    classes=['самолет', 'автомобиль', 'птица', 'кот', 'олень', 'собака', 'лягушка', 'лошадь', 'корабль', 'грузовик']

    Печатаем результат распознавания:

    print(classes[np.argmax(prediction)])

    [самолет]

    Как видим, нейронная сеть справилась с задачей, несмотря на то, что обучение проводилось на изображениях размером 32х32. Наше изображение пришлось уменьшить до этого размера, но сеть все равно распознала на картинке самолет.

    Давайте попробуем дать нейронной сети более сложную задачу – распознать не фотографию объекта, а рисунок. Например, вот такой рисунок лошади:

    Запускаем программу и получаем результат:

    [лошадь]

    Нейронная сеть сумела распознать объект даже на рисунке, хотя мы обучали ее только на фотографиях!

    Итоги

    Мы научились применять нейронные сети для анализа любых изображений, а не только тех, которые входят в стандартные наборы данных для обучения. В Keras для этого есть класс image из модуля keras.preprocessing.

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

    Полезные ссылки

    Применение нейронных сетей в распознавании рукописного текста

    Нейронная сеть и распознавание

    На сегодняшний день в современном мире активно развивается такая область искусственного интеллекта как нейронные сети. Актуальность разработок в области нейросетей обуславливается их широкими возможностями применения в самых различных областях.

    Функционирование любой системы становится намного эффективнее при помощи решения задач на основе нейронных сетей.

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

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

    В большинстве случаев преобразование сигналов в режиме реального времени приобретает все более распространенную форму.

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

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

    Обратите внимание

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

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

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

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

    По данной теме исследования известно множество публикаций. В публикации Чанчиковой Е. В. [1] рассматриваются сверточные нейронные сети, которые позволяют устранить недостатки полносвязных нейронных сетей, при распознавании рукописных символов.

    На данный момент сверточные сети являются наилучшим алгоритмом распознавания символов с искажениями, например, так называемых CAPTCHA тестов.

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

    Важно

    В статье Князева А. В. [2] рассматривается задача распознавания слитного рукописного текста, а также обсуждаются различные подходы к решению данной задачи, отмечаются достоинства и недостатки рассматриваемых подходов.

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

    В публикации Поповой В. В. [3] рассматривается задача распознавания текста на китайском языке на основе ключей с использованием нейронных сетей. В ней рассмотрены основные этапы процесса распознавания рукописного текста, также приведены результаты исследования.

    Разработанный в данном исследовании алгоритм производит офлайн распознавание рукописного текста на основе разбиения иероглифа на ключи и распознавании ключей с помощью неокогнитрона.

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

  • Свойства почерка ипроблемы его распознавания
  • Рукописный текст содержит алфавит букв, разделительные знаки. Фундаментальное свойство текста, которое делает возможным общение состоит в том что отличия между разными символами более значительны, чем отличия между разными написаниями того же самого символа.

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

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

    Но есть также и исключения — например, в английском языке точки над «i» и пересечения на «t» как правило, задерживаются. Сначала пишется основная часть слова, а потом слово завершается написанием точек или же запятых.

    У всех букв есть статические и динамические свойства. Статистические отличия могут состоять, например, в размере или форме символа. Отличия в динамике могут состоять в количестве штрихов и их порядке.

    Английский язык может иметь более значительные изменения направления штриха, чем китайский. В английском языке также больше вариантов в присутствии или отсутствии повторных штрихов.

    Повторный штрих — это штрих в месте, где что-то уже написано, обычно он делается, чтобы избежать поднимания пера ручки.

    Совет

    Существует множество задач распознавания образов для рукописного текста и рисования на планшетах. Они охватывают отличия языковых символов, формул, например таких, которые используются при редактировании.

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

    Но при этом наибольшие проблемы в распознавании рукописного текста — это те, что вызывают трудности у людей при попытке прочитать даже собственный почерк.

    Во-первых, тот факт, что большинство символов могут быть написаны по-разному. Например, на рис.1 приведены разные возможные стили письма на китайском языке [4], которые передовая система сможет различить и распознать. Также редко можно встретить двух людей с одинаковым почерком.

    Эта задача связана с различием шрифтов в классической задаче распознавания текста. Но в отличие от шрифтов, каждая буква в тексте одного человека может иметь совсем иной стиль в зависимости от контекста, в котором осуществляется написание окружающих букв и многих других факторов.

    Рис. 1 Возможные стили письма на китайском языке

    Чтобы справиться с данной проблемой, множество систем включают в себя компонент, который сам обучается получаемому почерку, различает пользователей, и применяет уже эти данные при принятии решения.

    Во-вторых, несколько символов часто выглядят одинаково, либо практически совсем не отличаются в почерке одного человека.

    Более того, некоторые буквы могут быть написаны неаккуратно, и объективно быть похожими при этом на совершенно другие буквы.

    Обратите внимание

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

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

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

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

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

    Самой популярной и широко исследуемой и применяемой нейронной сетью является многослойный перцептрон — Multi-LevelPerceptron (MLP).

    Такая структура, которая изучается при помощи обратного расширения ошибки, является одной из наиболее популярных и универсальных форм нейронных сетей-классификаторов и одной из наиболее часто используемых для распознавания рукописного текста [5].

    В этом подходе существует много разных методов. Самыми популярными можно назвать нечеткие нейронные сети [6], сеть Хэмминга [7], сеть Хопфилда [8], самоорганизующиеся карты [9] и многие другие.

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

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

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

    Каждый из разработанных алгоритмов обучения сетей имеет свои неоспоримые преимущества, но общим недостатком является ограничение в своих возможностях «обучаться» и «вспоминать».

    При обучении сети входное множество сигналов рассматривается как вектор.

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

    В процессе обучения весы сети постепенно становятся такими, что каждый входной вектор производит выходной вектор. Обучаемые алгоритмы могут быть классифицированы как алгоритмы обучения без учителя и с учителем [10,11].

    Важно

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

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

    Как пример, входные символы могут быть классифицированы соответственно степени их подобности таким образом, что символы одного класса будут активировать тот же выходной нейрон.

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

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

    Методы обучения сети с учителем предусматривают, что существуют пары «вход-выход», то есть известны значение входных векторов, и значения выходных векторов, которые им соответствуют.

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

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

    Совет

    В сетях с обратным расширением, обучающие векторы подаются на вход сети последовательно, до тех пор, пока сеть «не научиться» всему входящему набору.

    Но при этом вполне обученная сеть должна запоминать новый обучаемый вектор, и он может изменить весы настолько, что необходимо будет полное переобучение сети.

    Заключение

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

    В ходе проведенного анализа были выявлены основные преимущества и недостатки нейронных сетей с «учителем» и сетей «без учителя».

    Важной частью любой системы распознавания символов является подсистема сегментации.

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

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

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

    Нейронные сети: практическое применение

    Нейронная сеть и распознавание

    Наталья Ефремова погружает публику в специфику практического использования нейросетей. Это — расшифровка доклада Highload++.

    Добрый день, меня зовут Наталья Ефремова, и я research scientist в компании N-TechLab. Сегодня я буду рассказывать про виды нейронных сетей и их применение.

    Сначала скажу пару слов о нашей компании. Компания новая, может быть многие из вас еще не знают, чем мы занимаемся. В прошлом году мы выиграли состязание MegaFace.

    Это международное состязание по распознаванию лиц. В этом же году была открыта наша компания, то есть мы на рынке уже около года, даже чуть больше.

    Обратите внимание

    Соответственно, мы одна из лидирующих компаний в распознавании лиц и обработке биометрических изображений.

    Первая часть моего доклада будет направлена тем, кто незнаком с нейронными сетями. Я занимаюсь непосредственно deep learning. В этой области я работаю более 10 лет.

    Хотя она появилась чуть меньше, чем десятилетие назад, раньше были некие зачатки нейронных сетей, которые были похожи на систему deep learning.

    В последние 10 лет deep learning и компьютерное зрение развивались неимоверными темпами.

    Все, что сделано значимого в этой области, произошло в последние лет 6.

    Я расскажу о практических аспектах: где, когда, что применять в плане deep learning для обработки изображений и видео, для распознавания образов и лиц, поскольку я работаю в компании, которая этим занимается.

    Немножко расскажу про распознавание эмоций и какие подходы используются в играх и робототехнике.

    Также я расскажу про нестандартное применение deep learning, то, что только выходит из научных институтов и пока что еще мало применяется на практике, как это может применяться, и почему это сложно применить.

    Доклад будет состоять из двух частей. Так как большинство знакомы с нейронными сетями, сначала я быстро расскажу, как работают нейронные сети, что такое биологические нейронные сети, почему нам важно знать, как это работает, что такое искусственные нейронные сети и какие архитектуры в каких областях применяются.

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

    Я расскажу, как работают convolutional neural network (CNN), распознавание изображений на примере из распознавания лиц.

    Важно

    Немного расскажу про рекуррентные нейронные сети recurrent neural network (RNN) и обучение с подкреплением на примере систем deep learning.

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

    Итак, часть первая.

    Нейронные сети, что это такое?

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

    Две трети всей сенсорной информации, которая к нам попадает, приходит с зрительных органов восприятия.

    От одной трети поверхности нашего , в которой расположены две самые главные зрительные зоны — дорсальный зрительный путь и вентральный зрительный путь.

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

    Почему это важно?

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

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

    В далекие 60-е годы прошлого века, когда только начиналось изучение зрительных зон , первые эксперименты проводились на животных, потому что не было fMRI. Исследовали с помощью электродов, вживлённых в различные зрительные зоны.

    Совет

    Первая зрительная зона была исследована Дэвидом Хьюбелем и Торстеном Визелем в 1962 году. Они проводили эксперименты на кошках. Кошкам показывались различные движущиеся объекты.

    На что реагировали клетки , то и было тем стимулом, которое распознавало животное.

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

    Таким же способом были открыты еще многие важные свойства зрительных зон, которые мы используем в deep learning сейчас.

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

    Рецептивное поле — это та часть изображения, которую обрабатывает каждая клеточка нашего . У каждой клетки своё рецептивное поле. Это же свойство сохраняется и в нейронных сетях, как вы, наверное, все знаете.

    Также с возрастанием рецептивных полей увеличиваются сложные стимулы, которые обычно распознают нейронные сети.

    Здесь вы видите примеры сложности стимулов, различных двухмерных форм, которые распознаются в зонах V2, V4 и различных частях височных полей у макак. Также проводятся некоторое количество экспериментов на МРТ.

    Обратите внимание

    Здесь вы видите, как раз, как проводятся такие эксперименты. Это 1 нанометр часть зон IT cortex'a мартышки при распознавании различных объектов. Подсвечено то, где распознается.

    Просуммируем. Важное свойство, которое мы хотим перенять у зрительных зон — это то, что возрастают размеры рецептивных полей, и увеличивается сложность объектов, которые мы распознаем.

    До того, как мы научились это применять к компьютерному зрению — в общем, как такового компьютерного зрения не было. Во всяком случае оно работало не так хорошо, как работает сейчас.

    Все эти свойства мы переносим в нейронную сеть и вот оно заработало помимо небольшого отступления к датасетам, о котором расскажу попозже.

    Но сначала немного о простейшем персептроне.

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

    Простейший персептрон способен выполнять только самые простые операции. Для того, чтобы выполнять более сложные вычисления, нам нужна структура с большим количеством скрытых слоёв.

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

    Итак, что происходит при распознавании изображения, я расскажу на пример лиц.

    Для нас посмотреть на эту картинку и сказать, что на ней изображено именно лицо статуи достаточно просто. Однако до 2010 года для компьютерного зрения это было невероятно сложной задачей.

    Важно

    Те, кто может быть занимался этим вопросом до этого времени, наверное, знают насколько тяжело было описать объект, который мы хотим найти на картинке без слов.

    Нам нужно это было сделать каким-то геометрическим способом, описать объект, описать взаимосвязи объекта, как могут эти части относиться к друг другу, потом найти это изображение на объекте, сравнить их и получить, что мы распознали плохо. Обычно это было чуть лучше, чем подбрасывание монетки. Чуть лучше, чем chance level.

    Сейчас это происходит не так. Мы разбиваем наше изображение на пиксели либо на некие патчи: 2х2, 3х3, 5х5, 11х11 пикселей, как удобно создателям системы, в которой они служат входным слоем в нейронную сеть.

    Сигналы с этих входных слоёв передаются от слоя к слою с помощью синапсов, каждый из слоёв имеет свои определенные коэффициенты. Итак, мы передаём от слоя к слою, от слоя к слою, пока мы не получим, что мы распознали лицо.

    Условно все эти части можно разделить на три класса, мы их обозначим X, W и Y, где Х — это наше входное изображение, Y — это набор лейблов, и нам нужно получить наши веса.

    Как же мы вычислим W?

    При наличии нашего Х и Y это, кажется, просто. Однако то, что обозначено звездочкой, очень сложная нелинейная операция, которая, к сожалению, не имеет обратной. Даже имея 2 заданных компоненты уравнения, очень сложно ее вычислить. Поэтому нам нужно постепенно, методом проб и ошибок, подбором веса W сделать так, чтобы ошибка максимально уменьшилась, желательно, чтобы стала равной нулю.

    Этот процесс происходит итеративно, мы постоянно уменьшаем, пока не находим то значение веса W, которое нас достаточно устроит.

    К слову, ни одна нейронная сеть, с которой я работала, не достигала ошибки, равной нулю, но работала при этом достаточно хорошо.

    Совет

    Перед вами первая сеть, которая победила на международном соревновании ImageNet в 2012 году. Это так называемый AlexNet. Это сеть, которая впервые заявила о себе, о том, что существует convolutional neural networks и с тех самых пор на всех международных состязаниях уже convolutional neural nets не сдавали своих позиций никогда.

    Несмотря на то, что эта сеть достаточно мелкая (в ней всего 7 скрытых слоёв), она содержит 650 тысяч нейронов с 60 миллионами параметров. Для того, чтобы итеративно научиться находить нужные веса, нам нужно очень много примеров.

    Как же учится наша нейронная сеть?

    Она учится на примере картинки и лейбла. Как нас в детстве учат «это кошка, а это собака», так же нейронные сети обучаются на большом количестве картинок. Но дело в том, что до 2010 не существовало достаточно большого data set’a, который способен был бы научить такое количество параметров распознавать изображения.

    Самые большие базы данных, которые существовали до этого времени: PASCAL VOC, в который было всего 20 категорий объектов, и Caltech 101, который был разработан в California Institute of Technology. В последнем была 101 категория, и это было много. Тем же, кто не сумел найти свои объекты ни в одной из этих баз данных, приходилось стоить свои базы данных, что, я скажу, страшно мучительно.

    Однако, в 2010 году появилась база ImageNet, в которой было 15 миллионов изображений, разделённые на 22 тысячи категорий. Это решило нашу проблему обучения нейронных сетей.

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

    Они отвечают достаточно быстро, по-моему, на следующий день.

    По сравнению с предыдущими data set’ами это очень большая база данных.

    На примере видно, насколько было незначительно все то, что было до неё. Одновременно с базой ImageNet появилось соревнование ImageNet, международный Challenge, в который все команды, желающие посоревноваться, могут принять участие.

    В этом году победила сеть, созданная в Китае, в ней было 269 слоёв. Не знаю, сколько параметров, подозреваю, тоже много.

    Как выглядит архитектура глубины нейронной сети?

    Условно ее можно разделить на 2 части: те, которые учится, и те, которые не учится.

    Чёрным обозначены те части, которые не учатся, все остальные слои способны обучаться. Существует множество определений того, что находится внутри каждого сверточного слоя. Одно из принятых обозначений — обозначают один слой с тремя компонентами convolution stage, detector stage и pooling stage.

    Не буду вдаваться в детали, еще будет много докладов, в которых подробно рассмотрено, как это работает. Расскажу на примере.

    Поскольку организаторы просили меня не упоминать много формул, я их выкинула совсем.

    Итак, входное изображение попадает в сеть слоёв, которые можно назвать фильтрами разного размера и разной сложности элементов, которые они распознают. Эти фильтры составляют некий свой индекс или набор признаков, который потом попадает в классификатор. Обычно это либо SVM, либо MLP — многослойный перцептрон, кому что удобно.

    По образу и подобию с биологической нейронной сетью объекты распознаются разной сложности. По мере увеличения количества слоёв это все потеряло связь с cortex’ом, поскольку там ограничено количество зон в нейронной сети. 269 много-много зон абстракции, поэтому сохраняется только увеличение сложности и количество элементов и увеличение рецептивных полей.

    Обратите внимание

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

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

    Есть люди, которые утверждают, что человек всегда распознаёт лучше, чем сеть. Так ли это?

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

    Они взяли 2 самые лучшие на данный момент сети — это AlexNet и сеть Мэттью Зиллера и Фергюса, и сравнили с откликом разных зон макаки, которая тоже была научена распознавать какие-то объекты.

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

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

    Оказалось, что в нормальных условиях клетки реагировали так же хорошо, как и state of the art model на тот момент, то есть сеть Мэттью Зиллера.

    Важно

    Однако при увеличении скорости показа объектов, увеличении количества шумов и объектов на изображении скорость распознавания и его качество нашего и приматов сильно падают. Даже самая простая сверточная нейронная сеть распознаёт объекты лучше. То есть официально нейронные сети работают лучше, чем наш .

    Какие есть классические задачи, которые способны выполнять сверточные нейронные сети?

    Их на самом деле не так много, они относятся к трём классам.

    Среди них такие задачи, как идентификация объекта, семантическая сегментация, распознавание лиц, распознавание частей тела человека, семантическое определение границ, выделение объектов внимания на изображение и выделение нормалей к поверхности. Их условно можно разделить на 3 уровня: от самых низкоуровневых задач до самых высокоуровневых задач.

    На примере этого изображения рассмотрим, что делает каждая из задач.

    • Определение границ — это самая низкоуровневая задача, для которой уже классически применяются сверточные нейронные сети.
    • Определение вектора к нормали позволяет нам реконструировать трёхмерное изображение из двухмерного.
    • Saliency, определение объектов внимания — это то, на что обратил бы внимание человек при рассмотрении этой картинки.
    • Семантическая сегментация позволяет разделить объекты на классы по их структуре, ничего не зная об этих объектах, то есть еще до их распознавания.
    • Семантическое выделение границ — это выделение границ, разбитых на классы.
    • Выделение частей тела человека.
    • И самая высокоуровневая задача — распознавание самих объектов, которое мы сейчас рассмотрим на примере распознавания лиц.

    Как у нас происходит распознавание лиц?

    Первое, что мы делаем — пробегаем face detector'ом по изображению для того, чтобы найти лицо. Далее мы нормализуем, центрируем лицо и запускаем его на обработку в нейронную сеть. После чего получаем набор или вектор признаков однозначно описывающий фичи этого лица.

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

    Именно таким образом работает наш продукт FindFace — это бесплатный сервис, который помогает искать профили людей в базе «ВКонтакте».

    Кроме того, у нас есть API для компаний, которые хотят попробовать наши продукты. Мы предоставляем сервис по детектированию лиц, по верификации и по идентификации пользователей.

    Сейчас у нас разработаны 2 сценария. Первый — это идентификация, поиск лица по базе данных. Второе — это верификация, это сравнение двух изображений с некой вероятностью, что это один и тот же человек. Кроме того, у нас сейчас в разработке распознавание эмоций, распознавание изображений на видео и Liveness Detection — это понимание, живой ли человек перед камерой или фотография.

    Немного статистики. При идентификации, при поиске по 10 тысячам фото у нас точность около 95% в зависимости от качества базы, 99% точность верификации.

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

    Совет

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

    Очень быстрый поиск, затрачивается 0,5 секунд на обработку 1 миллиарда фотографий. Нами разработан уникальный индекс быстрого поиска.

    Также мы можем работать с изображениями низкого качества, полученных с CCTV камер. Мы можем обрабатывать это все в режиме реального времени.

    Можно загружать фото через Web интерфейс, через Android, iOS и производить поиск по 100 миллионам пользователей и их 250 миллионам фотографий.

    Оцените статью
    Просто о технологиях
    Добавить комментарии

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: