detect

Обнаружьте объекты с помощью детектора мультиобъекта поля SSD

Описание

пример

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

При использовании этой функции, использования CUDA® активированный NVIDIA® Графический процессор настоятельно рекомендован. Графический процессор значительно уменьшает время вычисления. Использование графического процессора требует Parallel Computing Toolbox™. Для получения информации о поддерживаемом вычислите возможности, смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).

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

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

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

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

[___] = detect(___,Name,Value) задает опции с помощью одного или нескольких Name,Value парные аргументы. Например, detect(detector,I,'Threshold',0.75) устанавливает порог счета обнаружения к 0.75. Любые обнаружения с более низким счетом удалены.

Примеры

свернуть все

Загрузите предварительно обученный объект одного детектора выстрела (SSD) обнаружить транспортные средства в изображении. Детектор обучен с изображениями автомобилей на магистральной сцене.

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

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

I = imread('highway.png');

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

imshow(I);

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

Запустите предварительно обученный детектор объектов SSD при помощи detect функция. Выход содержит ограничительные рамки, баллы и метки для транспортных средств, обнаруженных в изображении. Метки выведены из ClassNames свойство детектора.

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

   139    78    96    81
    99    67   165   146

scores = 2x1 single column vector

    0.8349
    0.6302

labels = 2x1 categorical
     vehicle 
     vehicle 

Аннотируйте изображение результатами обнаружения.

if ~isempty(bboxes)
    detectedI = insertObjectAnnotation(I,'rectangle',bboxes,cellstr(labels));
else
   detectedI = insertText(I,[10 10],'No Detections');
end
   
figure
imshow(detectedI)

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

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

свернуть все

Детектор объектов SSD в виде ssdObjectDetector объект. Чтобы создать этот объект, вызовите trainSSDObjectDetector функция с обучающими данными, как введено.

Введите изображение в виде 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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'SelectStrongest',true

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

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

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

    Например:

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

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

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

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

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

Чтобы уменьшать время вычисления, установите это значение к известному минимальному размеру области для объектов, обнаруживаемых в изображении. По умолчанию, 'MinSize' установлен в [1 1].

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

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

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

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

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

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

свернуть все

Местоположение объектов обнаруживается во входном изображении или изображениях, возвращенных как 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]. Формат задает местоположение верхнего левого угла и размер в пикселях ограничительной рамки в соответствующем изображении.

Введенный в R2020a