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

Функции обнаружения объектов, как и любые другие CNN, они используют заданный фильтр и применяют его к определенной пиксельной матрице, а затем свертываются вокруг изображения, применяя фильтр к каждой матрице одинакового размера. Как только выходные данные всех сверточных слоев получены, 2d-матрица может быть сжата в 1d-массив значений, который после прохождения функции softmax имеет значения вероятности для входной матрицы, являющейся определенным объектом.

Но для обнаружения объектов возникает очевидная проблема. Если есть несколько разных объектов, которые пытаются классифицировать, это означает, что выходная метка является переменной, и выходной слой не будет иметь надлежащую вероятность для каждого объекта на изображении, а только определенный, поэтому такие алгоритмы, как R-CNN и YOLO были разработаны. Распространенным решением этой проблемы является фрагментация, разделение изображения на множество конкретных областей и применение весов и смещений к каждой из них, чтобы дать каждой области собственную метку. Чтобы помочь уменьшить тысячи и тысячи различных областей, необходимых для точного прогноза, был разработан специальный тип CNN, называемый R-CNN, который группирует блоки вместе с помощью жадного алгоритма.

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

Но одной из самых больших проблем CNN в целом, особенно с детекторами объектов, являются данные. Чтобы поле было точным, модель должна иметь массивы данных для каждой идентифицируемой особенности изображения, поэтому в Интернете существует множество обучающих библиотек данных, одной из самых популярных является haarcascade от opencv. HaarCascade — это библиотека XML-файлов, содержащих числовые данные о пикселях для различных изображений, которые можно преобразовать в простой js-файл для js-моделей для использования в качестве обучающих данных. Отличительной особенностью наборов данных opencv является то, что они уже помечены, что означает, что cnn может вычислить потери и минимизировать их намного быстрее.

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

Вы можете посмотреть мой проект на github здесь