evaluateDetectionPrecision

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

Описание

averagePrecision = evaluateDetectionPrecision(detectionResults,groundTruthData) возвращает среднюю точность, detectionResults по сравнению с groundTruthData. Можно использовать среднюю точность, чтобы измерить уровень детектора объектов. Для детектора мультикласса функция возвращает averagePrecision когда вектор из музыки к каждому классу объекта в порядке задан groundTruthData.

пример

[averagePrecision,recall,precision] = evaluateDetectionPrecision(___) возвращает точки данных для графического вывода кривой отзыва точности, с помощью входных параметров от предыдущего синтаксиса.

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

Примеры

свернуть все

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

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

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

data = load('vehicleTrainingData.mat');
trainingData = data.vehicleTrainingData;

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

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

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

imds = imageDatastore(trainingData.imageFilename);

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

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

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

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

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

Оцените и постройте результаты

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

results = detect(detector, imds);

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

[ap, recall, precision] = evaluateDetectionPrecision(results, blds);

Постройте кривую точности/отзыва.

figure;
plot(recall, precision);
grid on
title(sprintf('Average precision = %.1f', ap))

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

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

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 20.1756 seconds.

Составьте таблицу, чтобы сохранить результаты.

numImages = height(stopSigns);
results = table('Size',[numImages 2],...
       'VariableTypes',{'cell','cell'},...
       'VariableNames',{'Boxes','Scores'}); 

Запустите детектор на учебных изображениях. Сохраните результаты как таблицу.

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

Оцените результаты против достоверных данных. Получите статистику точности.

[ap,recall,precision] = evaluateDetectionPrecision(results,stopSigns(:,2));

Постройте кривую отзыва точности.

figure
plot(recall,precision)
grid on
title(sprintf('Average Precision = %.1f',ap))

Figure contains an axes. The axes with title Average Precision = 0.7 contains an object of type line.

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

свернуть все

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

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

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

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

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

Каждая ограничительная рамка должна быть в формате [x y width height].

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

    • {boxes, labels} — boxLabelDatastore создает этот тип datastore.

    • {images, boxes, labels} — объединенный datastore. Например, использование combineimds , blds).

    Смотрите boxLabelDatastore.

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

Перекройте порог для присвоенного обнаружение к основному блоку истинности в виде числового скаляра. Отношение перекрытия вычисляется как пересечение по объединению.

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

свернуть все

Средняя точность по всем результатам обнаружения, возвращенным в виде числа или вектора. Precision является отношением истинных положительных экземпляров ко всем положительным экземплярам объектов в детекторе, на основе основной истины. Для детектора мультикласса средняя точность является вектором из средней музыки точности к каждому классу объекта.

Вспомните значения из каждого обнаружения, возвращенного как M-by-1 вектор из числовых скаляров или как массив ячеек. Длина M равняется 1 + количество обнаружений, присвоенных классу. Например, если ваши результаты обнаружения содержат 4 обнаружения с меткой 'car' класса, затем recall содержит 5 элементов. Первым значением отзыва всегда является 0.

Recall является отношением истинных положительных экземпляров к сумме истинных положительных сторон и ложных отрицательных сторон в детекторе, на основе основной истины. Для детектора мультикласса, recall и precision массивы ячеек, где каждая ячейка содержит точки данных для каждого класса объекта.

Значения точности от каждого обнаружения, возвращенного как M-by-1 вектор из числовых скаляров или как массив ячеек. Длина M равняется 1 + количество обнаружений, присвоенных классу. Например, если ваши результаты обнаружения содержат 4 обнаружения с меткой 'car' класса, затем precision содержит 5 элементов. Первое значение precision всегда 1.

Precision является отношением истинных положительных экземпляров ко всем положительным экземплярам объектов в детекторе, на основе основной истины. Для детектора мультикласса, recall и precision массивы ячеек, где каждая ячейка содержит точки данных для каждого класса объекта.

Введенный в R2017a