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

Якорные коробки являются важными параметрами детекторов объектов глубокого обучения, таких как 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 для блоков в каждом кластере. The 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. Этот эмпирический анализ помогает определить количество анкерных коробок, необходимых для удовлетворения требований прикладной эффективности, таких как скорость обнаружения или точность.

Ссылки

Редмон, Джозеф и Али Фархади. «YOLO9000: лучше, быстрее, сильнее». В материалах конференции IEEE по компьютерному зрению и распознаванию шаблонов, стр. 7263-7271. 2017.

[1] Редмон, Джозеф и Али Фархади. «YOLO9000: Лучше, Быстрее, Сильнее». В 2017 году IEEE Conference on Компьютерное Зрение and Pattern Recognition (CVPR), 6517-25. Гонолулу, HI: IEEE, 2017. https://doi.org/10.1109/CVPR.2017.690.