exponenta event banner

обнаружить

Обнаружение объектов с помощью детектора объектов 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 функция хранилища входных данных ds.

пример

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

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

Примечание

Для этой функции требуется модель Computer Vision Toolbox™ для обнаружения объектов YOLO v3. Модель панели инструментов Computer Vision Toolbox для обнаружения объектов YOLO v3 можно установить из проводника надстроек. Дополнительные сведения об установке надстроек см. в разделе Получение надстроек и управление ими. Для выполнения этой функции потребуется 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');

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

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];

Обнаружение объектов в пределах указанного ROI.

[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-startC-by-T. Изображения должны быть реальными, непроверенными, в градациях серого или RGB.

  • H: Высота

  • W: Ширина

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Масштабирует значения интенсивности обучающих изображений до диапазона [0, 1].

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

  • 'none' - Для обнаружения объекта без предварительной обработки тестового изображения. При выборе этого параметра тип данных тестового образа должен быть: single или double.

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

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

свернуть все

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

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

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

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

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

Показатели достоверности обнаружения для каждой ограничивающей рамки, возвращаемые как

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

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

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

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

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

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

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

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

Представлен в R2021a