evaluateDetectionMissRate

Оцените метрику скорости промаха для обнаружения объектов

Описание

пример

logAverageMissRate = evaluateDetectionMissRate(detectionResults,groundTruthData) возвращает среднюю логарифмическую частоту пропусков detectionResults по сравнению с groundTruthData, который используется для измерения эффективности детектора объектов. Для многоклассового детектора средняя логарифмическая частота промахов является вектором счетов для каждого класса объекта в порядке, заданном groundTruthData.

пример

[logAverageMissRate,fppi,missRate] = evaluateDetectionMissRate(___) Возвраты точки данных для графического изображения кривого журнала miss rate-false на изображение (FPPI), используя входные аргументы из предыдущего синтаксиса.

[___] = evaluateDetectionMissRate(___,threshold) задает порог перекрытия для назначения обнаружения основного блока истинности.

Примеры

свернуть все

В этом примере показано, как оценить частоту пропусков предварительно обученного детектора объектов YOLO v2.

Загрузите Транспортное средство Достоверных данных

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

data = load('vehicleTrainingData.mat');
trainingData = data.vehicleTrainingData(1:100,:);

Добавьте полный путь к локальной папке данных о транспортном средстве.

dataDir = fullfile(toolboxdir('vision'), 'visiondata');
trainingData.imageFilename = fullfile(dataDir, trainingData.imageFilename);

Создайте imageDatastore с помощью файлов из таблицы.

imds = imageDatastore(trainingData.imageFilename);

Создайте boxLabelDatastore с помощью столбцов меток из таблицы.

blds = boxLabelDatastore(trainingData(:,2:end));

Детектор YOLOv2 нагрузки для обнаружения

Загрузите детектор, содержащий layerGraph для обучения.

vehicleDetector = load('yolov2VehicleDetector.mat');
detector = vehicleDetector.detector;

Оцените и постройте график результатов Miss Rate

Запустите детектор с imageDatastore.

results = detect(detector, imds);

Оцените результаты по достоверным данным.

[am, fppi, missRate] = evaluateDetectionMissRate(results, blds);

Постройте график кривой log-miss-rate/FPPI.

figure;
loglog(fppi, missRate);
grid on
title(sprintf('Log Average Miss Rate = %.1f', am))

Загрузите таблицу основной истины.

load('stopSignsAndCars.mat')
stopSigns = stopSignsAndCars(:, 1:2);
stopSigns.imageFilename = fullfile(toolboxdir('vision'),'visiondata', ...
    stopSigns.imageFilename);

Обучите детектор на основе ACF.

detector = trainACFObjectDetector(stopSigns,'NegativeSamplesFactor',2);
ACF Object Detector Training
The training will take 4 stages. The model size is 34x31.
Sample positive examples(~100% Completed)
Compute approximation coefficients...Completed.
Compute aggregated channel features...Completed.
--------------------------------------------
Stage 1:
Sample negative examples(~100% Completed)
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 19 weak learners.
--------------------------------------------
Stage 2:
Sample negative examples(~100% Completed)
Found 84 new negative examples for training.
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 20 weak learners.
--------------------------------------------
Stage 3:
Sample negative examples(~100% Completed)
Found 84 new negative examples for training.
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 54 weak learners.
--------------------------------------------
Stage 4:
Sample negative examples(~100% Completed)
Found 84 new negative examples for training.
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 61 weak learners.
--------------------------------------------
ACF object detector training is completed. Elapsed time is 18.5349 seconds.

Создайте массив структур для хранения результатов.

numImages = height(stopSigns);
results(numImages) = struct('Boxes', [], 'Scores', []);

Запустите детектор на обучающих изображениях.

for i = 1 : numImages
    I = imread(stopSigns.imageFilename{i});
    [bboxes, scores] = detect(detector, I);
    results(i).Boxes = bboxes;
    results(i).Scores = scores;
end

results = struct2table(results);

Оцените результаты по достоверным данным.

[am, fppi, missRate] = evaluateDetectionMissRate(results, stopSigns(:, 2));

Построение графика кривой log-miss-rate/FPPI.

figure
loglog(fppi, missRate);
grid on
title(sprintf('log Average Miss Rate = %.1f', am))

Figure contains an axes. The axes with title log Average Miss Rate = 0.3 contains an object of type line.

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

свернуть все

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

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

        ds = imageDatastore(stopSigns.imageFilename);
        detectionResults = detect(detector,ds);

Типы данных: table

Помеченная основная истина, заданная как datastore или таблица.

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

  • Datastore - хранилище данных, read и readall функции возвращают массив ячеек или таблицу с по крайней мере двумя столбцами ограничивающего прямоугольника и помечает векторы камер. Ограничивающие прямоугольники должны быть в массиве ячеек матриц <reservedrangesplaceholder4>-by-4 в формате [x, y, width, height]. The datastoreread и readall функции должны вернуть один из форматов:

    См. boxLabelDatastore.

  • Таблица - Один или несколько столбцов. Все столбцы содержат ограничительные рамки. Каждый столбец должен быть вектором камеры, который содержит M на 4 матрицы, которые представляют один класс объекта, такой как stopSign, carRear или carFront. Столбцы содержат двойные массивы с 4 элементами M ограничивающих прямоугольников в формате [x, y, width, height]. Формат задает положение верхнего левого угла и размер ограничивающего прямоугольника на соответствующем изображении.

Порог перекрытия для обнаружения, назначенного основному блоку истинности, заданный как числовой скаляр. Коэффициент перекрытия вычисляется как пересечение над объединением.

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

свернуть все

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

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

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

Введенный в R2017a