Недавно ZlodeiBaal писал о достижениях в сверточных нейронных сетях (CNN) (и, кстати, тут же успешно настроил и обучил сеть для поиска области автомобильного номера).
А я хочу рассказать про принципиально иную и, наверное, более сложную модель, которую сейчас развивает Алексей Редозубов (
AlexeyR), и про то, как мы, конечно проигнорировав некоторые важные элементы, и ее применили для распознавания автомобильных регистрационных знаков!
В статье несколько упрощенно напомню о некоторых моментах этой концепции и покажу, как оно сработало в нашей задаче.
Если потратить немного время на чтение последних новостей из нейробиологии, то любому, кто знаком с вычислительными нейросетями, станет несколько не по себе. Более того, может появиться пароноидальная мысль: «может зря вообще из нейронов пытаются собрать ИИ, может нейроны там не главные?» Нейроны проще было исследовать из-за их электрической активности. Например, глиальных клеток значительно больше, чем нейронов, а с их функцией не все понятно.
И не покидает общее впечатление, что те, кто занимается Deep learning, пользуются представлениями ученых 40х-60х годов, не спеша особенно разбираться в огромном массиве исследований нейробиологов.
AlexeyR замахнулся на концепцию работы
Лично для меня важная проверка адекватности идеи — ее конструктивность. Можно ли вооружиться этой идеей и соорудить что-нибудь реально работающее?
Здесь постараюсь вас убедить, что концепт конструктивен и очень перспективен в том числе и с практической точки зрения.
Для начала приведу мои трактовки основных позиций идей Редозубова, которые мне кажутся важными:
Неклассический нейрон и волновые идентификаторы
Ученые давно заметили, что на теле нейрона вне синаптических щелей есть еще и метаботропные детекторы, которые не очевидно что делают. Вот на них можно возложить оригинальный механизм запоминания строго определенной окружающей этот детектор активности. При этом происходит одиночный спайк нейрона (его называют спонтанным), на котором располагается этот детектор. Такой не хитрый механизм позволяет запомнить и распространить уникальным узором информационную волну. В этой серии статей можно найти исходник этой модели. Вообще, это очень похоже на распространение слухов в социальной группе. Не обязательно всем жить рядом и собираться вместе, чтобы информация распространялась. Важно лишь чтобы связи с соседями были довольно плотные.
Честно говоря, я бесконечно далек от клеточной нейрофизиологии, но даже после прочтения статьи на вики, допустить существование иного способа передачи информации, отличного от синаптического, могу.
Второе, следующее из первого
Различные зоны
— позиция (скажем, позиция проекции объекта на сетчатке);
— время (субъективное ощущение времени человеком);
— масштаб;
— частоту звука;
— цвет
и т.д.
И будем пользоваться пакетным описанием, т.е. просто списком таких дискретных идентификаторов для описания того, что узнала зона.
Третье
Вот тут все с ног на голову относительно того, к чему все привыкли с Хьюбела и Визела
Небольшой экскурс в историю:
В 1959г. Хьюбел и Визел поставили интереснейший эксперимент. Они посмотрели, как в зрительной коре первого уровня нейроны откликаются на различные стимулы. И обнаружили некоторую организацию в ней. Одни нейроны реагировали на один наклон зрительного стимула, другие на другой. При этом внутри одной миниколонки (вертикальная структура из 100-300 нейронов в неокортексе) все нейроны реагировали на одинаковые стимулы. Потом появились сотни, если не тысячи, исследований уже с современным оборудованием, где селективность к чему только не обнаруживали в различных зонах. И к наклону, и к пространственной частоте, и к позиции, и скорости движения, и к частоте звука. Какой релевантный для заданного участка
В зависимости от частоты звука А1
И вполне естественно сделать из этого вывод, что нейроны по мере обучения меняют синаптические веса так, чтобы узнавать линию или границу определенного наклона в своей рецептивной зоне. Следуя этим идеям, Лекун и построил сверточные сети.
Но будет куда эффективнее, говорит Алексей Редозубов, если эта миниколонка запомнит на себе совсем не конкретную фичу, а контекст. Контекст, например, — угол поворота. Второй контекст — позицию, третий — масштаб. А фичи будут вообще общие для некоторой окрестности на коре.
Таким образом, нужны самоорганизующиеся карты не для входной картинки (в визуальной коре), а самоорганизующиеся карты различных контекстов, релевантных зрительной коре. При этом близость этих контекстов можно оценить либо за счет их временной близости, либо за счет близости кодов идентификаторов.
И зачем нужна эта сложность с контекстом? А затем, что любая информация, с которой мы имеем дело, выглядит совершенно по-разному в зависимости от контекста. В отсутствии какой-либо априорной информации о текущем контексте, в котором находится наблюдаемая сущность, необходимо рассмотреть все возможные контексты. Чем в рамках предлагаемой модели и будут заниматься миниколонки неокортекса.
Такой подход — это лишь трактовка тех же сотен или тысяч экспериментов про самоорганизацию в коре
1) я вижу наклоненную на 45 градусов границу относительно вертикали.
2) я вижу вертикальную границу, наклоненную на 45 градусов.
Кажется, что это одно и тоже. Но в случае второй трактовки можно обнаружить точно такую же активность в той же самой миниколонке, если мы покажем, скажем, лицо человека: «я вижу вертикальное лицо, наклоненное на 45 градусов». И зона не будет ограничена восприятием лишь одного типа объектов.
А с другой стороны, контекст и узнаваемое явление поменяются местами в другой зоне. Так, например, существуют два пути, по которому анализируется визуальная информация: dorsal и vental. Для «dorsal stream» контекст — расположение в пространстве, направление движения и др. А для «vental stream» контекстом могут являться характеристики наблюдаемого объекта, даже тип объекта. Если один из визуальных потоков обработки будет поврежден, то человек не станет слепым. Возникнут проблемы с восприятием сразу нескольких объектов одновременно, но со временем способность к восприятию нескольких объектов и взаимодействию с ними частично возвращается. Т.е. неплохое описание объекта получается и в «dorsal stream», и в «vental stream». А лучше совсем не болеть и, с одной стороны, рассматривать различные гипотезы по положению, ориентации, а с другой, гипотезы вида «я вижу человека», «я вижу голову», «я вижу стул». Десятки миллионов и тех и других гипотез одновременно анализируются в зрительном тракте.
А теперь, собственно, об алгоритме распознавания автомобильных номеров, который основан на идеях
AlexeyR.
Распознавание автомобильных номеров
Начну с примеров распознавания автомобильных номеров.
Кстати, тут не используются границы номера, т.е. этот метод распознавания вообще мало похож на классические алгоритмы. Благодаря этому не теряются драгоценные проценты из-за первичной ошибки определения границ номера. Хотя, именно с этим подходом, ничего не потерялось бы.
Архитектура
Чтобы распознать автомобильные номера, мы использовали 2 зоны:
1) Первая зона узнавала все, что похоже на буквы и цифры в автомобильном номере.
Входная информация — изображения.
При этом было 5 параметров, по которым была разбита вся зона:
— положение по X
— положеие по Y
— ориентация
— масштаб по оси X
— масштаб по Y
В итоге вышло около 700 000 гипотез. Что даже для видеокарты на ноутбуке не стало большой проблемой.
выход зоны — описание вида:
знак такой-то, положение, ориентация, масштаб.
визуализация выхода:
Заметно то, что далеко не все знаки удавалось распознать на этом уровне, было полно ложных срабатываний, если номер был достаточно грязный.
2) Вторая зона
входная информация — выход первой зоны.
Занималась перспективными преобразованиями. Гипотез было около 6 млн. И единственный устойчивый паттерн, который узнавался тут — автомобильный номер в формате 6 знаков большего масштаба слева и 3 знака меньшего справа.
Проверялись все возможные перспективные преобразования. В одном из вариантов знаки из зоны 1 «складывались» наилучшим образом в известный нам паттерн автомобильного номера. Этот максимум и побеждал.
Но мы знаем, в каких контекстах должны быть знаки при заданном перспективном преобразовании, поэтому можем спроецировать их обратно на первую зону и найти уже корректные локальные максимумы в пространстве первой зоны.
Время на выполнение этого алгоритма составило около 15с на не самой быстрой NVIDIA GF GT 740M.
Еще примеры распознавания
Особенно показательны 3 и 4 столбцы автомобильных номеров.
Можно закрыть половину (и даже больше) знака, но все равно выберется единственная верная гипотеза о положении и ориентации автомобильного знака, т.к. нам известна его модель. Это фундаментальное свойство человеческого
А на четвертом примере из-за неидеальности работы первой зоны большинство цифр «потерялось». Но опять же, за счет представления о том, как выглядит автомобильный номер, была верно выбрана гипотеза о перспективном преобразовании. И уже за счет обратного проецирования на первую зону информации о том, где должны быть знаки, номер успешно распознается! Часть информации была потеряна, но восстановлена за счет того, что мы знаем — «именно там должны быть цифры и буквы».
Обучение
Непосредственно в приведенном примере обучение проводилось, с одной стороны, простейшее: «один раз показали и запомнили». А с другой стороны, чтобы получить сильный алгоритм распознавания, достаточно было просто предъявить 22 знака для первой зоны и один автомобильный номер для второй зоны. Это сверхбыстрое обучение. Не нужно было тысяч изображений.
Конечно, данные не были зашумлены помехами, все релевантные признаки были определены заранее, поэтому в данной реализации самообучение не развернулось в полной мере.
Но в концепции заложен необычный и мощный механизм самообучения. Точнее, тут необходимо обучать двум вещам:
1) Как одни и те же «фичи» преобразуются в различных контекстах. И ответить на не менее сложный вопрос: а что есть контекст для данной зоны? Интуитивно кажется, что для звука — частота и темп. Для движений — направление движения и темп. Для изображений — для какой зоны 2D преобразования, для какой-то уже 3D.
2) Найти устойчивые ситуации, т.е. набор фич, проявляющиеся часто в разных контекстах.
За последние несколько месяцев получилось кое-что сделать и в направлении самообучения. Так, например, при работе с визуальными образами объекту достаточно дважды появиться в кадре в различном контексте (масштаб, ориентация, положение) и удается получить его портрет, который затем пригоден для распознавания, несмотря на достаточно сложный фон и помехи. Все это выглядит, как сверхбыстрое самообучение.
К сожалению, подробное описание механизмов самообучения останется за рамками этой статьи.
А сверточные сети Яна Лекуна?
Сверточные сети (CNN) тоже прекрасно вписываются в эту модель. Свертка с ядрами производится для каждой позиции X,Y. Т.е. на каждом уровне в каждой позиции ищут одно из воспоминаний (ядер), таким образом позиция — тот самый контекст. И даже необходимо расположение рядом близких позиций, т.к. это используется на следующем уровне downsample, где выбирается локальный максимум из 4 точек. За счет этого получается обучать нейронную сеть сразу для всех позиций на изображении. Иными словами, если мы обучились узнавать кошечку в левом верхнем углу, то определенно узнаем ее и в центре. Стоит только заметить, что мы не сможем сразу узнать ее, повернутую на 45 градусов, или иного масштаба. Потребуется большая обучающая выборка для этого.
Сверточные сети за счет такого механизма устройства стали очень мощным инструментом в умелых руках. Но есть несколько недостатков, которые компенсируются различными методами, но являются принципиальными:
— уже зафиксирован только контекст положения, хотя даже при работе с изображениями важны ориентация, масштаб, перспектива, скорости движения при работе с видео и другие параметры;
— а значит нужно увеличивать обучающую выборку, т.к. у сверточной сети не заложен механизм преобразования, кроме перемещения, и надеяться, что остальные закономерности «всплывут» после длительного обучения;
— нет механизма «запоминания всего», только изменение весовых коэффициентов. Однажды увиденное уже не поможет при дальнейшем обучении, а значит обучающую выборку нужно правильно организовывать и в любом случае снова увеличивать. Иными словами: память отделена от архитектуры CNN.
— потеря информации при downsample и последующем upsample (в автоенкодерах на базе CNN), т.е. если строить обратную связь или обратную проекцию в CNN, то возникают проблемы с точностью воспроизведения;
— каждый следующий уровень так и продолжает оперировать пространственной инвариантностью «в плоскости», а на высших уровнях из-за отсутствия конструктивных идей снова приходят, например, к полносвязной архитектуре;
— достаточно сложно отслеживать и отлаживать те «модели», которые сформулировались в ходе обучения, да и не всегда они корректны.
Можно и усилить сверточные сети, например «зашить» еще несколько параметров, кроме X,Y. Но вообще-то надо развивать не самые простые алгоритмы самоорганизации карты контекстов, организовать «перетрактовку» воспоминаний, обобщение в разных контекстах и многое другое, что не совсем похоже на базовые идеи CNN.
Заключение
Одного примера с распознаванием номеров, реализованного весьма урезанным образом, конечно, недостаточно, чтобы говорить о том, что у нас в руках новая конструктивная модель устройства
AlexeyR готовит примеры с классическим MNIST на одной зоне, самообучением нескольких зон для распознавания речи. Кроме того, мы учимся работать с менее структурированной информацией — лицами людей. Тут уже не обойтись без мощного самообучения. И именно эти практические примеры заставляют буквально каждые 2 недели пересматривать некоторые детали концепции. Можно сколько угодно красиво рассказывать о стройной концепции и писать отличные книги, но куда важнее создать реально работающие программы.
В результате, шаг за шагом, должна получиться достаточно развитая модель, которая будет значительно универсальнее существующих CNN или, скажем, RNN по отношению к входной информации, порою обучающаяся буквально с нескольких примеров.
Приглашаем Вас следить за развитием модели в этот блог и блог
AlexeyR!
Автор: Recognitor