通过fiftyone按分类下载open-images-v7数据集,并转成yolov5可直接训练的格式

import os

import fiftyone as fo
import fiftyone.zoo as foz
import yaml

classes = [
    'Person',  # 人  - 0
    'Car',  # 轿车 - 1
    'Taxi',  # 出租车 - 2
    'Ambulance',  # 救护车 - 3
    'Bus',  # 公共汽车 - 4
    'Bicycle',  # 自行车  - 5
    'Motorcycle',  # 摩托车  - 6
    'Dog',  # 狗  - 7
    'Cat',  # 猫  - 8
    'Mouse',  # 老鼠  - 9
    'Backpack',  # 背包 - 10
    'Glasses',  # 眼镜 - 11
    'Hat',  # 帽子 - 12
    'Helmet',  # 头盔 - 13
    'Traffic light',  # 交通信号灯 - 14
    'Knife',  # 刀 - 15
    'Mobile phone',  # 移动电话  - 16
    'Umbrella'  # 伞 - 17
    # 手持物 - 18
    # 烟雾 - 19
    # 火焰 - 20
]

# 构建类别索引映射
class_to_index = {cls: idx for idx, cls in enumerate(classes)}


def filter_samples_by_label(dataset, target_label):
    # 创建一个新数据集来保存筛选后的样本
    filtered_dataset = fo.Dataset()

    # 遍历原数据集
    for sample in dataset:
        # 保留与target_label匹配的检测框
        filtered_detections = [d for d in sample.ground_truth.detections if d.label == target_label]

        # 如果样本中还有匹配的检测框,创建样本副本并添加到新数据集中
        if filtered_detections:
            new_sample = sample.copy()
            new_sample.ground_truth.detections = filtered_detections
            filtered_dataset.add_sample(new_sample)

    return filtered_dataset


def update_txt_file_class_indices(class_name):
    labels_dir = os.path.join("/yolov5/open-images-v7", class_name, 'labels/val')
    dataset_yaml = os.path.join("/yolov5/open-images-v7", class_name, 'dataset.yaml')
    os.remove(dataset_yaml)
    if os.path.exists(labels_dir):
        for filename in os.listdir(labels_dir):
            if filename.endswith('.txt'):
                filepath = os.path.join(labels_dir, filename)

                # 读取并处理.txt文件
                with open(filepath, 'r') as file:
                    lines = file.readlines()

                # 更新类别索引
                updated_lines = []
                for line in lines:
                    parts = line.strip().split()
                    if len(parts) >= 5:  # 假设每行至少有5个元素(class index在第0个位置)
                        class_idx_str = parts[0]  # 原类别索引(可能是名称也可能是数字)
                        try:
                            updated_class_idx = str(class_to_index[class_name])
                        except ValueError:
                            # 如果转换失败,则按类别名称补全
                            updated_class_idx = class_name
                        parts[0] = updated_class_idx
                        updated_lines.append(' '.join(parts) + '\n')

                # 写回更新后的行
                with open(filepath, 'w') as file:
                    file.writelines(updated_lines)
    print(f"{class_name}类别的所有.txt文件的索引已更新。")


for class_name in classes:
    dataset = foz.load_zoo_dataset(
        "open-images-v7",
        split="train",  # train validation test
        label_types=["detections"],  # "detections", "segmentations", "points"
        classes=[class_name],
        max_samples=100000,  # 筛选前十万个样本
        shuffle=True,
        only_matching=True,  # 指定仅下载符合条件的图片
        num_workers=1,  # 指定进程数为1
        dataset_name="base_100000",
        dataset_dir=f"/open-images-v7"
    )
    filtered_dataset = filter_samples_by_label(dataset, class_name)
    if filtered_dataset.count() == 0:
        print(f"No samples found for class: {class_name}")
        continue
    print(f"{class_name}类别的样本数量为:{filtered_dataset.count()}")
    # 导出这个筛选后的数据集
    result = filtered_dataset.export(
        export_dir=f"/yolov5/open-images-v7/{class_name}/",
        dataset_type=fo.types.YOLOv5Dataset,
        label_field="ground_truth",
    )
    update_txt_file_class_indices(class_name)

data_yaml_content = {
    'train': '/yolov5/open-images-v7',
    'val': '/yolov5/open-images-v7',
    'test': '',  # 可以根据实际情况填写测试集路径
    'nc': len(classes),  # 类别数量
    'names': classes  # 类别名称列表
}
with open('/yolov5/open-images-v7/data.yaml', 'w') as f:
    yaml.dump(data_yaml_content, f, default_flow_style=False)

下载10万张样本 ( 如果测试可以将max_samples值调小)

下载后生成的文件目录结构如下:

数据转换后按类别划分为多个文件 如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/693673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

配置免密登录秘钥报错

移除秘钥,执行 ssh-keygen -R cdh2即可 参考:ECDSA主机密钥已更改,您已请求严格检查。 - 简书

构建第一个ArkTS应用之@卡片事件能力说明

ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互,当前支持router、message和call三种类型的事件,仅在卡片中可以调用。 接口定义:postCardAction(component: Object, action: Object): void 接口参数说明&#xff1…

Hadoop笔记

1.hadoop环境搭建,linux命令(vi);2.分布式的基本概念,cap理论(遵循此原则开发分布式数据库),hdfs,mapreduce;3.3.1;3.2重点;4.map,reduce过程,优缺…

OrangePi Kunpeng Pro深度评测:性能与体验的完美融合

文章目录 一、引言二、硬件开箱与介绍1.硬件清单2.硬件介绍 三、软件介绍四、性能测试1. 功率测试2. cpu测试2.1 单线程cpu测试2.2 多线程cpu测试 五、实际开发体验1. 搭建API服务器2. ONNX推理测试3. 在线推理平台 五、测评总结1. 能与硬件配置2. 系统与软件3. 实际开发体验个…

大模型的演进之路:从萌芽到ChatGPT的辉煌

文章目录 ChatGPT:大模型进化史与未来展望引言:大模型的黎明统计模型的奠基深度学习的破晓 GPT系列:预训练革命GPT的诞生:预训练微调的范式转换GPT-2:规模与能力的双重飞跃GPT-3:千亿美元参数的奇迹 ChatGP…

基于Python的AI动物识别技术研究

基于Python的AI动物识别技术研究 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 系统的登录模块设计 本次设计的AI动物识别系统为了保证用户的数据安全,设计了登录的模块&…

【乐吾乐2D可视化组态编辑器】在线使用,快速入门

一、在线使用 乐吾乐2D可视化组态编辑器地址:https://2d.le5le.com/ 二、步骤 本教程将带领你快速体验2D可视化编辑器的全流程开发。 1.创建图纸 进入2d编辑器主界面后,主界面最中心为图纸面板,默认为空图纸,在界面左侧为组…

算法导论实战(六)(算法导论习题三十四、三十五章)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀算法启示录 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 前言 算法导论的知识点学习将持续性更新在算…

win设置ftp服务器~java通过ftp下载文件

1.先设置ftp 2.打开服务 3.设置站点 4.起名字 这样就可以了 5.剩下的就是设置权限和账号了,找到对应的按钮就可以了 6.下载文件的代码 public byte[] downloadFile(File file) throws IOException{ByteArrayOutputStream out new ByteArrayOutputStream();toDi…

把chatgpt当实习生,进行matlab gui程序编程

最近朋友有个项目需要整点matlab代码,无奈自己对matlab这种工科的软件完全是外行,无奈只有求助gpt这种AI助手了。大神们告诉我们,chatgpt等的助手已经是大学实习生水平啦,通过多轮指令交互就可以让他帮你完成工作啦!所…

使用 Scapy 库编写 TCP RST 攻击脚本

一、介绍 TCP RST攻击是一种拒绝服务攻击(Denial-of-Service, DoS)类型,攻击者通过伪造TCP重置(RST)包,中断目标主机与其他主机之间的TCP连接。该攻击利用了TCP协议中的重置机制,强制关闭合法的…

倩女幽魂手游攻略:云手机自动搬砖辅助教程!

《倩女幽魂》手游自问世以来一直备受玩家喜爱,其精美画面和丰富的游戏内容让人沉迷其中。而如今,借助VMOS云手机,玩家可以更轻松地进行搬砖,提升游戏体验。 一、准备工作 下载VMOS云手机: 在PC端或移动端下载并安装VM…

C#操作MySQL从入门到精通(21)——删除数据

前言: 谈到数据库,大家最容易脱口而出的就是增删改查,本文就是来详细介绍如何删除数据。 本文测试使用的数据库如下: 1、删除部分数据 使用delete 关键字,并且搭配where条件使用,否则会导致表中数据全部被删除 string sql = string.Empty;if (radioButton_DeletePart…

基于Django+MySQL的智慧校园系统

此项目基于Django MySQL HTML CSS JS jQuery bootstrap实现的功能有 学生管理部门管理代办清单管理校园论坛校园医疗服务校园看点校园生活助手常用功能入口 1. 一些注意点 1. 页面body会自动有一些边界距&#xff0c;处理方法&#xff1a; <head><style>b…

(2024,自监督 ViT,全监督 ViT,损失可视化,MAE,RC-MAE,自蒸馏,EMA)可视化自监督 ViT 的损失景观

Visualizing the loss landscape of Self-supervised Vision Transformer 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0 摘要 2 基础&#xff1a;MAE 和 RC-MAE 3 损失景观 3.1 分…

【Linux】进程5——进程优先级

1.进程优先级 1.1.什么是进程优先级 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用&#xff0c;可以改善系统性能。还可以把进程运行到指定的CPU上&#x…

爬虫可以不必自己写,使用ChatGPT编写抓取电影评论数据脚本

经常去新华书店看看有没有什么新书上架&#xff0c;还是更新挺及时的&#xff0c;可以反映新的技术趋势。这不&#xff0c;最近就看到了这本《巧用 ChatGPT 快速搞定数据分析》&#xff0c;作者是个大牛&#xff0c;第一次看到prompt可以这么写&#xff0c;得写这么长&#xff…

ipynb转markdown的简单方法

在线转换 推荐在线转换&#xff0c;拖进去后下载就行&#xff0c;简单易操作。 Convert Jupyter notebook to GitHub-Flavored Markdown for free on AlldocsThe free text converter for all your documents.https://alldocs.app/convert-jupyter-notebook-to-markdown vsc…

【C51】DIY电子音乐贺卡:C51单片机项目设计与实现

文章目录 前言&#xff1a;1. 要求&#xff1a;2. 实现效果&#xff1a;3. 准备工作&#xff1a;4. 编写代码&#xff1a;5. 导出bmp格式图片总结&#xff1a; 前言&#xff1a; 在当今数字化时代&#xff0c;电子贺卡以其独特的互动性和个性化特点&#xff0c;成为人们表达情…

Data Mining2 复习笔记6 - Optimization Hyperparameter Tuning

6. Optimization & Hyperparameter Tuning Why Hyperparameter Tuning? Many learning algorithms for classification, regression, … Many of those have hyperparameters: k and distance function for k nearest neighbors, splitting and pruning options in decis…