detect

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

Описание

пример

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

При использовании этой функции настоятельно рекомендовано использование графического процессора CUDA®-enabled NVIDIA®. Графический процессор значительно уменьшает время вычисления. Использование графического процессора требует Parallel Computing Toolbox™. Для получения информации о поддерживаемом вычислите возможности, смотрите Поддержку графического процессора Релизом (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: Width

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

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

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

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

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

Поисковая необходимая область в виде [x y width height] вектор. Вектор задает левый верхний угол и размер области в пикселях.

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

Задайте дополнительные разделенные запятой пары 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' — Используйте графический процессор. Чтобы использовать графический процессор, у вас должны быть Parallel Computing Toolbox и CUDA-поддерживающий NVIDIA графический процессор. Если подходящий графический процессор не доступен, функция возвращает ошибку. Для получения информации о поддерживаемом вычислите возможности, смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

Больше о

свернуть все

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

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

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

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

Введенный в R2019a