Как определить метку ограничивающего прямоугольника в YOLO V1?

  1. Я пытаюсь воспроизвести yolo v1 ,, но у меня возникли проблемы при создании этикеток.
  2. Yolo v1 имеет 2 ограничивающих прямоугольника, поэтому, когда в сетке есть объект, как выбрать, в какой ограничивающий прямоугольник помещать информацию о местоположении?

Например

  1. на картинке 416 * 416 есть объект [x, y, w, h] = [100,200,300,400]
  2. Следуйте бумаге йоло, нормализованное местоположение до [0,25, 0,084, 0,72, 0,96]
  3. Как и в статье о йоло, мне нужно создать тензор 7 * 7 * 30, большинство из них равно 0, но в [4,5 ,:] тензор должен быть вектором длиной 30: [уверенность1, x1, y1, w1 , h1, trust2, x2, y2, w2, h2, c0, c1 ...] вот так: введите описание изображения здесь

Мой вопрос: что такое [уверенность1, x1, y1, w1, h1, уверенность2, x2, y2, w2, h2,]?

какой выбрать A, B, C? и почему?

введите здесь описание изображения


person Simon    schedule 01.08.2019    source источник


Ответы (1)


В каждой ячейке создается фиксированное количество (B) ограничивающих прямоугольников с их оценками достоверности. Оценки достоверности вычисляются путем умножения вероятности каждого объекта и их пересечения на объединение предсказанного блока и наземного блока истинности. Каждый ограничивающий прямоугольник обозначен 5 числами: четверкой (x; y; w; h) и оценкой достоверности прямоугольника. x и y - координаты центра прямоугольника, а w и h - ширина и высота прямоугольника соответственно. Эти четыре числа являются значениями с плавающей запятой относительно абсолютной ширины и высоты изображения, и они могут быть где-то между 0,0 и 1,0. Оценка достоверности указывает на вероятность того, что коробка содержит объект. Каждая ячейка сетки содержит условные вероятности классов для количества различных классов, и, следовательно, для каждой категории объектов существует одна вероятность в каждой ячейке, независимо от значения B. Обратите внимание, что вероятность условного класса означает, что вероятность объект, принадлежащий к определенному классу, обусловлен блоком, содержащим объект. Таким образом, для каждой ячейки сетки есть числа размером B × 5, указывающие информацию об ограничивающем прямоугольнике и вероятности класса C. Эта информация прогнозирования кодируется как тензор в форме (S; S; B × 5 + C).

Как упоминалось в документе:

предсказания кодируются как тензор S × S × (B * 5 + C). Для оценки YOLO на PASCAL VOC мы используем S = 7, B = 2. PASCAL VOC имеет 20 помеченных классов, поэтому C = 20. Наш окончательный прогноз - тензор 7 × 7 × 30.

Поскольку набор данных содержит 20 классов и у вас есть 2 ограничивающих прямоугольника в каждой ячейке, у вас будет: B × 2 + 20 = 2 × 5 + 20 = 30. Эти 20 вероятностей классов, которые могут быть равны 0. В тензоре вы помещаете 5 нулей, поэтому я предполагаю, что у вас есть 5 классов объектов. Итак, в этом случае:

B × 2 + 5 = 9, и если ваше S равно 7 в качестве значения по умолчанию в YOLO, ваш тензор будет иметь длину: 7 × 7 × 9 = 4989. Итак, для каждого ограничивающего прямоугольника у вас есть 9 значений, и все эти векторы длины 9 прикреплены друг к другу. На ваш вопрос вариант A кажется более верным.

введите здесь описание изображения

Этот рисунок предназначен для YOLOv3, и в вашем случае для каждой ячейки у вас есть 2 ограничивающих прямоугольника и 20 классов (в отличие от рисунка, где есть 5 прямоугольников и 6 классов). Но идея похожая.

person Hadi GhahremanNezhad    schedule 01.08.2019
comment
Спасибо за ответ! Но у нас есть некоторое недоразумение: 1. Я снова редактирую вопрос, чтобы было понятнее 2. Мой класс тоже 20, а не 5. 3. Вопрос в том, как заполнить число в ограничивающей рамке label < / b>. - person Simon; 02.08.2019
comment
Вы все равно должны выбрать A. Для ручных аннотаций ограничивающего прямоугольника у вас должно быть 5 элементов для каждого объекта: <object-class> <x_center> <y_center> <width> <height>, и программа должна вычислять тензоры. Кроме того, вероятности класса не обязательно должны быть равны 0, они могут находиться в диапазоне от 0 до 1, и в качестве класса объекта выбирается тот, который имеет наивысший балл. - person Hadi GhahremanNezhad; 02.08.2019
comment
Вы можете посмотреть AlexeyAB объяснения того, как аннотировать набор данных. - person Hadi GhahremanNezhad; 02.08.2019
comment
Спасибо. Проверяю чей-то код: github.com/JY -112553 / yolov1-keras-voice / blob / master / data / data.py Он использует метку 7 * 7 * 25 для воспроизведения yolov1. Я думаю, что совершил здесь ошибку: я думал, что размеры метки и прогноза должны соответствовать однозначному соответствию. На самом деле, это метка 7 * 7 * 25 для предсказания 7 * 7 * 30, а не метка 7 * 7 * 30 для предсказания 7 * 7 * 30. - person Simon; 04.08.2019