【计算机毕设选题】opencv python 深度学习垃圾图像分类系统

2024-01-04


0 前言

???? 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

???? opencv python 深度学习垃圾分类系统

????学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

课题简介

如今,垃圾分类已成为社会热点话题。其实在2019年4月26日,我国住房和城乡建设部等部门就发布了《关于在全国地级及以上城市全面开展生活垃圾分类工作的通知》,决定自2019年起在全国地级及以上城市全面启动生活垃圾分类工作。到2020年底,46个重点城市基本建成生活垃圾分类处理系统。

人工垃圾分类投放是垃圾处理的第一环节,但能够处理海量垃圾的环节是垃圾处理厂。然而,目前国内的垃圾处理厂基本都是采用人工流水线分拣的方式进行垃圾分拣,存在工作环境恶劣、劳动强度大、分拣效率低等缺点。在海量垃圾面前,人工分拣只能分拣出极有限的一部分可回收垃圾和有害垃圾,绝大多数垃圾只能进行填埋,带来了极大的资源浪费和环境污染危险。

随着深度学习技术在视觉领域的应用和发展,让我们看到了利用AI来自动进行垃圾分类的可能,通过摄像头拍摄垃圾图片,检测图片中垃圾的类别,从而可以让机器自动进行垃圾分拣,极大地提高垃圾分拣效率。

基于深度学习的垃圾分类系统,是非常好的毕业设计课题


一、识别效果

老样子, 废话不多说,先展示图像垃圾分类的识别效果

训练模型精度:
在这里插入图片描述
可以看到,只迭代了10轮精度达到87.50%,而且没有出现过拟合现象

我最高训练达到96%,迭代200轮

识别结果:
在这里插入图片描述
实际验证正确率还是很高的。

二、实现

1.数据集

该数据集包含了 2507 个生活垃圾图片。数据集的创建者将垃圾分为了 6 个类别,分别是:
在这里插入图片描述
如下所示:

在这里插入图片描述
一共6类垃圾, 比如玻璃类的如下:

在这里插入图片描述
塑料类的如下:

在这里插入图片描述
其他的不列举了。

2.实现原理和方法

使用深度残差网络resnet50作为基石,在后续添加需要的层以适应不同的分类任务
模型的训练需要用生成器将数据集循环写入内存,同时图像增强以泛化模型
使用不包含网络输出部分的resnet50权重文件进行迁移学习,只训练我们在5个stage后增加的层

需要的第三方库主要有tensorflow1.x,keras,opencv,Pillow,scikit-learn,numpy
安装方式很简单,打开terminal,例如:pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
数据集与权重文件比较大,所以没有上传
如果环境配置方面有问题或者需要数据集与模型权重文件,可以在评论区说明您的问题,我将远程帮助您

3.网络结构

这里我只使用了resnet50的5个stage,后面的输出部分需要我们自己定制,网络的结构图如下:
在这里插入图片描述
stage5后我们的定制网络如下:

"""定制resnet后面的层"""
def custom(input_size,num_classes,pretrain):
    # 引入初始化resnet50模型
    base_model = ResNet50(weights=pretrain,
                          include_top=False,
                          pooling=None,
                          input_shape=(input_size,input_size, 3),
                          classes=num_classes)
    #由于有预权重,前部分冻结,后面进行迁移学习
    for layer in base_model.layers:
        layer.trainable = False
    #添加后面的层
    x = base_model.output
    x = layers.GlobalAveragePooling2D(name='avg_pool')(x)
    x = layers.Dropout(0.5,name='dropout1')(x)
    #regularizers正则化层,正则化器允许在优化过程中对层的参数或层的激活情况进行惩罚
    #对损失函数进行最小化的同时,也需要让对参数添加限制,这个限制也就是正则化惩罚项,使用l2范数
    x = layers.Dense(512,activation='relu',kernel_regularizer= regularizers.l2(0.0001),name='fc2')(x)
    x = layers.BatchNormalization(name='bn_fc_01')(x)
    x = layers.Dropout(0.5,name='dropout2')(x)
    #40个分类
    x = layers.Dense(num_classes,activation='softmax')(x)
    model = Model(inputs=base_model.input,outputs=x)
    #模型编译
    model.compile(optimizer="adam",loss = 'categorical_crossentropy',metrics=['accuracy'])
    return model

网络的训练是迁移学习过程,使用已有的初始resnet50权重(5个stage已经训练过,卷积层已经能够提取特征),我们只训练后面的全连接层部分,4个epoch后再对较后面的层进行训练微调一下,获得更高准确率,训练过程如下:

class Net():
    def __init__(self,img_size,gar_num,data_dir,batch_size,pretrain):
        self.img_size=img_size
        self.gar_num=gar_num
        self.data_dir=data_dir
        self.batch_size=batch_size
        self.pretrain=pretrain

    def build_train(self):
        """迁移学习"""
        model = resnet.custom(self.img_size, self.gar_num, self.pretrain)
        model.summary()

        train_sequence, validation_sequence = genit.gendata(self.data_dir, self.batch_size, self.gar_num, self.img_size)

        epochs=4
        model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs,verbose=1,validation_data=validation_sequence,
                                     max_queue_size=10,shuffle=True)
        #微调,在实际工程中,激活函数也被算进层里,所以总共181层,微调是为了重新训练部分卷积层,同时训练最后的全连接层
        layers=149
        learning_rate=1e-4
        for layer in model.layers[:layers]:
            layer.trainable = False
        for layer in model.layers[layers:]:
            layer.trainable = True
        Adam =adam(lr=learning_rate, decay=0.0005)
        model.compile(optimizer=Adam, loss='categorical_crossentropy', metrics=['accuracy'])

        model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs * 2,verbose=1,
            callbacks=[
                callbacks.ModelCheckpoint('./models/garclass.h5',monitor='val_loss', save_best_only=True, mode='min'),
                callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1,patience=10, mode='min'),
                callbacks.EarlyStopping(monitor='val_loss', patience=10),],
            validation_data=validation_sequence,max_queue_size=10,shuffle=True)

        print('finish train,look for garclass.h5')

最后

???? 选题指导, 项目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/python/README.md

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

【计算机毕设选题】opencv python 深度学习垃圾图像分类系统 的相关文章

  • 动态向类添加类方法

    我有以下片段 FEED TYPES fan mail Fan Mail review Review tip Tip fan user Fan User fan song Fan Song fan album Fan Album played
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • Python 转换矩阵

    我有一个如下所示的列表 2 1 3 1 2 3 1 2 2 2 我想要的是一个转换矩阵 它向我显示如下序列 1 后跟 1 的频率是多少 1 后面跟着 2 的频率是多少 1 后跟 3 的频率是多少 2 后跟 1 的频率是多少 2 后跟 2 的
  • 为什么在访问 Python 对象属性时使用 getattr() 而不是 __dict__ ?

    在具有一定程度的 Python 对象自省的源代码示例和 SO 答案中 常见的模式是 getattr some object attribute name string 是否有理由优先选择这种模式 some object dict attri
  • Matplotlib 图例,跨列添加项目而不是向下添加项目

    对于下面的简单绘图 有没有办法让 matplotlib 填充图例 以便它从左到右填充行 而不是第一列然后第二列 gt gt gt from pylab import gt gt gt x arange 2 pi 2 pi 0 1 gt gt
  • 将 Python Pandas DataFrame 写入 Word 文档

    我正在努力创建一个使用 Pandas DataFrames 的 Python 生成的报告 目前我正在使用DataFrame to string 方法 但是 这会作为字符串写入文件 有没有办法让我实现这一目标 同时将其保留为表格 以便我可以使
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 在linux上安装python ssl模块,无需重新编译

    是否可以在已经安装了 OpenSSL 的 Linux 机器上安装 python 的 SSL 模块 而无需重新编译 python 我希望它就像复制几个文件并将它们包含在库路径中一样简单 Python版本是2 4 3 谢谢 是否可以在已经安装了
  • ValueError:数据必须为正(boxcox scipy)

    我正在尝试将我的数据集转换为正态分布 0 8 298511e 03 1 3 055319e 01 2 6 938647e 02 3 2 904091e 02 4 7 422441e 02 5 6 074046e 02 6 9 265747e
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • 通过 Python 循环浏览网络上的目录并显示其内容(文件和其他目录)

    同样的道理在Python中处理从源目录到目标目录的一组文件 https stackoverflow com questions 2593399 process a set of files from a source directory t
  • 使用 if 语句的网格网格和用户定义函数的真值不明确

    假设我有一个函数f x y 足够光滑 然而 有些值仅在有限的意义上存在 以sin x x的价值x 0只存在于极限 x gt 0 中 在一般情况下 我用一个来处理这个问题if陈述 如果我在情节中使用它meshgrid我收到一条错误消息 Val
  • 无法使用 python rasterio、gdal 打开 jp2 (来自哨兵)

    我试图在 python 中将 jp2 栅格产品作为栅格打开 但当我们使用 raterio 和 gdal 包时没有成功 我收到此错误 RasterioIOError b4 jp2 not recognized as a supported f
  • 如何通过 Python Requests 库使用基本 HTTP 身份验证?

    我正在尝试在 Python 中使用基本的 HTTP 身份验证 我正在使用Requests https docs python requests org 图书馆 auth requests post http hostname auth HT
  • Python 2.7 缩进错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题是由拼写错误或无法再重现的问题引起的 虽然类似的问题可能是on topic help on topic在这里 这个问题的解决方式不
  • 两种 ODE 求解器之间的差异

    我想知道 两者之间有什么区别ODEINT and solve ivp用于求解微分方程 它们之间有什么优点和缺点 f1 solve ivp f 0 1 y0 y0 is the initial point f2 odeint f y0 0 1
  • 如何使用 Python/Django 在 Facebook 中获取(和使用)扩展权限

    我正在尝试编写一个简单的应用程序 让用户授予我的代码写入其页面的 Facebook 流的权限 据我了解 它应该很简单 让用户单击一个按钮 启动一个弹出窗口 其中包含我的 Facebook 应用程序中的页面 在该页面中 他们单击授予的内容流发
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import

随机推荐

  • thinkadmin安装步骤

    一 先cmd运行安装命令 创建项目 需要在英文目录下面执行 composer create project zoujingli thinkadmin 二 在confing中的database php配置数据库 三 将仓库的data复制到ap
  • 亚马逊自养号测评防关联技巧分享,亚马逊自养号怎么养?

    我们做亚马逊的都知道 想要做好亚马逊 测评是免不了的 很多卖家选择自养号这种方式 但是亚马逊养号并不是一件容易的事 需要我们提高养号的技术和掌握相应的技巧 而且随着平台审查力度的加强 自养号的账号关联问题也给卖家们带来许多困扰 那么什么是自
  • VUE+Springboot实现生成二维码及二维码下载功能

    一 Springboot相关 1 pom依赖引入
  • Python selenium模块的安装和配置教程

    一 selenium的安装以及简单应用 我们以谷歌浏览器的chromedriver为例 1 在Python虚拟环境中安装selenium模块 pip pip3 install selenium 2 下载版本符合的webdriver 以chr
  • 山西电力市场日前价格预测【2024-01-05】

    日前价格预测 预测说明 如上图所示 预测明日 2024 01 05 山西电力市场全天平均日前电价为259 10元 MWh 其中 最高日前电价为363 99元 MWh 预计出现在18 00 最低日前电价为0 00元 MWh 预计出现在11 1
  • 大数据毕设分享 flink大数据淘宝用户行为数据实时分析与可视化

    文章目录 0 前言 1 环境准备 1 1 flink 下载相关 jar 包 1 2 生成 kafka 数据 1 3 开发前的三个小 tip 2 flink sql 客户端编写运行 sql 2 1 创建 kafka 数据源表
  • ICT行业“样品”相关业务挑战及解决方案介绍

    ICT行业供应链样品相关业务介绍 在信息通信技术 ICT 行业中 研发打样 结构件打样和非0价打样是研发和产品设计过程中的重要环节 下面我会通过具体的业务场景来解释这些概念 1 研发打样 场景例子 一家手机制造公司正在开发一款新型智能手机
  • 视频转文字用什么软件好?我来分享几款给你

    各位打工人是不是总是会接到整理会议视频的任务 你是否也曾为在整理会议视频时因为手速跟不上说话节奏而烦恼 你也曾因为转录大量内容而纠结于低效率的问题 你是否也曾为无法同时转录多个声音源而无法理解全场对话而苦恼 如果是的话不妨来看看下面这篇文章
  • Git Bash教程

    Git Bash教程 Pull操作 Pull操作 输入 git pull 呈现 base root xx git pull https github com xx xx git 得到 remote Enumerating objects 5
  • DC电源模块的应用范围与市场前景

    DC电源模块的应用范围与市场前景 DC电源模块广泛应用于各种电子设备和系统中 包括通信设备 计算机 工业自动化设备 医疗设备 航天航空设备 新能源设备等 它们为这些设备提供稳定的直流电源 保证设备的正常运行 DC电源模块主要用于为电子设备提
  • 判断字符串是否是16进制颜色工具类

    该方法接受一个字符串参数colorCode 表示需要校验的十六进制颜色值 方法内部使用正则表达式来匹配colorCode是否符合规则 如果 符合则返回true 否则返回false 正则表达式解释 表示匹配字符串的开头 表示匹配 字符 表示一
  • 光端机技术综述:从理论到实践的全面探索

    在当今数据驱动的时代 光端机技术 已成为通信领域的核心组成部分 从理论的深度研究到实践的广泛应用 光端机技术不断推动着信息社会的发展 成为连接不同设备和网络的关键技术 技术特点 高速数据传输 光端机 利用光纤传输数据 具有极高的传输速率 相
  • .cer格式证书文件和 .pfx格式证书文件有什么区别?

    这里我们将讨论 cer 和 pfx 文件类型之间的差异 什么是数字证书 数字证书在电子通信中用作验证身份的密码机制 我们需要这些证书来建立安全的在线通信渠道 并确保数字数据的隐私 真实性和正确性 数字证书包括主题 实体详细信息 颁发者 CA
  • 3 分钟为英语学习神器 Anki 部署一个专属同步服务器

    Anki 介绍 Anki 是一款基于间隔重复 Spaced Repetition 原理的学习软件 想象一下 你的大脑就像是一个需要定期维护的精密仪器 间隔重复就好比是一种精准的维护计划 它通过在最佳时刻复习信息 来确保知识在你的脑海中牢固地
  • 代码随想录算法训练营Day17 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

    LeetCode 530 二叉搜索树的最小绝对差 本题思路 看到二叉搜索树 我们可以知道 它的中序遍历的有序的 并且是单调递增 如下图所示 然后我们就可以计算出相隔的两个数之间的差值 然后找到最小的那一个即可 定义一个初始为 min 第二个
  • 组建一家IT公司的一些事项

    组建一家IT公司需要考虑多个方面 包括确定公司名称 选择注册地点 确定公司类型 组建团队 选择合适的技术和平台以及建立良好的客户关系等 以下是一些详细的步骤和建议 一 组建事项 确定公司名称 在选择公司名称时 需要考虑名称的含义和市场竞争性
  • 看完这篇 教你玩转镜像转换神器qumu实现虚拟机做题自由!

    前言 最近有小伙伴说比赛没设备 问有没有不需要设备也能实现做题自由的方法 今天这里分享一期 看完这篇你将学会 使用 qumu 转换镜像格式 一般我们做题都是 img 格式的环境 需要导入设备 有些小伙伴没有设备 就可以使用这种方法 把 im
  • 【2023最新版】黑客入门教程|三分钟手把手教会,非常简单

    前言 你知道在每天上网时 有多少黑客正在浏览我们计算机中的重要数据吗 黑客工具的肆意传播 使得即使是稍有点计算机基础的人 就可以使用简单的工具对网络中一些疏于防范的主机进行攻击 在入侵成功之后 对其中的数据信息为所欲为 当用户发现密码被盗
  • 【深度学习:(Contrastive Learning) 对比学习】深入浅出讲解对比学习

    对比学习允许模型从未标记的数据中提取有意义的表示 通过利用相似性和不相似性 对比学习使模型能够在潜在空间中将相似的实例紧密地映射在一起 同时将那些不同的实例分开 这种方法已被证明在计算机视觉 自然语言处理 NLP 和强化学习等不同领域都是有
  • 【计算机毕设选题】opencv python 深度学习垃圾图像分类系统

    文章目录 0 前言 课题简介 一 识别效果 二 实现 1 数据集 2 实现原理和方法 3 网络结构 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升