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

Возьмем для примера распознавание изображений.

Посмотрите следующую коллекцию изображений:

Это образец из конкурса ImageNet Large Scale Visual Recognition Challenge. Задача состоит в том, чтобы собрать 1,2 миллиона изображений, которые необходимо разделить на 1000 категорий.

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

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

Я знаю, что не стал бы. Я ужасно различаю породы собак

В среднем люди делают около 5 ошибок на каждые 100 изображений, что соответствует ошибке классификации 5%.

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

Но потом случилось кое-что интересное.

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

Люди обратили внимание, и в следующем году все использовали нейронные сети.

Затем в 2014 году произошло нечто удивительное. Команда Oxford Visual Geometry Group выиграла соревнование с поразительной оценкой в ​​7,4%.

Это было потрясающе. Алгоритм, получивший название VGG16, работал всего на 2% хуже, чем человеческий.

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

Как Оксфорду это удалось?

Они использовали революционно новую концепцию под названием Свертка.

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

Вот что это значит ...

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

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

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

Свертка решает все это.

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

Команда Оксфорда выложилась на полную с этой концепцией.

Вот их сетевая архитектура:

Каждая плита на схеме представляет собой единственный сверточный слой в сети VGG16. Оксфорд уложил 13 из них друг на друга!

Победа Оксфорда доказала, что Convolution - это путь вперед. Все начали использовать его, и год спустя победивший алгоритм ImageNet набрал 4,8% и впервые обошел людей.

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

Но знаете, что это за хорошие новости?

Алгоритм VGG16 имеет открытый исходный код и доступен для публичного использования. Он очень популярен и встроен во многие библиотеки машинного обучения. Сеть весит около 500 МБ и может легко работать на современном компьютере.

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

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

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

Вдохновил ли я вас на создание собственного детектора изображений?

Оставьте комментарий и дайте мне знать!