九耶丨钛伦特-用深度学习实现垃圾图像分类(一)

news2024/11/26 22:37:15

       在这个项目中我们将结合我们的日常生活,让计算机帮助我们进行垃圾分类。比如让计算机能够正确将如下三张包含不同垃圾的图像进行分类。

  

       我们希望计算机能够识别出三张图像依次是玻璃(玻璃瓶),纸张(信封)和塑料 (塑料瓶)。

       面对这样一个实际的问题,我们首先需要将这个任务能够转化成一个在深度学习

       监督任务场景下的问题。根据我们在项目一中的学习,深度学习中监督学习的任务流程如下:

       1. 采集数据集及数据清洗

       2. 数据加载及预处理

       3. 用训练数据集训练神经网络

       4. 用训练好的网络模型对测试数据集进行测试

       5. 推导计算应用

       根据一般的任务流程,我们首先需要搜集建立一个数据集,这个数据集需要包含玻璃纸张和塑料这三类垃圾的多张图像,并人为给出这三类图像的标签。为了简化大家的学习过程,平台提供了数据集 garbage。有了数据集之后,再来构造神经网络模型,接着将预处理好的数据集输入模型进行训练。完成训练之后对训练返回的模型在测试集上进行结果评估。

       预加载代码:

 

      一、加载数据集

      这里平台提供数据集 garbage,garbage 数据集包含 6 个类别分别是:

       • 硬纸板(cardboard)训练集有 322,测试集有 81,共 403 张图片

       • 玻璃(glass)训练集有 400,测试集有 101,共 501 张图片

       • 金属(metal)训练集有 328,测试集有 82,共 410 张图片

       • 纸(paper)训练集有 475,测试集有 119,共 594 张图片

       • 塑料(plastic)训练集有 385,测试集有 97,共 482 张图片

       • 一般垃圾(trash)训练集有 109,测试集有 28,共 137 张图片

       物品都是置于白板上在日光/室内光源下拍摄,图像的尺寸为 512 * 384 * 3。我们制作数据集时,将物体放在白色背景下,是为了实现单一背景,这样能够更好地突出需要识别和分类的物体。同样,我们也尽可能的让物体处于图像的中间位置,并占满全图。

       下图是相关的部分图片。

       从这个数据集可以看到,我们真实图像尺寸远远大于我们之前在项目一和项目二中实验的数据。所以面对这样的数据集时,我们不再使用之前的方法,将数据集转换成numpy array 的形式保存,而是直接以图像的格式,比如 jpg 或者 png 等格式。  

       这样保存的图像,让我们需要使用另外的方法来加载,这里我们介绍 torchvision 三方库下的方法 ImageFolder。

        ImageFolder(root)

        • root :str 图像数据集路径

        我们从 torchvision 中导入 ImageFolder from torchvision.datasets import

        ImageFolder,然后平台提供了数据集 garbage 的路径 GARBAGE_IMG_ROOT。因为数据集被分成了训练和测试两个部分,所以需要在 GARBAGE_IMG_ROOT 之后增加’train’和 ’test’来指明是训练还是测试数据。

        样例代码:

        直接输出 train_dataset,可以看到 ImageFolder 并没有将图像加载进来,而是记录下了数据集的路径和图像总数,训练集一共有 2019 张图像。

        需要说明的是,ImageFolder 返回的 train_dataset 是一个 Dataset,这个 Dataset 并不是数据集的英文翻译,而是 python 中的一个类对象。当模型进行计算时,PyTorch 的模型并不能够直接计算 numpy 数组,我们需要将 numpy 数组先转换成 Tensor,然后通过 Dataset 输入模型。详细过程的会在后面的实验中介绍。这里需要大家理解的是,这个 Dataset 类对象提供了一个方法,这个方法使得模型在进行计算时才会去加载图像。这样的设计就是为了减少内存的消耗,不需要在初始化时就将完整的数据集加载到内存中。

        计算过程中的加载方法,就是通过引索来取出图像和对应的标签。

        样例代码:

 

         train_dataset 中每个元素是一个 tuple,包含一个 PIL 也就是 pillow 图像库的图像,尺寸为 512 宽 384 高 RGB3 通道,和一个对应的标签。我们可以直接使用 visualize 来可视化这个 PIL 图像。大家也可以使用 matplotlib 的方法

        plt.imshow(train_dataset[index][0])

        plt.show()

        样例代码:

        visualize(train_dataset[index][0])

        运行结果:

        另外我们可以通过 train_dataset.classes 的方法获得类别名称

        样例代码:

        print(train_dataset.classes)

        运行结果:

        ['cardboard', 'glass', 'metal', 'paper', 'plastic', 'trash']

        2 数据预处理

        在项目一二中,我们会对数据进行必要的预处理过程,这个过程包括

        1. 类型转换,将数据集从 uint8 转换到 float32

        2. 归一化处理

        3. 数据尺寸进行变换

        同样,我们也需要对 train_dataset 进行这样的处理,这里我们介绍 torchvision 库中的 transforms 方法。、

        样例代码

      

        这里我们使用了 Resize((224, 224))来统一图像的尺寸,统一到 224 高 224 宽。大家可能会好奇为什么要统一到这个尺寸,其实这个尺寸并不是一个固定的值,大家也可以统一的其他的尺寸。但是需要注意模型对输入图像的尺寸要求。

        ToTensor()顾名思义,将我们读取进来的图像转变成 PyTorch 模型能够计算的 Tensor,同时 ToTensor 还会同时进行类型变换,转变成 float32;和进行归一化处理,将像素值变化到[0,1]范围这两个操作。然后使用 Compose 的方法,将这两个变换结合起来。

        在项目一二中我们是将数据读取进来之后,再对数据进行预处理。但是 ImageFolder 使用了不同的方法,我们先看示例代码:

 样例代码:

        可以看到,我们将结合好的预处理方法 trans 作为一个参数输入到了 ImageFolder 中。在上一步中我们知道 Dataset 类对象提供了一个加载方法,数据在需要时才会被真正读取进来,所以预处理的过程就被统一到了这个加载过程中。也就是说,只有在神经网络开始真正的计算时,才会加载图像,才会对加载进来的图像进行预处理。

        我们可以使用函数 describe 查看这个 Tensor 的尺寸,类型和值的范围。从 Tensor 中值的范围 0 到 1 可以看到,ToTensor 确实对图像进行了归一化处理。

        样例代码:

        describe(train_dataset[0][0])

        运行结果:

        torch tensor of size torch.Size([3, 224, 224]) , dtype torch.float32 and range is [0.011764706, 0.972549].

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka学习记录

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录阅读前请看一下:我是一…

“商量”翻车了?网友质疑搬运C站

在ChatGPT大热的当下,各大互联网和AI大厂陆续开始推出国内版本的大模型产品了,最近发布的有:商汤版ChatGPT发布千亿参数大模型:商量!第一个真正实现智能涌现的国产大语言模型,内测即将开启阿里版 ChatGPT 突…

ICLR 2023 | 基于视觉语言预训练模型的医疗图像小样本学习及零样本推理性能研究

近两年,视觉语言模型 (VLM) 逐渐兴起,并在小样本学习 (Few-shot Learning) 和零样本推理 (Zero-shot Inference) 上取得了令人注目的成果。那么这些在自然图像上取得成功的大规模预训练视觉语言模型,是否能成功应用到医疗领域呢?抱…

springboot项目中的mysql用国产数据库达梦替换的相关说明

一、 用“DM管理工具”的“管理用户”创建你需要用户,也是达梦的模式。 用户的权限问题可以直接角色授权,方便一些。 二、借用达梦的“DM数据迁移工具”做数据库的表内容转移。 1. 新建工程、新建迁移 编辑mysql的数据库源 编辑达梦的目的端数据库 选择之…

力扣119杨辉三角 II:代码实现 + 方法总结(数学规律法 记忆法/备忘录)

文章目录第一部分:题目第二部分:解法①-数学规律法2.1 规律分析2.2 代码实现2.3 需要思考第三部分:解法②-记忆法(备忘录)第四部分:对比总结第一部分:题目 🏠 链接:119.…

工业路由器IO远程控制使用说明(智联物联)

工业路由器IO控制是指路由系统已开发支持对用户DI(数字输入)/DO(数字输出)/Relay(继电器)类型的设备控制操作,目前各支持1路设备类型。 IO控制目前支持2种方式进行控制操作,即通过工…

C/C++每日一练(20230417)

目录 1. 字母异位词分组 🌟🌟 2. 计算右侧小于当前元素的个数 🌟🌟🌟 3. 加一 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 J…

【JavaScript】3.JavaScript预解析

JavaScript 预解析 1. 变量预解析 和 函数预解析 js引擎运行js 分为两步: 预解析 代码执行 预解析 js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面代码执行 按照代码书写的顺序从上往下执行 预解析分为 变量预解析(变量提升&…

0101壳-手写springboot-springboot系列

文章目录1 前言1 创建我们自己的pringboot模块1.1 引入相关依赖1.1 启动类注解1.2 启动类2 测试模块3 启动测试结语1 前言 springboot有以下作用: 简化配置:Spring Boot提供了一组预定义的自动配置选项,可以快速地配置应用程序,…

2023年虚拟数字人行业研究报告

第一章 行业概况 虚拟数字人指存在于非物理世界中,由计算机图形学、图形渲染、动作捕捉、深度学习、语音合成等计算机手段创造及使用,并具有多种人类特征(外貌特征、人类表演能力、人类交互能力等)的综合产物。虚拟人可分为服务型…

[Python工匠]输出① 变量与注释

变量(variable)是用来从内存找到某个东西的标记 #去掉s两边的空格,再处理 value process(s.strip()) s " hello World " value1 len(s) value2 len(s.strip())print(value1) print(value2) #用户输入可能会有空格&#x…

【云原生】k8s集群命令行工具kubectl之应用部署命令详解

kubectl应用部署命令详解一、准备工作1.1、Replication Controller1.2、Deployment1.3、DaemonSet1.4、查看创建的svc和pod1.5、kubectl 命令自动补全设置二、应用部署命令2.1、diff2.2、apply2.3、replace2.4、rollout2.4.1、history2.4.2、pause2.4.3、resume2.4.4、restart2…

Ubuntu20.04安装matlab2022b

Ubuntu20.04安装matlab2022b 1.系统要求 Ubuntu 22.04 LTSUbuntu 20.04 LTSUbuntu 18.04 LTSDebian 11Debian 10Red Hat Enterprise Linux 9Red Hat Enterprise Linux 8 (minimum 8.4)Red Hat Enterprise Linux 7 (minimum 7.9)SUSE Linux Enterprise Desktop 15SUSE Linux E…

【攻城狮计划】Renesas RA2E1 详细介绍

🚩WRITE IN FRONT🚩 🔎介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四"🔎🏅荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TOP10…

A40i使用笔记:QT使用alsa采集音频pcm信息

一、前言 目的是实现一种效果,就是在音频识别时,能够实时显示当前人员说话的声音幅度,通过波形曲线的形式显示出来。如下效果(非我实现) 还可以实现在实时采集的同时,将需要的数据保存成指定格式文件&…

状态设计模式(State Pattern)[论点:概念、相关角色、图示、示例代码、框架中的运用、适用场景]

文章目录概念组成角色相关图示代码示例框架中的应用适用场景概念 状态模式(State Pattern)是一种行为型设计模式,用于解决对象在不同状态下的行为问题。它允许一个对象在其内部状态改变时改变它的行为。状态模式主要包含三个部分:…

Day924.自动化测试 -系统重构实战

自动化测试 Hi,我是阿昌,今天学习记录的是关于自动化测试的内容。 自动化测试是一个很容易产生“争议”的话题,也经常会有一些很有意思的问题。 自动化测试不是应该由测试同学来编写吗,开发是不是没有必要学吧?之前…

圆角升级啦,来手把手一起实现自定义ViewGroup的各种圆角与背景

作者:newki 定制圆角与背景的自定义ViewGroup实现 前言 目前线上的一些第三方圆角容器大部分都只支持四周固定圆角,我们一些使用场景只需要顶部圆角,或者底部圆角,或者一个角圆角。 (话说为什么我们的UI这么喜欢各种…

webpack plugin源码解析(四) HashedModuleIdsPlugin

文章目录作用涉及 webpack API获取chunkGraph获取当前编译过程中被使用过的 module id:compilation.usedModuleIds获取当前编译过程中所有的模块对象:compilation.modules判断 module 是否需要生成 id:module.needId获取指定module 的 module…

新品首发丨计讯物联智慧灯杆TG473-A6-5“滴水不进”,严苛环境下稳定运行无压力

近年来,智慧灯杆产业快速发展,已广泛应用于智慧城市、智慧交通、智慧园区、智慧停车等细分场景,提质增效、节本降耗的作用突显。值得注意的是,不同的场景有着不同的环境条件,如高低温、潮湿、沙尘等,对智慧…