exponenta event banner

обнаружить

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

Описание

пример

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

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

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

пример

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

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

[___] = 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: Ширина

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

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

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

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

Хранилище данных, указанное как объект хранилища данных, содержащий коллекцию изображений. Каждое изображение должно иметь оттенки серого, 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(bbox,scores,...
                                   'RatioType','Union',...
                                   'OverlapThreshold',0.5);

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

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

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

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

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

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

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

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

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

  • 'cpu' - Использовать ЦП.

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

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

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

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

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

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

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

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

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

'mex' ускорение не поддерживает все слои. Список поддерживаемых слоев см. в разделе Поддерживаемые слои (кодер графического процессора).

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

свернуть все

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

Подробнее

свернуть все

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

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

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

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

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