Обучите каскадный объектный детектор

Почему Train детектор?

Системный объект vision.CascadeObjectDetector идет с несколькими предварительно обученными классификаторами для обнаружения лобных поверхностей, поверхностей профиля, носов, глаз и верхней части тела. Однако эти классификаторы не всегда достаточны для конкретного приложения. Computer Vision Toolbox™ обеспечивает функцию trainCascadeObjectDetector, чтобы обучить пользовательский классификатор.

Какие виды объектов можно обнаружить?

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

Системный объект vision.CascadeObjectDetector обнаруживает объекты в изображениях путем скольжения окна по изображению. Детектор затем использует каскадный классификатор, чтобы решить, содержит ли окно предмет интереса. Размер окна отличается, чтобы обнаружить объекты в различных шкалах, но его соотношение сторон остается фиксированным. Детектор очень чувствителен к вращению из плоскости, потому что соотношение сторон изменяется для большинства 3-D объектов. Таким образом необходимо обучить детектор каждой ориентации объекта. Обучение один детектор, чтобы обработать все ориентации не будет работать.

Как каскадный классификатор работает?

Каскадный классификатор состоит из этапов, где каждый этап является ансамблем слабых учеников. Слабые ученики являются простыми классификаторами под названием decision stumps. Каждый этап обучен с помощью названного повышения метода. Boosting обеспечивает способность обучить очень точный классификатор путем взятия взвешенного среднего решений, принятых слабыми учениками.

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

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

  • true positive происходит, когда положительная выборка правильно классифицируется.

  • false positive происходит, когда отрицательная выборка по ошибке классифицируется как положительная.

  • false negative происходит, когда положительная выборка по ошибке классифицируется как отрицательная.

Чтобы работать хорошо, каждый этап в каскаде должен иметь низкий ложный отрицательный уровень. Если этап неправильно маркирует объект как отрицательный, остановки классификации, и вы не можете исправить ошибку. Однако каждый этап может иметь высокий ложный положительный уровень. Даже если детектор неправильно маркирует необъект как положительный, можно исправить ошибку на последующих этапах.

Полный ложный положительный уровень каскадного классификатора fs, где f ложный положительный уровень на этап в области значений (0 1), и s количество этапов. Точно так же полный истинный положительный уровень ts, где t истинный положительный уровень на этап в области значений (0 1]. Таким образом добавление большего количества этапов уменьшает полный ложный положительный уровень, но это также уменьшает полный истинный положительный уровень.

Создайте каскадный классификатор Используя trainCascadeObjectDetector

Каскадное обучение классификатора требует набора положительных выборок и набора негативов. Необходимо предоставить набору позитивных изображений с видимыми областями, заданными, чтобы использоваться в качестве положительных выборок. Можно использовать Image Labeler, чтобы маркировать предметы интереса ограничительными рамками. Image Labeler выходные параметры таблица, чтобы использовать для положительных выборок. Также необходимо обеспечить набор негативов, от которых функция генерирует отрицательные выборки автоматически. Чтобы достигнуть приемлемой точности детектора, определите номер этапов, покажите тип и другие параметры функции.

Факторы при Установке Параметров

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

УсловиеФактор
Большой набор обучающих данных (в тысячах).Увеличьте число этапов и установите более высокий ложный положительный уровень для каждого этапа.
Небольшой набор обучающих данных.Сократите число этапов и установите более низкий ложный положительный уровень для каждого этапа.
Уменьшать вероятность пропавших без вести объекта.Увеличьте истинный положительный уровень. Однако высокий истинный положительный уровень может препятствовать тому, чтобы вы достигли желаемого ложного положительного уровня на этап, делая детектор более вероятно, чтобы произвести ложные обнаружения.
Сокращать количество ложных обнаружений.Увеличьте число этапов или уменьшите ложный сигнальный уровень на этап.

Покажите типы, доступные для обучения

Выберите функцию, которая удовлетворяет типу обнаружения объектов, в котором вы нуждаетесь. trainCascadeObjectDetector поддерживает три типа функций: Хаар, локальные бинарные шаблоны (LBP) и гистограммы ориентированных градиентов (ПОЖИРАТЕЛЬ РЕСУРСОВ). Хаар и функции LBP часто используются, чтобы обнаружить поверхности, потому что они работают хорошо на представление структур прекрасной шкалы. Функции ПОЖИРАТЕЛЯ РЕСУРСОВ часто используются, чтобы обнаружить объекты, такие как люди и автомобили. Они полезны для получения полной формы объекта. Например, в следующей визуализации функций ПОЖИРАТЕЛЯ РЕСУРСОВ, вы видите схему велосипеда.

Вы можете должны быть запустить функцию trainCascadeObjectDetector многократно, чтобы настроить параметры. Чтобы сэкономить время, можно использовать LBP или функции ПОЖИРАТЕЛЯ РЕСУРСОВ на небольшом подмножестве данных. Обучение детектор с помощью функций Хаара берет намного дольше. После этого можно запустить функции Хаара, чтобы видеть, улучшается ли точность.

Предоставьте положительные выборки

Чтобы создать положительные выборки легко, можно использовать приложение Image Labeler. Image Labeler обеспечивает простой способ маркировать положительные выборки путем интерактивного определения прямоугольных видимых областей (КОРОЛИ).

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

Предоставьте негативы

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

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

Выберите количество этапов

Существует компромисс между меньшим количеством этапов с более низким ложным положительным уровнем на этап или больше этапов с более высоким ложным положительным уровнем на этап. Этапы с более низким ложным положительным уровнем являются более комплексными, потому что они содержат большее количество слабых учеников. Этапы с более высоким ложным положительным уровнем содержат меньше слабых учеников. Обычно лучше иметь большее количество простых этапов, потому что на каждом этапе полный ложный положительный уровень уменьшается экспоненциально. Например, если ложный положительный уровень на каждом этапе составляет 50%, то полный ложный положительный уровень каскадного классификатора с двумя этапами составляет 25%. С тремя этапами это становится 12,5% и так далее. Однако, чем больше количество этапов, тем больше сумма данных тренировки классификатор требует. Кроме того, увеличение числа этапов увеличивает ложный отрицательный уровень. Это увеличение приводит к большему шансу отклонения положительной выборки по ошибке. Установите ложный положительный уровень (FalseAlarmRate) и количество этапов, (NumCascadeStages) приводить к приемлемому полному ложному положительному уровню. Затем можно настроить эти два параметра экспериментально.

Обучение может иногда останавливаться рано. Например, предположите, что учебные остановки после семи этапов, даже при том, что вы определяете номер параметра этапов к 20. Возможно, что функция не может сгенерировать достаточно отрицательных выборок. Если при запуске функцию снова и определяете номер этапов к семь, вы не получаете тот же результат. Результаты между этапами отличаются, потому что количество положительных и отрицательных выборок, чтобы использовать для каждого этапа повторно вычисляется для нового количества этапов.

Учебное время детектора

Обучение хороший детектор требует тысяч учебных выборок. Большие суммы данных тренировки могут занять часы или даже дни к процессу. Во время обучения функция отображает время, которое потребовалось, чтобы обучить каждый этап в Командном окне MATLAB®. Учебное время зависит от типа функции, которую вы задаете. Используя Хаар функции берет намного дольше, чем использование функции ПОЖИРАТЕЛЯ РЕСУРСОВ или LBP.

Поиск и устранение проблем

Что, если у вас заканчиваются положительные выборки?

Функция trainCascadeObjectDetector автоматически определяет количество положительных выборок, чтобы использовать, чтобы обучить каждый этап. Номер основан на общем количестве положительных выборок, предоставленных пользователем и значениями параметров NumCascadeStages и TruePositiveRate.

Количество доступных положительных выборок раньше обучалось, каждый этап зависит от истинного положительного уровня. Уровень задает, какой процент положительных выборок функция может классифицировать как отрицательный. Если выборка классифицируется как отрицание каким-либо этапом, она никогда не достигает последующих стадий. Например, предположите, что вы устанавливаете TruePositiveRate на 0.9, и все доступные выборки используются, чтобы обучить первую стадию. В этом случае 10% положительных выборок отклоняются как отрицательные стороны, и только 90% общих положительных выборок доступны для обучения второй этап. Если обучение продолжается, то каждый этап обучен с меньше и меньшим количеством выборок. Каждый последующий этап должен решить все больше более трудную проблему классификации с меньшим количеством положительных выборок. С каждым этапом, получающим меньше выборок, более поздние этапы, вероятно, будут сверхсоответствовать данным.

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

Функция вычисляет количество положительных выборок, чтобы использовать на каждом этапе с помощью следующей формулы:

количество положительных выборок = floor (totalPositiveSamples / (1 + (NumCascadeStages - 1) * (1 - TruePositiveRate)))

Это вычисление не гарантирует, что то же количество положительных выборок доступно для каждого этапа. Причина состоит в том, что невозможно предсказать с уверенностью, сколько положительных выборок будет отклонено как отрицательные стороны. Обучение продолжается, пока количество положительных выборок, доступных, чтобы обучить этап, больше, чем 10% количества выборок функция, определенная автоматически с помощью предыдущей формулы. Если существует недостаточно положительных выборок, учебные остановки и функция выдают предупреждение. Функция также выводит классификатор, состоящий из этапов, которые она обучила до той точки. Если обучение останавливается, можно добавить больше положительных выборок. Также можно увеличить TruePositiveRate. Сокращение количества этапов может также работать, но такое сокращение может также привести к более высокому полному ложному сигнальному уровню.

Что сделать, если у вас заканчиваются отрицательные выборки?

Функция вычисляет количество отрицательных выборок, используемых на каждом этапе. Это вычисление сделано путем умножения количества положительных выборок, используемых на каждом этапе значением NegativeSamplesFactor.

Так же, как с положительными выборками, нет никакой гарантии, что расчетное количество отрицательных выборок всегда доступно для конкретного этапа. Функция trainCascadeObjectDetector генерирует отрицательные выборки от негативов. Однако с каждым новым этапом, полным ложным сигнальным уровнем каскадных уменьшений классификатора, делая его менее вероятно, чтобы найти отрицательные выборки.

Обучение продолжается, пока количество отрицательных выборок, доступных, чтобы обучить этап, больше, чем 10% расчетного количества отрицательных выборок. Если существует недостаточно отрицательных выборок, учебные остановки и функция выдает предупреждение. Это выводит классификатор, состоящий из этапов, которые это обучило до той точки. Когда обучение останавливается, лучший подход должен добавить более негативы. Также можно сократить количество этапов или увеличить ложный положительный уровень.

Примеры

 Обучите пятиэтапный детектор знака Стоп

 Обучите пятиэтапный детектор знака Стоп с уменьшенным истинным положительным уровнем

 Обучите десятиэтапный детектор знака Стоп

Обучите детектор знака Стоп

Загрузите положительные демонстрационные данные из файла MAT. Файл содержит таблицу, задающую ограничительные рамки для нескольких категорий объектов. Таблица была экспортирована из приложения Training Image Labeler.

Загрузите положительные выборки.

load('stopSignsAndCars.mat');

Выберите ограничительные рамки для знаков Стоп из таблицы.

positiveInstances = stopSignsAndCars(:,1:2);

Добавьте папку изображений в путь MATLAB.

imDir = fullfile(matlabroot,'toolbox','vision','visiondata',...
    'stopSignImages');
addpath(imDir);

Задайте папку для негативов.

negativeFolder = fullfile(matlabroot,'toolbox','vision','visiondata',...
    'nonStopSigns');

Создайте объект imageDatastore, содержащий негативы.

negativeImages = imageDatastore(negativeFolder);

Обучите каскадный объектный детектор под названием 'stopSignDetector.xml', использующий функции ПОЖИРАТЕЛЯ РЕСУРСОВ. ПРИМЕЧАНИЕ: команда может занять несколько минут, чтобы запуститься.

trainCascadeObjectDetector('stopSignDetector.xml',positiveInstances, ...
    negativeFolder,'FalseAlarmRate',0.1,'NumCascadeStages',5);
Automatically setting ObjectTrainingSize to [35, 32]
Using at most 42 of 42 positive samples per stage
Using at most 84 negative samples per stage

--cascadeParams--
Training stage 1 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 1: 0 seconds

Training stage 2 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 2: 0 seconds

Training stage 3 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 3: 2 seconds

Training stage 4 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 4: 6 seconds

Training stage 5 of 5
[........................................................................]
Used 42 positive and 17 negative samples
Time to train stage 5: 8 seconds

Training complete

Используйте недавно обученный классификатор, чтобы обнаружить знак Стоп в изображении.

detector = vision.CascadeObjectDetector('stopSignDetector.xml');

Считайте тестовое изображение.

img = imread('stopSignTest.jpg');

Обнаружьте знак Стоп.

bbox = step(detector,img);

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

 detectedImg = insertObjectAnnotation(img,'rectangle',bbox,'stop sign');

Отобразите обнаруженный знак Стоп.

figure; imshow(detectedImg);

Удалите каталог образов из пути.

rmpath(imDir);

Похожие темы

Внешние веб-сайты

Для просмотра документации необходимо авторизоваться на сайте