#computer-vision #pytorch #object-detection #detection #yolo
#компьютерное зрение #pytorch #обнаружение объектов #обнаружение #yolo
Вопрос:
У меня есть несколько аннотаций, которые изначально были в формате YOLO. Мне нужно преобразовать его в формат yolo csv, чтобы тренироваться с моей моделью transformers. Образец файла .csv, который мне нужен:
Пример файла аннотаций в формате CSV
Атрибуты csv включают в себя: image_id, ширину, высоту и координаты ограничивающей рамки изображения. Любая помощь будет оценена!
Ответ №1:
прежде всего, я должен сказать, что нет прямого способа преобразовать этот формат в csv. вы должны читать файлы и анализировать их данные.
Шаг 1: импорт библиотек
нам нужно прочитать текстовые файлы (метки yolo) из каталога и сохранить их в csv. поэтому нам нужны эти библиотеки :
import os
import glob
import pandas as pd
import numpy as np
Шаг 2: получите список ваших ярлыков yolo
откройте каталог, в котором у вас есть ваши ярлыки yolo, с OS
библиотекой и прочитайте текстовые файлы с glob
:
os.chdir(r'D:karamiLabeledtrain1labels')
myFiles = glob.glob('*.txt')
мои ярлыки находятся в папке labels, поэтому я установил для этого каталог.
Шаг 3: чтение строк и разделение данных у вас есть список ярлыков в переменной MyFiles, вы должны выполнить итерацию по нему, прочитать первую строку каждого файла и разделить его данные. на изображении, которым вы поделились, у нас есть абсолютная координата ограничивающих прямоугольников. согласно документу yolo darknet, мы имеем :
класс объекта x_center y_center ширина высота
x_center,y_center,width,height — значения с плавающей запятой относительно ширины и высоты изображения, они могут быть равны от (0.0 до 1.0], например: = <absolute_x> / <image_width> или = <absolute_height> / <image_height>
вы можете увидеть полное описание здесь
итак, нам нужно умножить наши координаты на ширину и высоту изображений.
файл yolo не содержит размер изображения, поэтому вы должны определить их, прежде чем после этого использовать разделенную строку. затем сохраните свой фрейм данных. код :
width=1024
height=1024
image_id=0
final_df=[]
for item in myFiles:
row=[]
bbox_temp=[]
with open(item, 'rt') as fd:
first_line = fd.readline()
splited = first_line.split();
row.append(image_id)
row.append(width)
row.append(height)
try:
bbox_temp.append(float(splited[1])*width)
bbox_temp.append(float(splited[2])*height)
bbox_temp.append(float(splited[3])*width)
bbox_temp.append(float(splited[4])*height)
row.append(bbox_temp)
final_df.append(row)
except:
print("file is not in YOLO format!")
df = pd.DataFrame(final_df,columns=['image_id', 'width', 'height','bbox'])
df.to_csv("saved.csv",index=False)
вот мой файл csv :
Комментарии:
1. помогает ли это — @Markus Khoa ?