detect

Обнаружение объектов с помощью детектора объектов YOLO v2

Описание

пример

bboxes = detect(detector,I) обнаруживает объекты в одном изображении или массиве изображений, I, используя вы смотрите только один раз версии 2 (YOLO v2) детектор объектов. Размер входа изображения должен быть больше или равен размеру входа сети предварительно обученного детектора. Местоположения обнаруженных объектов возвращаются как набор ограничивающих рамок.

При использовании этой функции используйте CUDA®-активный NVIDIA® Настоятельно рекомендуется использовать графический процессор. Графический процессор значительно сокращает время расчетов. Для использования графический процессор требуется Parallel Computing Toolbox™. Для получения информации о поддерживаемых вычислительных возможностях смотрите Поддержку GPU by Release (Parallel Computing Toolbox).

[bboxes,scores] = detect(detector,I) также возвращает оценки достоверности класса для каждого ограничивающего прямоугольника.

пример

[___,labels] = detect(detector,I) возвращает категориальный массив меток, назначенных ограничивающим рамкам, в дополнение к выходным аргументам из предыдущего синтаксиса. Метки, используемые для классов объектов, определяются во время обучения с помощью trainYOLOv2ObjectDetector функция.

detectionResults = detect(detector,ds) обнаруживает объекты в пределах всех изображений, возвращаемых read функция входного datastore.

[___] = detect(___,roi) обнаруживает объекты в прямоугольной области поиска, заданной roi. Используйте выходные аргументы из любого из предыдущих синтаксисов. Задайте входные параметры из любого из предыдущих синтаксисов.

[___] = detect(___,Name,Value) задает опции с использованием одного или нескольких Name,Value пара аргументов в дополнение к входным параметрам в любом из предыдущих синтаксисов.

Примеры

свернуть все

Загрузите детектор объектов YOLO v2, предварительно обученный для обнаружения транспортных средств.

vehicleDetector = load('yolov2VehicleDetector.mat','detector');
detector = vehicleDetector.detector;

Прочтите тестовое изображение в рабочую область.

I = imread('highway.png');

Отобразите вход тестовое изображение.

imshow(I);

Figure contains an axes. The axes contains an object of type image.

Запустите предварительно обученный детектор объектов YOLO v2 на тестовом изображении. Проверьте результаты обнаружения транспортного средства. Метки получают из ClassNames свойство детектора.

[bboxes,scores,labels] = detect(detector,I)
bboxes = 1×4

    78    81    64    63

scores = single
    0.6224
labels = categorical
     vehicle 

Аннотировать изображение с ограничивающими рамками для обнаружений.

if ~isempty(bboxes)
    detectedI = insertObjectAnnotation(I,'rectangle',bboxes,cellstr(labels));
end
figure
imshow(detectedI)

Figure contains an axes. The axes contains an object of type image.

Входные параметры

свернуть все

Детектор объектов YOLO v2, заданный как yolov2ObjectDetector объект. Чтобы создать этот объект, вызовите trainYOLOv2ObjectDetector функция с обучающими данными в качестве входных данных.

Входное изображение, заданное как H -by- W -by- C -by- B числовой массив изображений Изображения должны быть реальными, непараметрическими, полутоновыми или RGB изображениями.

  • H: Высота

  • W: Ширина

  • C: Размер канала в каждом изображении должен быть равен размеру входного канала сети. Для примера, для полутоновых изображений C должны быть равны 1. Для цветных изображений RGB он должен быть равен 3.

  • B: Количество изображений в массиве.

Детектор чувствителен к области значений входного изображения. Поэтому убедитесь, что вход области значений изображения аналогичен области значений изображений, используемых для обучения детектора. Например, если детектор был обучен на uint8 изображения, переключите это входное изображение в область значений [0, 255] с помощью im2uint8 или rescale функция. Размер этого входного изображения должен быть сопоставим с размерами изображений, используемых в обучении. Если эти размеры сильно отличаются, детектор испытывает трудности с обнаружением объектов, потому что шкала объектов в вход изображении отличается от шкалы объектов, для идентификации которых был обучен детектор. Рассмотрим, использовали ли вы SmallestImageDimension свойство во время обучения для изменения размера обучающих изображений.

Типы данных: uint8 | uint16 | int16 | double | single | logical

Datastore, заданный как объект datastore, содержащий набор изображений. Каждое изображение должно быть полутоновым, RGB или многоканальным изображением. Функция обрабатывает только первый столбец datastore, который должен содержать изображения и должен быть массивами ячеек или таблицами с несколькими столбцами.

Необходимая область поиска, определенная как [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>] вектор. Вектор задает верхний левый угол и размер области в пикселях.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: detect(detector,I,'Threshold',0.25)

Порог обнаружения, заданный как разделенная разделенными запятой парами, состоящая из 'Threshold' и скаляром в области значений [0, 1]. Обнаружение, которое счета меньше этого порога значения, удаляется. Чтобы уменьшить ложные срабатывания, увеличьте это значение.

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

  • true - Возвращает самый сильный ограничивающий прямоугольник на объект. Метод вызывает selectStrongestBboxMulticlass функция, которая использует немаксимальное подавление, чтобы исключить перекрывающиеся ограничивающие прямоугольники на основе их оценок достоверности.

    По умолчанию, selectStrongestBboxMulticlass функция вызывается следующим образом

     selectStrongestBboxMulticlass(bbox,scores,...
                                   'RatioType','Union',...
                                   'OverlapThreshold',0.5);

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

Минимальный размер области, заданный как разделенная разделенными запятой парами, состоящая из 'MinSize' и вектор вида [height width]. Модули указаны в пикселях. Минимальный размер области определяет размер наименьшей области, содержащей объект.

По умолчанию MinSize 1 на 1.

Максимальный размер области, заданный как разделенная разделенными запятой парами, состоящая из 'MaxSize' и вектор вида [height width]. Модули указаны в пикселях. Максимальный размер области определяет размер самой большой области, содержащей объект.

По умолчанию 'MaxSize' задается высота и ширина входного изображения, I. Чтобы уменьшить время расчета, установите это значение на известный максимальный размер области для объектов, которые могут быть обнаружены в вход тестовом изображении.

Минимальный размер пакета, заданный как разделенная разделенными запятой парами, состоящая из 'MiniBatchSize' и скалярное значение. Используйте MiniBatchSize для обработки большого набора изображений. Изображения сгруппированы в минибатчи и обработаны как пакет для повышения эффективности расчетов. Увеличьте размер мини-бата, чтобы уменьшить время вычислений. Уменьшите размер, чтобы использовать меньше памяти.

Аппаратный ресурс, на котором можно запустить детектор, задается как разделенная разделенными запятой парами, состоящая из 'ExecutionEnvironment' и 'auto', 'gpu', или 'cpu'.

  • 'auto' - Используйте графический процессор, если он доступен. В противном случае используйте центральный процессор.

  • 'gpu' - Использовать графический процессор. Для использования GPU необходимо иметь Parallel Computing Toolbox и графический процессор NVIDIA с поддержкой CUDA. Если подходящий графический процессор недоступен, функция возвращает ошибку. Для получения информации о поддерживаемых вычислительных возможностях смотрите Поддержку GPU by Release (Parallel Computing Toolbox).

  • 'cpu' - Использовать центральный процессор.

Оптимизация эффективности, заданная как разделенная разделенными запятой парами, состоящая из 'Acceleration' и одно из следующих:

  • 'auto' - Автоматически применить ряд оптимизаций, подходящих для входной сети и аппаратного ресурса.

  • 'mex' - Скомпилируйте и выполните MEX-функцию. Эта опция доступна только при использовании графического процессора. Для использования GPU требуется Parallel Computing Toolbox и графический процессор NVIDIA с поддержкой CUDA. Если Parallel Computing Toolbox или подходящий графический процессор недоступен, то функция возвращает ошибку. Для получения информации о поддерживаемых вычислительных возможностях смотрите Поддержку GPU by Release (Parallel Computing Toolbox).

  • 'none' - Отключить все ускорения.

Опция по умолчанию 'auto'. Если 'auto' задано, MATLAB® применяет несколько совместимых оптимизаций. Если вы используете 'auto' Опция никогда не генерирует MEX-функцию.

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

The 'mex' опция генерирует и выполняет MEX-функцию на основе сети и параметров, используемых в вызове функции. Одновременно с одной сетью можно связать несколько MEX-функции. Очистка сетевой переменной также очищает все MEX-функции, связанные с этой сетью.

The 'mex' опция доступна только для входных данных, заданных как числовой массив, массив ячеек из числовых массивов, таблица или datastore изображений. Никакие другие типы datastore не поддерживают 'mex' опция.

The 'mex' опция доступна только при использовании графического процессора. Необходимо также установить компилятор C/C + +. Инструкции по настройке см. в MEX Setup (GPU Coder).

'mex' ускорение не поддерживает все слои. Список поддерживаемых слоев см. в разделе Поддерживаемые слои (GPU Coder).

Выходные аргументы

свернуть все

Расположение объектов, обнаруженных в входном изображении или изображениях, возвращенных в виде матрицы M -by-4 или массива ячеек B -by-1. M - количество ограничивающих рамок в изображении, а B - количество матриц M -на 4, когда вход содержит массив изображений.

Каждая строка bboxes содержит четырехэлементный вектор вида [x y width height]. Этот вектор задает верхний левый угол и размер соответствующего ограничивающего прямоугольника в пикселях.

Достоверные оценки обнаружения, возвращенные как M-на-1 вектор или B-на-1 массив ячеек. M - количество ограничивающих рамок в изображении, а B - количество векторов M -by-1, когда вход содержит массив изображений. Более высокий счет указывает на более высокое доверие в обнаружении.

Метки для ограничивающих рамок, возвращенные как M-на-1 категориальный массив или B-на-1 массив ячеек. M - количество меток в изображении, а B - количество M-на-1 категориальных массивов, когда вход содержит массив изображений. Вы определяете имена классов, используемые для маркировки объектов, когда вы обучаете вход detector.

Результаты обнаружения, возвращенные как 3-столбцевая таблица с именами переменных, Boxes, Scores и Labels. Столбец Boxes содержит M на 4 матрицы M ограничивающих прямоугольников для объектов, найденных на изображении. Каждая строка содержит ограничивающий прямоугольник как вектор с 4 элементами в формате [x, y, width, height]. Формат задает положение и размер верхнего левого угла в пикселях ограничивающего прямоугольника на соответствующем изображении.

Подробнее о

свернуть все

Предварительная обработка данных

По умолчанию в detect функция предварительно обрабатывает тестовое изображение для обнаружения объектов с помощью:

  • Изменение его размера до ближайшего возможного размера изображения, используемого для настройки сети YOLO v2. Функция определяет ближайший возможный размер изображения из TrainingImageSize свойство yolov2ObjectDetector объект.

  • Нормализация значений его пикселей к значениям в тех же областях значений, что и изображений, используемых для обучения детектора объектов YOLO v2. Например, если детектор был обучен на uint8 изображения, тестовое изображение также должно иметь пиксельные значения в области значений [0, 255]. В противном случае используйте im2uint8 или rescale функция для пересмотра значений пикселей в тестовом изображении.

Введенный в R2019a