Вопрос или проблема
У меня есть помеченный набор данных для обнаружения объектов
несколько тысяч изображений с аннотацией в csv файле
csv содержит следующие столбцы
image_path, class, xmax, xmin, ymax, ymin
похоже на Pascal voc формат меток, но когда я его отображаю, это не работает, и все метки выглядят неправильно
Я заметил, что есть некоторые отрицательные значения в xmin, ymin, и это странно
поэтому я спрашиваю, какие форматы разметки могут иметь такие значения, потому что это?
например, bbox имеет следующие значения
xmax: 429
xmin: -68
ymax = 390
ymin = 130
код, который я использовал:
import cv2
import pandas as pd
df = pd.read_csv('train.csv')
directory = 'dataset/images'
color = (255, 0, 0)
thickness = 2
org = (50, 50)
fontScale = 1
font = cv2.FONT_HERSHEY_SIMPLEX
for i in df.index:
image_path = df.iloc[i]['image_path']
xmax = int(df.iloc[i]['xmax'])
xmin = int(df.iloc[i]['xmin'])
ymax = int(df.iloc[i]['ymax'])
ymin = int(df.iloc[i]['ymin'])
txt = df.iloc[i]['name']
x= xmax - xmin
y = ymax - ymin
start_point = (xmin,ymin)
end_point = (xmax,ymax)
img = cv2.imread(directory+ "https://datascience.stackexchange.com/"+image_path)
image = cv2.putText(img, txt, org, font,
fontScale, color, thickness, cv2.LINE_AA)
bbox_img = cv2.rectangle(image, start_point, end_point, color, thickness)
cv2.imshow('image window', bbox_img)
# добавьте wait key. окно ждет, пока пользователь не нажмет клавишу
cv2.waitKey(0)
# и, наконец, закройте все открытые окна
cv2.destroyAllWindows()
Судя по вашему ответу, похоже, что некоторые из ваших ограничивающих рамок используют другую систему координат, чем та, что обычно используется для отображения в OpenCV. OpenCV рассматривает координаты на изображении как строго положительные (где $(0,0)$ является верхним левым углом изображения при отображении) источник. Тот факт, что у вас есть отрицательные координаты, указывает на то, что эти координаты используют другую парадигму, например, что $(0,0)$ находится в центре изображения.
Вы можете выяснить, какова разметка для вашего набора данных. Также может быть проще перенормировать координаты изображения так, чтобы наименьшие значения $x$ и $y$ были $(0,0)$.
Ответ или решение
При анализе вашего набора данных и формате аннотаций, в частности, нескольких значений, при этом le xmin и ymin имеют отрицательные значения, важно понимать, какие форматы меток могут использовать такие координаты.
Понимание форматов разметки
-
Стандартные форматы разметки:
- Наиболее распространенными форматами разметки для детекции объектов являются PASCAL VOC и COCO. Оба из них используют положительные значения координат, где (0,0) находится в верхнем левом углу изображения. Таким образом, отрицательные значения в xmin и ymin не должны встречаться в этих форматах.
-
Коррекция координат:
- Отрицательные координаты могут свидетельствовать о том, что используется иное представление системы координат. Например, в некоторых случаях (особенно в задачах по анализу изображений, связанных с компьютерным зрением) может применяться система координат, в которой (0,0) находится в центре изображения. Это означает, что:
- Положительные значения указывают на область правой и нижней частей изображения.
- Отрицательные значения означают области, которые находятся вне границ изображения слева и сверху.
- Отрицательные координаты могут свидетельствовать о том, что используется иное представление системы координат. Например, в некоторых случаях (особенно в задачах по анализу изображений, связанных с компьютерным зрением) может применяться система координат, в которой (0,0) находится в центре изображения. Это означает, что:
Возможные источники негативных значений
- Формат, использующий центральную точку: Может быть, данные получены из формата разметки, который предполагает, что центр изображения — это (0, 0), а затем координаты измеряются относительно этого центра.
- Ошибки при предварительной обработке данных: Неверная обработка или преобразование координат, где данные были масштабированы или сдвинуты. Например, если к значениям координат были применены математические операции, влиявшие на их диапазон.
Примеры и проверка
Ваш пример показывает коробку с координатами:
- xmax: 429
- xmin: -68
- ymax: 390
- ymin: 130
Эти значения говорят о том, что часть объекта находится за пределами изображения (в этом случае — влево). Для правильной визуализации таких аннотаций в OpenCV вам нужно следовать нескольким шагам.
Рекомендации по решению проблемы
-
Реализуйте преобразование координат:
Если система координат вашей аннотации базируется на центральной точке, вы можете преобразовывать значения следующим образом:- Например, если ваше изображение имеет ширину
W
и высотуH
, корректировка может выглядеть так:xmin = xmin + W / 2 ymin = ymin + H / 2 xmax = xmax + W / 2 ymax = ymax + H / 2
Это переместит все координаты в положительное пространство.
- Например, если ваше изображение имеет ширину
-
Проверка формата аннотации:
Найдите документацию на ваш набор данных или опросите источники, которые предоставили вам данные, чтобы определить, какой именно формат аннотаций использовался. Возможно, существует специфический метод преобразования координат. -
Используйте отладочные инструменты:
Добавьте больше отладочной информации, выводя координаты перед рисованием рамок. Это поможет быстро определить, какие надписи и какие координаты не нормализованы.
Заключение
Ваша ситуация с негативными значениями в аннотациях может быть решена путем корректировки координат с помощью описанных методик. Определение того, какой именно формат был использован, поможет избежать подобных ошибок в будущем. Нормализация координат для корректной визуализации гарантирует, что ваши метки будут видеть в правильной области на изображениях, что необходимо для успешной работы алгоритмов детекции объектов.