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

Когда показано это изображение,

сеть возвращает этот вывод.

Это предсказание верное! Глядя на метки наборов данных, мы можем подтвердить, что это изображение действительно относится к классу 34, знаки «Левый поворот впереди».

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

1. Предварительная обработка

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

Вот что было до и после предварительной обработки:

2. Сверточная нейронная сеть

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

Как изучаются функции

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

Считайте этот зеленый квадрат изображением, а оранжевый квадрат 3x3 - ядром. Красные числа показывают, какое значение ищет ядро: 1 или 0. Точка берется за каждый пиксель на каждом шаге, где значение 1 как в ядре, так и в изображении. Эти точки складываются и помещаются на карту функций для каждого шага.

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

Карты объектов затем накладываются друг на друга. Это называется объединением.

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

Моя модель имеет два сверточных слоя, затем слой объединения, затем еще два сверточных слоя и еще один слой объединения.

После объединения изображение становится плоским или растянутым. Ранее было 32 на 32 пикселя на глубину 1 (потому что оно в градациях серого; цветные изображения имеют значения красного, зеленого и синего цветов. , поэтому они имеют глубину 3) теперь это 1 пиксель на 1024 пикселя (32 x 32), по-прежнему с глубиной 1.

Сглаженное изображение переходит в два полностью связанных слоя, записанных в коде как «Плотные» слои. Первый слой будет иметь 1024 узла, по одному на каждый пиксель изображения, а второй слой будет иметь 43 узла, по одному для каждого класса. Эти узлы предсказывают вероятность того, что изображение принадлежит определенному классу. Класс с наибольшей вероятностью выводится как прогноз модели относительно того, к какому классу принадлежит изображение.

Как бороться с переобучением

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

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

Когда модель переоборудована, она принимает тяжелые входные данные от одних узлов и игнорирует входные данные от других.

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

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

3. Прогноз

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

Модель предсказывает класс 23 и…

Модель сделала точный прогноз!

Основные выводы

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

Спасибо за прочтение! Не забудьте аплодировать этой статье, если она вам понравилась.