exponenta event banner

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

Создайте боксLabelDatastore, используя столбцы меток из таблицы.

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

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

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

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

Помеченная истинность основания, заданная как хранилище данных или таблица.

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

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

    • {поля, метки} - boxLabelDatastore создает этот тип хранилища данных.

    • {изображения, поля, метки} - комбинированное хранилище данных. Например, использованиеcombine(imds,blds).

    Посмотрите boxLabelDatastore.

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

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

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

свернуть все

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

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

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

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

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

См. также

Приложения

Функции

Объекты

Темы

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