Оцените поля привязки от обучающих данных

Поля привязки являются важными параметрами детекторов объектов глубокого обучения, такими как Faster R-CNN и YOLO v2. Форма, шкала и количество полей привязки влияют на КПД и точность детекторов.

Для получения дополнительной информации смотрите Поля Привязки для Обнаружения объектов.

Загрузите обучающие данные

Загрузите набор данных транспортного средства, который содержит 295 изображений и сопоставленные метки поля.

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

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

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

Отобразите сводные данные набора данных.

summary(vehicleDataset)
Variables:

    imageFilename: 295×1 cell array of character vectors

    vehicle: 295×1 cell

Визуализируйте распределение поля основной истины

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

Объедините все поля основной истины в один массив.

allBoxes = vertcat(vehicleDataset.vehicle{:});

Постройте область поля по сравнению с соотношением сторон поля.

aspectRatio = allBoxes(:,3) ./ allBoxes(:,4);
area = prod(allBoxes(:,3:4),2);

figure
scatter(area,aspectRatio)
xlabel("Box Area")
ylabel("Aspect Ratio (width/height)");
title("Box Area vs. Aspect Ratio")

График показывает несколько групп объектов, которые имеют подобный размер и форму, Однако потому что группы распространены, вручную выбор полей привязки затрудняет. Лучший способ оценить поля привязки состоит в том, чтобы использовать кластеризирующийся алгоритм, который может сгруппировать подобные поля вместе с помощью значимой метрики.

Оцените поля привязки

Оцените поля привязки от обучающих данных с помощью estimateAnchorBoxes функция, которая использует метрику расстояния пересечения по объединению (IoU).

Метрика расстояния на основе IoU является инвариантной к размеру полей, в отличие от Евклидовой метрики расстояния, которая производит большие ошибки, когда размеры поля увеличиваются [1]. Кроме того, использование метрики расстояния IoU приводит к полям подобных соотношений сторон и размеров, кластеризируемых вместе, который приводит к оценкам поля привязки, которые соответствуют данным.

Создайте boxLabelDatastore использование основной истины окружает набор данных транспортного средства. Если шаг предварительной обработки для обучения, детектор объектов включает изменение размеров изображений, используйте transform и bboxresize изменить размер ограничительных рамок в boxLabelDatastore прежде, чем оценить поля привязки.

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

Выберите количество привязок и оцените поля привязки с помощью estimateAnchorBoxes функция.

numAnchors = 5;
[anchorBoxes, meanIoU] = estimateAnchorBoxes (trainingData, numAnchors);
anchorBoxes
anchorBoxes = 5×2

    21    27
    87   116
    67    92
    43    61
    86   105

Выбор количества привязок является другим учебным гиперпараметром, который требует тщательного выбора с помощью эмпирического анализа. Одной качественной мерой для оценки предполагаемых полей привязки является средний IoU полей в каждом кластере. estimateAnchorBoxes функционируйте использует k-средних значений, кластеризирующих алгоритм с метрикой расстояния IoU, чтобы вычислить перекрытие с помощью уравнения, 1 - bboxOverlapRatio(allBoxes,boxInCluster).

meanIoU
meanIoU = 0.8411

Среднее значение IoU, больше, чем 0,5, гарантирует, что поля привязки накладываются хорошо с полями в обучающих данных. Увеличение числа привязок может улучшить среднюю меру IoU. Однако использование большего количества привязки окружает детектор объектов, может также увеличить стоимость расчета и привести к сверхподбору кривой, который приводит к плохой производительности детектора.

Развернитесь в области значений значений и постройте средний IoU по сравнению с количеством полей привязки, чтобы измерить компромисс между количеством привязок и означать IoU.

maxNumAnchors = 15;
meanIoU = zeros([maxNumAnchors,1]);
anchorBoxes = cell(maxNumAnchors, 1);
for k = 1:maxNumAnchors
    % Estimate anchors and mean IoU.
    [anchorBoxes{k},meanIoU(k)] = estimateAnchorBoxes(trainingData,k);    
end

figure
plot(1:maxNumAnchors,meanIoU,'-o')
ylabel("Mean IoU")
xlabel("Number of Anchors")
title("Number of Anchors vs. Mean IoU")

Используя два результата полей привязки в среднем значении IoU, больше, чем 0,65 и использование больше чем 7 полей привязки, дает только к незначительному улучшению среднего значения IoU. Учитывая эти результаты, следующий шаг должен обучить и оценить несколько детекторов объектов с помощью значений между 2 и 6. Этот эмпирический анализ помогает определить количество полей привязки, требуемых удовлетворить требованиям приложений к производительности, таким как скорость обнаружения или точность.