CUB200-2011鸟类细粒度数据集训练集和测试集划分python代码

2023-11-15

 CUB200-2011数据集介绍:

        该数据集由加州理工学院再2010年提出的细粒度数据集,也是目前细粒度分类识别研究的基准图像数据集。

        该数据集共有11788张鸟类图像,包含200类鸟类子类,其中训练数据集有5994张图像,测试集有5794张图像,每张图像均提供了图像类标记信息,图像中鸟的bounding box,鸟的关键part信息,以及鸟类的属性信息,数据集如下图所示。


下载的数据集中,包含了如下文件:

bounding_boxes.txt;classes.txt;image_class_labels.txt; images.txt; train_test_split.txt.

其中,bounding_boxes.txt为图像中鸟类的边界框信息;classes.txt为鸟类的类别信息,共有200类; image_class_labels.txt为图像标签和所属类别标签信息;images.txt为图像的标签和图像路径信息;train_test_split.txt为训练集和测试集划分。

本博客主要是根据train_test_split.txt文件和images.txt文件将原始下载的CUB200-2011数据集划分为训练集和测试集。在深度学习Pytorch框架下采用ImageFolder和DataLoader读取数据集较为方便。相关的python代码如下:

(1) CUB200-2011训练集和测试集划分代码

 # *_*coding: utf-8 *_*
 # author --liming--

"""
读取images.txt文件,获得每个图像的标签
读取train_test_split.txt文件,获取每个图像的train, test标签.其中1为训练,0为测试.
"""

import os
import shutil
import numpy as np
import config
import time

time_start = time.time()

# 文件路径
path_images = config.path + 'images.txt'
path_split = config.path + 'train_test_split.txt'
trian_save_path = config.path + 'dataset/train/'
test_save_path = config.path + 'dataset/test/'

# 读取images.txt文件
images = []
with open(path_images,'r') as f:
    for line in f:
        images.append(list(line.strip('\n').split(',')))

# 读取train_test_split.txt文件
split = []
with open(path_split, 'r') as f_:
    for line in f_:
        split.append(list(line.strip('\n').split(',')))

# 划分
num = len(images) # 图像的总个数
for k in range(num):
    file_name = images[k][0].split(' ')[1].split('/')[0]
    aaa = int(split[k][0][-1])
    if int(split[k][0][-1]) == 1: # 划分到训练集
        #判断文件夹是否存在
        if os.path.isdir(trian_save_path + file_name):
            shutil.copy(config.path + 'images/' + images[k][0].split(' ')[1], trian_save_path+file_name+'/'+images[k][0].split(' ')[1].split('/')[1])
        else:
            os.makedirs(trian_save_path + file_name)
            shutil.copy(config.path + 'images/' + images[k][0].split(' ')[1], trian_save_path + file_name + '/' + images[k][0].split(' ')[1].split('/')[1])
        print('%s处理完毕!' % images[k][0].split(' ')[1].split('/')[1])
    else:
         #判断文件夹是否存在
         if os.path.isdir(test_save_path + file_name):
             aaaa = config.path + 'images/' + images[k][0].split(' ')[1]
             bbbb = test_save_path+file_name+'/'+images[k][0].split(' ')[1]
             shutil.copy(config.path + 'images/' + images[k][0].split(' ')[1], test_save_path+file_name+'/'+images[k][0].split(' ')[1].split('/')[1])
         else:
             os.makedirs(test_save_path + file_name)
             shutil.copy(config.path + 'images/' + images[k][0].split(' ')[1], test_save_path + file_name + '/' + images[k][0].split(' ')[1].split('/')[1])
         print('%s处理完毕!' % images[k][0].split(' ')[1].split('/')[1])

time_end = time.time()
print('CUB200训练集和测试集划分完毕, 耗时%s!!' % (time_end - time_start))

config文件

# *_*coding: utf-8 *_*
# author --liming--

path = '/media/lm/C3F680DFF08EB695/细粒度数据集/birds/CUB200/CUB_200_2011/'

ROOT_TRAIN = path + 'images/train/'
ROOT_TEST = path + 'images/test/'
BATCH_SIZE = 16

(2) 利用Pytorch方式读取数据

# *_*coding: utf-8 *_*
# author --liming--

"""
用于已下载数据集的转换,便于pytorch的读取
"""

import torch
import torchvision
import config
from torchvision import datasets, transforms

data_transform = transforms.Compose([
    transforms.Resize(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

def train_data_load():
    # 训练集
    root_train = config.ROOT_TRAIN
    train_dataset = torchvision.datasets.ImageFolder(root_train,
                                                     transform=data_transform)
    CLASS = train_dataset.class_to_idx
    print('训练数据label与文件名的关系:', CLASS)
    train_loader = torch.utils.data.DataLoader(train_dataset,
                                               batch_size=config.BATCH_SIZE,
                                               shuffle=True)
    return CLASS, train_loader

def test_data_load():
    # 测试集
    root_test = config.ROOT_TEST
    test_dataset = torchvision.datasets.ImageFolder(root_test,
                                                transform=data_transform)

    CLASS = test_dataset.class_to_idx
    print('测试数据label与文件名的关系:',CLASS)
    test_loader = torch.utils.data.DataLoader(test_dataset,
                                              batch_size=config.BATCH_SIZE,
                                              shuffle=True)
    return CLASS, test_loader

if __name__ == '__main___':
    train_data_load()
    test_data_load()

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CUB200-2011鸟类细粒度数据集训练集和测试集划分python代码 的相关文章

  • 软件测试过程

    目录 软件测试过程模型 计划和控制 测试计划 分析与设计 实现与执行 评估与报告 结束活动 标准的测试流程包括 计划与控制 分析与设计 实现与执行 评估与报告和结束活动 实际测试过程中分为 测试计划 测试方案 测试用例 测试执行 测试报告五

随机推荐

  • 用VS Code搞Qt6:编译源代码与基本配置

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • JAVA(Spring)学习笔记---->Scope(作用域)

    这篇文章笔者和大家来聊一聊Spring中的两个标签配置范围 即singleton和prototype 前者意味单例的 后者则是多例的 Scope取值 实例化个数 实例化时机 对象创建 对象运行 对象销毁 singleton 单例 饿汉式 1
  • 华为配置端口流量统计

    配置端口流量统计 方便我们检查端口流量使用情况 排除问题 进行优化管理 以下是端口流量 统计的配置方法 步骤如下 a 先定义acl 匹配ping的源 目的IP地址 x和y是您这边测试的地址 ACL的编号自己随便定义 必须是3000以上 具体
  • Selenium图片下载到本地的实例

    目录 一 实例 指定网站 下载到本地的图片 今天与大家分享一个小案例 简单来说就是通过Selenium爬取京东 html页面的商品信息 图片 一 实例 指定网站 下载到本地的图片 效果展示 下载到本地图片 最后的通过Selenium下载到本
  • docker--扩展学习-理论--01

    docker 扩展学习 理论 01 一 Docker的应用场景 Web 应用的自动化打包和发布 自动化测试和持续集成 发布 在服务型环境中部署和调整数据库或其他的后台应用 从头编译或者扩展现有的 OpenShift 或 Cloud Foun
  • 微信开发

    近期在做模板消息推送用户的时候 遇到了报错码40001 但这是腾讯的万能报错码 感觉什么都是这个码顶锅 其实access token并不一定是真的过期导致的 先放一个官方调试工具在这 微信公众平台接口调试工具 1 有可能access tok
  • Python第三方库——rdflib

    实验要求 使用Python的第三方库rdflib 执行核心代码 如操作RDF OWL 执行SPARQL语句 参考资料 rdflib及其使用方法 rdflib 5 0 0 实验过程 在PyCharm上安装第三方库 点击PyCharm左下方的T
  • 如何设计日志系统_如何快速搭建日志系统

    易哥 高级软件架构师 网络工程师 数据库工程师 注册电气工程师 我们开发的业务系统通常会提供给很多人使用 那在使用的过程中 日志系统变得非常重要 日志系统记录的用户行为有以下的作用 从系统用户角度看 它展示了用户自身的操作历史和具体对象的变
  • C++ 虚函数 (virtual function) 介绍

    文章目录 1 什么是虚函数 2 虚函数与非虚函数的区别 3 派生类中的虚函数 4 构造 析构函数可以是虚函数吗 5 纯虚函数 5 1 纯虚函数的定义 5 1 纯虚函数的特定 1 什么是虚函数 C 对象有三大特性 继承 封装 多态 虚函数就是
  • 深入了解Bear Necessities Hackathon黑客松的优胜者们

    生态系统中的资深建设者皆知道Moonbeam是大型黑客松狂热爱好者 不论是线上虚拟的还是现场的 然而 很少有黑客松能达到Moonbeam和AWS举办的Bear Necessities黑客松这样的规模和吸引力 本次黑客松共有755人参与 共提
  • 下载MedShapeNet

    iTomxy data medshapenet 在 1 可下载 MedShapeNet 数据集 在其 Download 页 可选直接 GUI 下 或者先下一个索引文件 txt 的 每行一条文件的下载链接 然后用 wget 逐条下 这里放下
  • IDEA、DataGrip、WebStorm....激活时间2100,激活码激活

    DataGrip 1 下载jar包 JetbrainsCrack 3 1 release enc jar 2 到软件安装的 bin 目录 把这个jar包粘贴进去 image png 3 编辑文件中参数 datagrip exe vmopti
  • 如何用函数指针调用函数

    先举一个用函数指针调用函数的例子 int Func int x 声明一个函数 int p int x 定义一个函数指针 p Func 将Func函数的首地址赋给指针变量p int Func int x 这一句是声明一个函数 是我们要被函数指
  • java通过idea进行远程调试

    1 基于SpringBoot使用IDEA工具 在pom xml中配置 里配置jvmArguments参数 Xdebug Xrunjdwp transport dt socket address 8008 server y suspend n
  • wsl arch linux图形,WSL Arch Linux简单开箱

    arch是一个非常好的Linux发行版 使用起来可以说简单的不要不要的 新手安装时可能有点小小小的问题 现在微软商店上架了WSL arch 昨天简单刚装 第一步 打开商店搜索并下载安装 第二步 打开arch 应该默认root用户启动 我是这
  • AI编程时代,开发者路在何方?

    AI 正颠覆人们的想象 重塑各行各业 AI 技术改变编程范式 有效提升开发者效率 可能人人有机会成为 10倍程序员 在此发展趋势下 开发者不禁担心未来会不会被AI取代 随着 AI 编程时代来临 开发者需要掌握哪些能力来更好地成长 6月28日
  • MAVEN 的下载与配置(详细图解)

    一 maven的下载 二 解压压缩包与变量设置 1 创建本地仓库 创建文件夹如箭头所指 2 配置maven repo为本地仓库 点击conf文件夹 点击setting xml 在文档如图位置补充本地仓库的地址即maven repo文件夹的地
  • 如何快速掌握代币经济学

    如何研究加密世界里的Token 先看一组数据 截至2022年 市面上大约有6000种加密货币 或者更多 这对投资者来说当然是一个很大的机会 然而 在2021年 投资者在Crypto项目遇到欺诈 损失的金额120亿美元 因此 到底如何去表及里
  • Vue工程利用HBuild X打包APP打开一片空白的解决方式

    Vue工程利用HBuild X打包成APP时有时会出现一片空白的情况 这是由于Vue工程打包出来的静态文件路径出现问题造成的 解决方式 在工程下创建vue config js文件 在文件中写入 module exports publicPa
  • CUB200-2011鸟类细粒度数据集训练集和测试集划分python代码

    CUB200 2011数据集介绍 该数据集由加州理工学院再2010年提出的细粒度数据集 也是目前细粒度分类识别研究的基准图像数据集 该数据集共有11788张鸟类图像 包含200类鸟类子类 其中训练数据集有5994张图像 测试集有5794张图