Что такое обнаружение объектов?

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

Что такое глубокое обучение?

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

Двухступенчатые детекторы объектов

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

Теперь мы знаем о глубоком обучении, обнаружении объектов, одноэтапных детекторах и двухэтапных детекторах. В этой статье речь пойдет об одноступенчатом детекторе YOLO.

Что такое ЙОЛО?

You Only Look Once (YOLO) — это система обнаружения, которая использует сквозную глубокую нейронную сеть для одновременного прогнозирования как ограничивающих прямоугольников, так и вероятностей классов. Это означает, что прогнозирование всего изображения выполняется за один запуск алгоритма.

Как работает YOLO?

YOLO основан на идее сегментации изображения на крошечные изображения. Изображение разделено на квадратную сетку размером S×S следующим образом:

Каждая N сетка представлена ​​для обнаружения и локализации содержащегося объекта.

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

YOLO важная терминология

Средняя средняя точность (mAP) — это показатель, используемый для оценки модели обнаружения объектов.

mAP основан на следующих субпоказателях:

  • Матрица путаницы
  • Пересечение по союзу (IoU)
  • Точность
  • Вспомнить

Матрица путаницы состоит из четырех основных атрибутов:

Истинные положительные результаты (TP): значения, которые были фактически положительными и прогнозировались положительными.

Ложные срабатывания (FP): модель предсказала метку, но она не является частью истинной истины.

True Negatives (TN): модель не предсказывает метку и не является частью достоверной информации.

Ложноотрицательные результаты (FN): модель не предсказывает метку, но это часть истинной истины.

Intersection over Union (IoU) – это измерение обнаружения объектов, которое описывает, как блоки перекрывают друг друга. YOLO использует IoU, чтобы предоставить поле вывода, которое полностью окружает объект. Для вычисления IoU с предсказаниями и истинными фактами. Сначала мы используем область пересечения между ограничивающей рамкой для конкретного прогноза и ограничивающей рамкой истинности той же области. Затем мы вычисляем общую площадь, покрытую двумя ограничивающими прямоугольниками, также известными как объединения.

на изображении выше мы видим, что наш детектор объектов обнаружил наличие на изображении знака остановки.

Итак, мы можем рассчитать Intersection over Union (IoU) из приведенного выше уравнения.

Точность

Precision = TP / (TP + FP)

Из всех классов, которые мы предсказали как положительные, сколько на самом деле положительных.

Вспомнить

Recall = TP / (TP + FN)

Из всех положительных классов, сколько мы правильно предсказали.

точка доступа

mAP рассчитывается путем нахождения средней точности (AP) для каждого класса, а затем усредняется по ряду классов.

Как глубокое обучение нейронной сети как оптимизация

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

Градиентный спуск

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

Обычно модели нейронных сетей обучаются с использованием алгоритма градиентной оптимизации. А веса обновляются с использованием алгоритма обратного распространения ошибки. «Градиент» в градиентном спуске — это градиенты ошибок. Модель с заданным набором весов используется для прогнозирования и расчета ошибок для этих прогнозов. Алгоритм градиентного спуска пытается обновить веса, чтобы уменьшить количество ошибок, перемещаясь вниз по склону ошибки.

Давайте сделаем этот термин более ясным с помощью визуализации:

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

Теперь мы знаем, как нейронная сеть решает алгоритм оптимизации.

Важность функции потерь в машинном обучении

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

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

Функция потерь YOLO

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

Разберем математику. Во-первых, мы начнем с этого:

Это уравнение вычисляет потери, связанные с положением ограничивающей рамки прогноза (x, y). На данный момент мы будем считать λконстантой. Это уравнение вычисляет сумму по всем ячейкам сетки, S x Sквадрату (i = 0 .. S²)и всем ограничивающим рамкам В (j = 0 .. В).

Это функция, которая примет значение 1, если в ячейке сетки i присутствует объект, а ограничивающая рамкаj «отвечает» за этот прогноз. Например, он ответит, если у него самый высокий IoU, который мы указали в предыдущем разделе.

Другие термины упрощают понимание этого уравнения: (x, y) — это положение прогнозируемого положения ограничивающей рамки и наоборот, (x̂, ŷ) hat — фактическая позиция из нашего обучающего набора данных.

Перейдем ко второй части этого уравнения:

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

Этот термин представляет квадратную разницу между фактической координатой x и прогнозируемой координатойв ячейкеi.

Для этого термина квадратичная разница между фактической координатой y и прогнозируемой координатой в ячейке i.

Продолжаем третью часть:

В первом слагаемом мы вычисляем потери, связанные с оценкой достоверности для каждого предиктора коробки. C – показатель достоверности, а Ĉ – объединение пересечений предсказанного ограничивающего прямоугольника с исходным значением 𝟙 obj, равным единице, когда в ячейке находится объект, иначе. Это 0. Второй член, 𝟙 noobj, наоборот.

Перейдем к последней части:

Последний член уравнения - классификационная потеря. Это уравнение очень похоже на обычную ошибку суммы квадратов по всем классам, но с добавлением 𝟙 objчлена. Первое суммирование будет проходить через каждую ячейку сетки, в которой есть объект. Второе суммирование — это нормальная ошибка квадрата суммы по классам. Термин 𝟙 obj означает, что мы не будем штрафовать за ошибку классификации, если в ячейке не найден ни один объект.

Хронология YOLO

Это изображение выше показывает нам хронологию семей YOLO за последние годы.

Как Скайллер применил YOLOv5?

Аннотации к данным

Для аннотации мы аннотируем наши изображения, используя библиотеку LabelImg с открытым исходным кодом.

Установка этикетки Img:

Запустите следующую команду через pip, чтобы установить labelImg

pip3 install labelImg

Запустите эту команду, чтобы открыть labelImg

labelImg

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

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

В Skyller мы используем YOLO для решения нашей проблемы с проверкой. На этом рисунке ниже показан пример нашей проблемы обнаружения трещин.

Сколько трещин вы нашли? Ответ довольно сложен, потому что, как люди, мы совершаем множество человеческих ошибок, чтобы определить что-то. Мы выбираем алгоритмы YOLO для решения этой проблемы обнаружения трещин с помощью YOLOv5. Причина, по которой мы выбираем YOLOv5, заключается в том, что он может обучать и оценивать размер изображения с разрешением 1280x1280. Изображения берутся с высококачественной камеры дрона, что означает, что вы можете извлечь из этих изображений множество функций. YOLOv5 дает нам возможность использовать высокое разрешение 1280x1280, а не 640x640 в остальных моделях семейства YOLO.

Обучение

Установка YOLOv5:

прежде всего, мы клонируем репозиторий YOLOv5 с помощью следующей команды

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip3 install -r requirements.txt

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

Затем для модели веса перед поездкой мы выбираем YOLOv5s6, в котором используется размер изображения 1280x1280, который мы обсуждали в предыдущем разделе.

Создание файла custom.yaml для обучения:

# file_name: custom.yaml
path: ../datasets/crack_dataset  # dataset root dir
train: images/train
val: images/val
test:  # test images (optional)
# Classes
nc: 1  # number of classes
names: ['crack']

Обучение пользовательской модели с помощью этой команды:

python train.py --img 1280 --batch 16 --epochs 100 --data custom.yaml --weights yolov5s.pt

после обучения 100 эпох mAP@0,5 и mAP@0,5:0,95 составляют 0,649 и 0,341 соответственно.

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

Это изображение показывает результат на нашей Платформе данных.

Заключение

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