SeaDronesSee数据集为无人机拍摄的海洋救援相关的数据集。目标框有’ignored’, ‘swimmer’, ‘boat’, ‘jetski’, ‘life_saving_appliances’, 'buoy’六个类别。
原始的官网dang下来的数据集是由Java标注的json格式的数据集,无法直接在YOLO上面部署,需要进行数据格式转换,将json格式转换成txt格式。下面进行教程:
一、数据预处理
- 将解压后的Compressed Version中的images和annotations粘贴到data中
- 运行data_process.py。将会生成三个txt文件和一个labels文件夹
- 把images/test、train、val中的所有图片移动到images下
import os from tqdm import tqdm from PIL import Image import json def generate_txt_file(folder_path, txt_file_path): print("正在处理文件夹:", folder_path) with open(txt_file_path, 'w') as txt_file: file_list = os.listdir(folder_path) for file_name in file_list: if file_name.endswith('.jpg') or file_name.endswith('.png'): txt_file.write('data/images/' + file_name + '\n') print("已生成文件:", txt_file_path) def JSONtoTXT(mode,datapath): # 若没有,创建labels文件夹 if not os.path.exists('labels'): os.mkdir('labels') with open(datapath, 'r') as file: data = json.load(file) print("正在处理:" + datapath) annotations = data['annotations'] for annotation in tqdm(annotations): category_id = annotation['category_id'] if category_id == 0: # 如果category_id为ignore,则跳过当前注释信息 print(str(annotation['image_id']) + ".jpg的标签为ignore") continue image_id = annotation['image_id'] file_path = os.path.join('images/', mode + '/' + str(image_id) + '.jpg') with Image.open(file_path) as img: width, height = img.size bbox = annotation['bbox'] # 目标框中心点x轴相对于图片x轴的比例 = (目标框x位置 + 目标框宽度 / 2) / 图片宽度 x = (int(bbox[0]) + int(bbox[2]) / 2) / int(width) # 目标框中心点y轴相对于图片y轴的比例 = (目标框y位置 + 目标框高度 / 2) / 图片高度 y = (int(bbox[1]) + int(bbox[3]) / 2) / int(height) # 目标框宽度相对于图片宽度的比例 = 目标框宽度 / 图片宽度 w = int(bbox[2]) / int(width) # 目标框高度相对于图片高度的比例 = 目标框高度 / 图片高度 h = int(bbox[3]) / int(height) content = f"{category_id} {x} {y} {w} {h}" file_name = image_id file_path = f'labels/{file_name}.txt' if os.path.exists(file_path): with open(file_path, 'a') as file: file.write('\n' + content) else: with open(file_path, 'w') as file: file.write(content) """ 一:根据images下的三个文件夹,生成对应的txt。内容为各图片路径 """ # 文件夹路径 train_folder = 'images/train' val_folder = 'images/val' test_folder ='images/test' # 生成txt文件 generate_txt_file(train_folder, 'train.txt') generate_txt_file(val_folder, 'val.txt') generate_txt_file(test_folder, 'test.txt') print("文件处理完成。") """ 二:根据JSON转txt(这是这个代码中主要的部分) """ # JSON文件数据清洗转TXT JSONtoTXT('train', 'annotations/instances_train.json') JSONtoTXT('val', 'annotations/instances_val.json') JSONtoTXT('test', 'annotations/instances_test_nogt.json') print("处理完成")
修改最后三行代码分别转换test、train、val中的数据集标签。运行效果图如下:会生成label文件夹,里面就是所需要的数据集标签。
二、训练数据集
-
数据集准备:首先需要准备一个包含图像和对应标注信息的数据集。图像应该包含待检测的目标,并且与每个目标相关联的标注信息应该包括类别和边界框的位置。(seadronessee数据集)
-
安装Yolov5:在开始训练之前,需要安装Yolov5。可以从Yolov5的GitHub仓库中下载源代码,然后根据文档中提供的指南进行安装。
-
配置模型参数:在Yolov5的源代码目录中,有一个名为
yolov5s.yaml
的文件,它包含了模型的配置参数。可以根据自己的需求进行修改,例如调整输入图像的分辨率、修改训练的超参数等。 -
数据集划分:在
yolov5s.yaml
文件中,可以指定训练集和验证集的路径。将数据集划分为训练集和验证集,并将它们的路径分别填入配置文件中。 -
标注转换:Yolov5要求标注信息以特定格式提供。可以使用工具如labelImg将标注信息转换为Yolov5所需的格式,通常是将标注信息保存为
txt
文件,每个文件对应一张图像。 -
训练模型:在命令行中运行
train.py
脚本来开始训练模型。可以通过指定模型配置文件、数据集路径和其他训练参数来自定义训练过程。训练过程将自动按照指定的参数进行模型训练。 -
评估模型:在训练完成后,可以使用
val.py
脚本对训练得到的模型进行评估。该脚本将在验证集上计算模型的性能指标,如精度、召回率等。 -
模型推理:训练完成后,可以使用
detect.py
脚本对新图像进行模型推理。该脚本将加载训练得到的模型,并在输入图像中检测目标。可以通过指定输入图像的路径和输出结果的保存路径来运行脚本。
三、说明
本文主要讲解数据转换,可以将seadronessee数据集进行格式转换,对于后续训练提供数据支撑。
标签:部署,id,int,file,path,folder,txt,数据,SeaDronesSee From: https://blog.csdn.net/m0_74887193/article/details/140078903