detect

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

Описание

пример

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

пример

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

пример

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

пример

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

пример

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

[___] = detect(___,Name,Value) задает опции, используя один или несколько аргументов имя-значение.

Примечание

Эта функция требует модели Computer Vision Toolbox™ для обнаружения объектов YOLO v3. Можно установить модель Computer Vision Toolbox для обнаружения объектов YOLO v3 из Add-On Explorer. Дополнительные сведения об установке дополнений см. в разделе Получение и управление Дополнений. Чтобы запустить эту функцию, вам потребуется Deep Learning Toolbox™.

Примеры

свернуть все

Загрузите предварительно обученный детектор объектов YOLO v3.

detector = yolov3ObjectDetector('tiny-yolov3-coco');

Прочтите тестовое изображение и предварительно обработайте тестовое изображение при помощи preprocess функция.

img = imread('sherlock.jpg');
img = preprocess(detector,img);

Обнаружение объектов в тестовом изображении.

[bboxes,scores,labels] = detect(detector,img);

Отображение результатов обнаружения.

results = table(bboxes,labels,scores)
results=1×3 table
             bboxes             labels    scores 
    ________________________    ______    _______

    134     69    280    272     dog      0.56819

detectedImg = insertObjectAnnotation(img,'Rectangle',bboxes,labels);
figure
imshow(detectedImg)

Загрузите предварительно обученный детектор YOLOv3 объектов.

detector = yolov3ObjectDetector('tiny-yolov3-coco');

Считайте тестовые данные и сохраните их как изображение объект datastore.

location = fullfile(matlabroot,'toolbox','vision','visiondata','vehicles');
imds = imageDatastore(location);

Обнаружение объектов в тестовом наборе данных. Установите Threshold значение параметров 0,3 и MiniBatchSize значение параметров 32.

detectionResults = detect(detector,imds,'Threshold',0.3,'MiniBatchSize',32);

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

num = 10;
I = readimage(imds,num);
bboxes = detectionResults.Boxes{num};
labels = detectionResults.Labels{num};
scores = detectionResults.Scores{num};

Выполните немыслимое подавление, чтобы выбрать самые сильные ограничивающие рамки из перекрывающихся кластеров. Установите OverlapThreshold значение параметров 0,2.

[bboxes,scores,labels] = selectStrongestBboxMulticlass(bboxes,scores,labels,'OverlapThreshold',0.2);

Отображение результатов обнаружения.

results = table(bboxes,labels,scores)
results=3×3 table
             bboxes             labels    scores 
    ________________________    ______    _______

     14     71     52     27     car      0.93352
     74     73      7      5     car      0.65369
    102     73     15     10     car      0.85313

detectedImg = insertObjectAnnotation(I,'Rectangle',bboxes,labels);
figure
imshow(detectedImg)

Загрузите предварительно обученный детектор объектов YOLO v3.

detector = yolov3ObjectDetector('tiny-yolov3-coco');

Чтение тестового изображения.

img = imread('highway.png');

Задайте видимую область (ROI) в тестовом изображении.

roiBox = [70 40 100 100];

Обнаружение объектов в пределах заданного информация только для чтения.

[bboxes,scores,labels] = detect(detector,img,roiBox);

Отображение ROI и результатов обнаружения.

results = table(bboxes,labels,scores)
results=1×3 table
            bboxes             labels    scores 
    _______________________    ______    _______

    99    103     41     33     car      0.72206

img = insertObjectAnnotation(img,'Rectangle',roiBox,'ROI','Color',"blue");
detectedImg = insertObjectAnnotation(img,'Rectangle',bboxes,labels);
figure
imshow(detectedImg)

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

свернуть все

Детектор объектов YOLO v3, заданный как yolov3ObjectDetector объект.

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

  • H: Высота

  • W: Ширина

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

  • T: Количество тестовых изображений в массиве. Функция вычисляет результаты обнаружения объектов для каждого тестового изображения в массиве.

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

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

Тестовые изображения, заданные как ImageDatastore объект, CombinedDatastore объект, или TransformedDatastore объект, содержащий полные имена файлов тестовых изображений. Изображения в datastore должны быть полутоновыми или RGB-изображениями.

Необходимая область поиска, определенная как [<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(bboxes,scores,...
                                   'RatioType','Union',...
                                   'OverlapThreshold',0.5);

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

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

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

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

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

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

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

  • 'auto' - Предварительно обработать тестовое изображение перед выполнением обнаружения объектов. The detect функция вызывает preprocess функция, которая выполняет эти операции:

    • Изменение значения интенсивности обучающих изображений в области значений [0, 1].

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

  • 'none' - Выполнить обнаружение объектов без предварительной обработки тестового изображения. Если вы выбираете эту опцию, тип данных тестового изображения должен быть либо single или double.

Типы данных: char | string

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

свернуть все

Расположение объектов, обнаруженных в вход изображении или изображениях, возвращаемое как

  • M -by-4 матрицу, если вход является одним тестовым изображением.

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

. M - количество ограничивающих рамок в изображении.

Каждая строка в матрице - вектор с четырьмя элементами формы [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0> ]. Этот вектор задает верхний левый угол и размер соответствующего ограничивающего прямоугольника в пикселях.

Обнаружение оценок достоверности для каждого ограничивающего прямоугольника, возвращаемое как

  • M - вектор-строка элемента, если вход является одним тестовым изображением.

  • T массив ячеек -by-1, если вход является массивом тестовых изображений. T - количество тестовых изображений в массиве. Каждая камера массива содержит вектор-строку M-element, указывающий счета обнаружения для соответствующего ограничивающего прямоугольника.

M - количество ограниченных рамок, обнаруженных в изображении. Более высокий счет указывает на более высокое доверие в обнаружении.

Метки для ограничивающих рамок, возвращенные как

  • M категориальный массив -by-1, если вход является одним тестовым изображением.

  • T массив ячеек -by-1, если вход является массивом тестовых изображений. T - количество тестовых изображений в массиве. Каждая камера массива содержит категориальный вектор M -by-1, содержащий имена классов объектов.

M - количество ограниченных рамок, обнаруженных в изображении.

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

Введенный в R2021a