首页 > 其他分享 >SeaDronesSee数据集部署

SeaDronesSee数据集部署

时间:2024-08-11 13:58:03浏览次数:13  
标签:部署 id int file path folder txt 数据 SeaDronesSee

SeaDronesSee数据集为无人机拍摄的海洋救援相关的数据集。目标框有’ignored’, ‘swimmer’, ‘boat’, ‘jetski’, ‘life_saving_appliances’, 'buoy’六个类别。

原始的官网dang下来的数据集是由Java标注的json格式的数据集,无法直接在YOLO上面部署,需要进行数据格式转换,将json格式转换成txt格式。下面进行教程:

一、数据预处理

  1. 将解压后的Compressed Version中的images和annotations粘贴到data中
  2. 运行data_process.py。将会生成三个txt文件和一个labels文件夹
  3. 把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文件夹,里面就是所需要的数据集标签。

二、训练数据集

  1. 数据集准备:首先需要准备一个包含图像和对应标注信息的数据集。图像应该包含待检测的目标,并且与每个目标相关联的标注信息应该包括类别和边界框的位置。(seadronessee数据集)

  2. 安装Yolov5:在开始训练之前,需要安装Yolov5。可以从Yolov5的GitHub仓库中下载源代码,然后根据文档中提供的指南进行安装。

  3. 配置模型参数:在Yolov5的源代码目录中,有一个名为yolov5s.yaml的文件,它包含了模型的配置参数。可以根据自己的需求进行修改,例如调整输入图像的分辨率、修改训练的超参数等。

  4. 数据集划分:在yolov5s.yaml文件中,可以指定训练集和验证集的路径。将数据集划分为训练集和验证集,并将它们的路径分别填入配置文件中。

  5. 标注转换:Yolov5要求标注信息以特定格式提供。可以使用工具如labelImg将标注信息转换为Yolov5所需的格式,通常是将标注信息保存为txt文件,每个文件对应一张图像。

  6. 训练模型:在命令行中运行train.py脚本来开始训练模型。可以通过指定模型配置文件、数据集路径和其他训练参数来自定义训练过程。训练过程将自动按照指定的参数进行模型训练。

  7. 评估模型:在训练完成后,可以使用val.py脚本对训练得到的模型进行评估。该脚本将在验证集上计算模型的性能指标,如精度、召回率等。

  8. 模型推理:训练完成后,可以使用detect.py脚本对新图像进行模型推理。该脚本将加载训练得到的模型,并在输入图像中检测目标。可以通过指定输入图像的路径和输出结果的保存路径来运行脚本。

三、说明

本文主要讲解数据转换,可以将seadronessee数据集进行格式转换,对于后续训练提供数据支撑。

标签:部署,id,int,file,path,folder,txt,数据,SeaDronesSee
From: https://blog.csdn.net/m0_74887193/article/details/140078903

相关文章

  • 分享一套包含12000多条历史上的今天发生的大事件数据库 及中国城市2017年全年GDP排行
    一、分享一套包含12000多条历史上的今天发生的大事件数据库    分享一套包括1.2万条历史上的今天的sql数据库文件。包含12000多条历史上的今天数据的SQL数据库文件.zip。详细数据可以参考使用此数据库运行的网站: http://www.guihei.com 下    资源下载链......
  • GeoServer+Postgis发布存储在Postgis中的栅格数据(二)--pgraster插件使用
    这一篇是前面一篇的续集,前一篇链接GeoServer+Postgis发布存储在Postgis中的栅格数据前期准备pgraster插件下载:还是提供一个maven地址,直接搜索pgraster即可,版本的话因为插件是gs-开头选择和GeoServer版本一致即可,前一篇使用的GeoServer版本为2.19.6,所以这里也选择2.19.6即......
  • [纯干货]SpringCould + 适配器模式 + nacos动态部署 OSS 对接
    一、前言在一个微服务项目里,我们的OSS云存储服务常常需要配置诸如阿里云、腾讯云、minio等多个云存储厂商的业务代码,而且后续无法确保是否会增添新的云存储厂商。此时,倘若我们要修改具体使用的云存储厂商,就会致使controller层和service层发生变动,这并不符合低耦合的理......
  • 解决LocalDateTime返回前端数据为数组结构的问题
    问题现象解决办法如下1、使用@JsonFormat@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")结果2、使用SpringMVC提供的ExtendMessageConverters@Slf4j@ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurationSupport{/**......
  • 基于SpringBoot+Vue+uniapp的心理测评系统(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的直播电商交流平台(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 数据存储技术详解:从基础概念到未来趋势
    一、数据存储的基础概念数据存储是指通过特定的介质和技术手段保存和管理信息的过程。在当今信息化社会,数据存储无处不在,从个人计算机上的文件保存到企业数据中心的大规模存储,再到云计算平台的海量数据管理,数据存储技术在各个层面都发挥着至关重要的作用。数据存储不仅仅涉及......
  • api接口数据安全格式转换-DES,AES,SM2
    api接口数据安全格式转换-DES,AES,SM21.数据格式{"orderNo":"",//其他的业务数据}返回{"sign":"","params":"","timestamp":""}实现接口的加密传输,数据安全规范。返回DEMOsign=8E4D93D831652C94473994DBB0846F11,params=043be41......
  • 掌握 Nuxt 3 的页面元数据:使用 definePageMeta 进行自定义配置
    title:掌握Nuxt3的页面元数据:使用definePageMeta进行自定义配置date:2024/8/11updated:2024/8/11author:cmdragonexcerpt:摘要:本文详细介绍Nuxt3框架中definePageMeta的使用方法,包括如何为页面组件定义元数据,如布局、过渡效果、路由中间件等。通过具体示例展示......
  • jenkins部署
    安装1、由于Jenkins是基于Java的,首先需要确保你的系统中安装了Java。推荐使用OpenJDK11。可以通过以下命令安装:aptupdateaptinstallopenjdk-11-jdk2、在安装Jenkins之前,你需要将其仓库添加到你的系统中。首先,导入Jenkins仓库的密钥:wget-q-O-https://pkg.j......