【目标检测之数据集加载】利用DataLoader加载已预处理后的数据集【附代码】

简介: 在前一篇文章中,已经通过继承Dataset预处理自己的数据集 ,接下来就是使用pytorch提供的DataLoader函数加载数据集。

DataLoader函数


DataLoader是一个可以迭代的函数,用来加载并返回已处理好的数据集。其主要目的是对自定义后的Dataset数据集根据batch_size,是否随机打乱等封装成batch后进行训练。torch对于数据加载处理过程大致是这样的:


①创建自己的Dataset函数对数据预处理


②创建DataLoader对象


③循环访问这个DataLoader对象,返回image,Label【对于目标检测则包含bbox信息】送入模型进行训练


DataLoader主要参数:


dataset (Dataset):加载数据集,即自己定义后的Dataset

batch_size (int, optional):batch大小,默认为1

shuffle (bool, optional):如果为True表示每个迭代随机打乱

num_workers (int, optional):几个经常来处理数据

pin_memory (bool, optional): 如果设置为True,将tensors拷贝到CUDA中的固定内存

collate_fn (callable, optional):将一个list的sample组成一个mini-batch的函数

前面的一些参数都比较好理解并且会设置,主要是最后一个collate_fn参数需要自己定义,如果不自己定义,默认返回的时候需要保证类型为tensor


定义自己的collate_fn


先附代码

def my_dataset_collate(batch):
    images = []
    bboxes = []
    for img, box in batch:
        images.append(img)
        bboxes.append(box)
    images = np.array(images)
    return images, bboxes

这里的batch即为通过Dataset返回的值,接下来演示一下【MyDatasets函数在我上篇有定义】

train_dataset = MyDatasets(lines[:num_train], (300, 300), True)  # train_dataset返回数据集和标签(且这个是可以迭代的)
train_data = DataLoader(train_dataset, batch_size, True, num_workers=4, pin_memory=True, collate_fn=my_dataset_collate)

我们先再看一下通过MyDatasets得到的是什么:


In [1]: train_dataset

Out[1]: <__main__.MyDatasets at 0x27a33fe6c18>


然后继续打印一下


len(train_dataset)

Out[9]: 799     # 训练集的长度


-------------------------------------------------------------------------------------------------------------------------


# 打印一下第一个数据


Out[10]:

(array([[[ 67.,  86.,  96., ...,  49.,  64.,  26.],

        [ 64.,  81.,  95., ...,  35., 123.,  95.],

        [ 61.,  79.,  94., ...,  27., 124., 126.],

        ...,

        [ 36.,  39.,  42., ..., 130., 130., 124.],

        [ 37.,  38.,  37., ..., 130., 135., 132.],

        [ 36.,  37.,  38., ..., 129., 134., 132.]],


       [[ 59.,  74.,  77., ..., -58., -47., -89.],

·······


array([[0.04666667, 0.52666664, 0.4       , 0.99333334, 0.        ],

       [0.08666667, 0.06333333, 0.32      , 0.5       , 0.        ],

       [0.62      , 0.54      , 0.8333333 , 0.99      , 0.        ],

       [0.56      , 0.        , 0.93      , 0.50333333, 0.        ]],

      dtype=float32))

In [10]: train_dataset[0]


可以看出在train_dataset[0]中,有两部分组成,最前面是图像信息,第二部分是bbox信息【包含类信息】,每个train_dataset[0,1,2···]都相当于batch=1的数据。


整个train_dataset都是有上述两部分组成。接下来我们送入DataLoader中看的collate_fn有什么变化 。

  for img,box in train_dataset:
           images.append(img)
           bboxes.append(box)

img是图像信息,box是边界框和类信息。并将这些放入列表中。


对于列表images


array([[[[  67.,   86.,   96., ...,   49.,   64.,   26.],

        [  64.,   81.,   95., ...,   35.,  123.,   95.],

        [  61.,   79.,   94., ...,   27.,  124.,  126.],

        ...,

        [  36.,   39.,   42., ...,  130.,  130.,  124.],

        [  37.,   38.,   37., ...,  130.,  135.,  132.],

        [  36.,   37.,   38., ...,  129.,  134.,  132.]],


       [[  59.,   74.,   77., ...,  -58.,  -47.,  -89.],

        [  55.,   68.,   74., ...,  -72.,   12.,  -19.],

        [  50.,   63.,   69., ...,  -79.,   14.,   14.],

        ...,

        [  71.,   74.,   77., ...,  110.,  110.,  104.],

        [  72.,   73.,   72., ...,  110.,  115.,  112.],

        [  71.,   72.,   73., ...,  109.,  114.,  112.]],


对于列表boxes


[array([[0.04666667, 0.52666664, 0.4       , 0.99333334, 0.        ],

       [0.08666667, 0.06333333, 0.32      , 0.5       , 0.        ],

       [0.56      , 0.        , 0.93      , 0.50333333, 0.        ],

       [0.62      , 0.54      , 0.8333333 , 0.99      , 0.        ]],

      dtype=float32),

array([[0.26333332, 0.19666667, 0.9633333 , 0.9766667 , 0.        ]],

      dtype=float32),


······················


在images列表中的每个元素的shape都是(3,300,300) 3指的3通道,我们也可以将其中一个通道进行显示:


31.png


最终我们可以返回一个images和bbox的列表。可以将这两个列表进行打包后再送入网络训练。  



目录
相关文章
|
11天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34631 28
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
6天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
5690 20
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
23天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45525 151
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
1天前
|
云安全 人工智能 供应链
|
13天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
5331 21
|
5天前
|
机器学习/深度学习 存储 人工智能
还在手写Skill?hermes-agent 让 Agent 自己进化能力
Hermes-agent 是 GitHub 23k+ Star 的开源项目,突破传统 Agent 依赖人工编写Aegnt Skill 的瓶颈,首创“自我进化”机制:通过失败→反思→自动生成技能→持续优化的闭环,让 Agent 在实践中自主构建、更新技能库,持续自我改进。
1183 3
|
1天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
595 13

热门文章

最新文章

下一篇
开通oss服务