Краткая история

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

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

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

Экстрактор функций

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

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

Почему свертка?

Свертка - это процесс, при котором сеть пытается пометить входной сигнал, ссылаясь на то, что она узнала в прошлом. Если входной сигнал выглядит как предыдущие изображения кошки, которые он видел раньше, опорный сигнал «кошка» будет свернут или смешан с входным сигналом. Результирующий выходной сигнал затем передается на следующий уровень (здесь входной сигнал представляет собой трехмерное представление входного изображения с точки зрения интенсивности пикселей RGB, тогда как эталонный сигнал «кошка» - это ядро, изученное для распознавания кошек).

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

Объединение

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

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

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

Полностью связанный слой

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

Окончательная архитектура

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

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

Сверточные нейронные сети

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

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

Шаги

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

Заполнение

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

Совместное использование параметров

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

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