Якорные ящики являются важными параметрами детекторов объектов глубокого обучения, таких как 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);
anchorBoxesanchorBoxes = 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.