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

Обнаружьте объекты в заданном 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-byC-by-T. Изображения должны быть действительными, неразреженными, полутоновыми или изображение RGB.

  • H: Высота

  • W: Width

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

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

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

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

Протестируйте изображения в виде ImageDatastore объект, CombinedDatastore объект или TransformedDatastore объект, содержащий полные имена файлов тестовых изображений. Изображения в datastore должны быть шкалой полутонов или изображениями 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' и вектор из формы [height width]. Модули находятся в пикселях. Минимальный размер области задает размер самой маленькой области, содержащей объект.

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

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

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

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

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

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

    • Перемасштабирует значения интенсивности учебных изображений к области значений [0, 1].

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Введенный в R2021a