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 для обучения.

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.

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

свернуть все

Местоположения и счета объектов, заданные как двухколоночная таблица, содержащая ограничительные рамки и счета для каждого обнаруженного объекта. Для многоклассового обнаружения третий столбец содержит предсказанную метку для каждого обнаружения. Ограничительные рамки должны храниться в массиве ячеек 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]. Формат задает положение верхнего левого угла и размер ограничивающего прямоугольника на соответствующем изображении.

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

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

свернуть все

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

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

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

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

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

Введенный в R2017a