Компьютерное зрение - это область искусственного интеллекта, которая обучает компьютеры интерпретировать и понимать визуальный мир. Используя изображения и видео, машины могут идентифицировать и классифицировать объекты. Изображение можно описать как комбинацию пикселей. Эти пиксели могут быть сохранены как 8-битовые целые числа с диапазоном возможных значений от 0 до 255. Следовательно, каждое изображение в градациях серого может быть выражено в форме матрицы размером n x m. Это составляет основу компьютерного зрения. Свертка, объединение, увеличение изображения, выравнивание и выпадение - это некоторые операции, которые выполняются над входной матрицей размером n x m для обучения нейронной сети.

Архитектура традиционной CNN: сверточные нейронные сети обычно состоят из следующих слоев:

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

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

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

Популярные модели

ImageNet Large Scale Visual Recognition Challenge (ILSVRC) стартовал в 2010 году, когда команды участвовали в обучении моделей, которые могли классифицировать изображения по 1000 категориям. Считалось, что хороший коэффициент ошибок ILSVRC составляет около 25%, но внедрение AlexNet, глубокой сверточной нейронной сети, изменило динамику конкуренции. AlexNet показал уровень ошибок 16%, что более чем на 10 процентных пунктов ниже, чем у занявшего второе место. AlexNet содержит восемь уровней; первые пять были сверточными слоями, за некоторыми из них следовали слои max-pooling, а последние три были полностью связанными слоями. В то время как AlexNet сосредоточился на меньших окнах и шагах, модель VGG сосредоточилась на аспекте глубины. Компания VGG заняла второе место в конкурсе ImageNet в 2014 году, достигнув уровня 5 лучших ошибок 7,3%. Лишь в 2015 году AlexNet потерпел поражение в соревновании со стороны Microsoft ResNet, очень глубокого CNN, имеющего более 100 слоев.

Библиотеки Python

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

Keras - предлагает более простой механизм для выражения нейронных сетей. Он был разработан с упором на быстрое экспериментирование. Все модели Keras портативны.

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

Pandas - библиотека Pandas предлагает быстрые, выразительные и гибкие структуры данных. Библиотека упрощает разработчикам работу с помеченными или реляционными данными.

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

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

PyTorch - PyTorch был разработан в исследовательской лаборатории искусственного интеллекта Facebook. Он предлагает экосистему для поддержки развития компьютерного зрения и НЛП. PyTorch определяет класс под названием Tensor для хранения и работы с многомерным прямоугольным массивом чисел (аналогично массивам NumPy)

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

Классификация изображений. Это задача классификации всего изображения как одного ярлыка. Популярные наборы данных для классификации изображений - «Кошки против собак» и MNIST (рукописные цифры от 0 до 9). В следующем примере мы будем использовать «Кошки против собак», чтобы создать базовую модель на одноблочной архитектуре VGG.

Одноблочная модель VGG имеет 32 (3x3) фильтра в сверточном слое, за которым следует слой MaxPooling размером 2X2. Выходные данные уровня Pooling выравниваются для использования в качестве входных данных для полностью подключенного слоя. Полностью связанный слой состоит из скрытого слоя из 128 нейронов с функцией активации ReLU (позволяет избежать проблемы исчезающего градиента), за которым следует выходной нейрон с функцией активации Sigmoid (используется для двоичной классификации).

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

Предпосылки -

1. Загрузите и загрузите набор данных в свой рабочий каталог.

2. Убедитесь, что каталоги и подкаталоги расположены в правильном порядке.

3. Укажите путь для сохранения вашей модели в нужную директорию.

Код в Google Colab: https://colab.research.google.com/drive/1bPbGV6n-S9X9a4vqx8tLvwQyC96qcgsl

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

Мы будем выполнять обнаружение объектов с помощью YOLO (вы смотрите только один раз), который является чрезвычайно быстрым и точным методом глубокого обучения для обнаружения объектов. В YOLO изображение делится на несколько сеток. Каждая сетка работает по одному и тому же алгоритму. Несколько слоев свертки накладываются друг на друга, образуя сеть YOLO. Мы будем использовать сеть YOLO, предварительно обученную на наборе данных MSCOCO, которая может классифицировать до 80 объектов.

Предпосылки -

1. Загрузите предварительно обученные веса модели (обученные на наборе данных MSCOCO) с https://pjreddie.com/media/files/yolov3.weights

2. Загрузите веса в свой рабочий каталог.

Код в Google Colab: https://colab.research.google.com/drive/1-P4DJz8LRvi_ykaFCa11l_wvRhX0gafL

Обнаружение, сегментация, маскирование и классификация объектов могут выполняться с помощью модели, основанной на R-CNN (CNN на основе региона). R-CNN отличается от YOLO тем, что предлагает несколько блоков и проверяет, соответствует ли какой-либо из блоков основной истине. Выборочный поиск предлагает поля путем группировки по цвету / тексту окон различных размеров.

Самым последним вариантом R-CNN является Mask R-CNN, которая подробно обсуждается в следующем примере. Мы используем предварительно обученную модель Mask R-CNN на основе набора данных COCO.

Предпосылки -

1. Установите Mask R-CNN в соответствии с общим кодом.

2. После установки сохраните модель в рабочий каталог.

Код в Google Colab: https://colab.research.google.com/drive/1R51DlOScJhlchhhI-ypbz-NyRjSnQvYh

Распознавание лиц: концепция распознавания лиц происходит из изучения сходства, которое представляет собой процесс обучения метрики для вычисления сходства между двумя объектами. Вложения лиц записываются во время обучения, на которые позже будут ссылаться при классификации изображений. Наша модель включает обнаружение лиц, распознавание лиц и классификацию фотографий. Мы будем использовать модель VGGFace, которая была разработана для классификации фотографий знаменитостей. Модель VGG может предсказывать изображения более 8000 знаменитостей из разных областей мира. Мы будем использовать многозадачные каскадные сверточные нейронные сети (MTCNN) для обнаружения лиц. Это алгоритм, который обнаруживает ограничивающие рамки лиц на изображении вместе с их 5-точечными ориентирами лиц.

Предпосылки -

1. Клонируйте модель vggface из github (см. Код)

2. Установите MTCNN (многозадачные каскадные сверточные нейронные сети) для обнаружения лиц (см. Код)

Код в Google Colab: https://colab.research.google.com/drive/1_IuJk-A8Qo8YTfLaRT5YnvaOaZWirMeU

Разработайте собственную модель распознавания лиц с помощью FaceNet: FaceNet преобразует изображения во вложения, которые впоследствии можно использовать для сравнения лиц. (См. Рисунок ниже) Якорем может быть любое лицо, положительные лица - это изображения одного и того же человека, а отрицательные - изображения другого человека. Отрицательные грани ближе к привязке обучаются в модели, чтобы она могла точно различать грани. Эта тренировочная концепция называется тройной потерей.

Предпосылки -

1. Загрузите предварительно обученную модель FaceNet.

2. Установите MTCNN (для распознавания лиц) в свой рабочий каталог.

3. Убедитесь, что каталоги и подкаталоги расположены в правильном порядке.

Google Colab: https://colab.research.google.com/drive/1lrhVzLpztAqYMhPHduEkxgGDva5FIzPi

Обращайтесь ко мне, если что-то не работает! Я буду рад помочь.

#deeplearning #ComputerVision #CNN #machinelearning #AI

Использованная литература:

Https://machinelearningmaster.com/use-pre-trained-vgg-model-classify-objects-photographs/

Https://hackr.io/tutorials/learn-python

Https://github.com/afshinea/stanford-cs-230-deep-learning

Https://machinelearningmaster.com/how-to-perform-object-detection-with-yolov3-in-keras/

Https://pjreddie.com/darknet/yolo/

Https://machinelearningmaster.com/save-load-keras-deep-learning-models/

Https://pypi.org/project/mtcnn/