Как преобразовать формат yolo darknet в файл .csv

#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 ?