exponenta event banner

Оценить якорные ящики из данных обучения

Якорные ящики являются важными параметрами детекторов объектов глубокого обучения, таких как 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-means с метрикой расстояния 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 по компьютерному зрению и распознаванию образов (CVPR), 6517-25. Гонолулу, HI: IEEE, 2017. https://doi.org/10.1109/CVPR.2017.690.