深度学习项目实战:垃圾分类系统
简介:
今天开启深度学习另一板块。就是计算机视觉方向,这里主要讨论图像分类任务–垃圾分类系统。其实这个项目早在19年的时候,我就写好了一个版本了。之前使用的是python搭建深度学习网络,然后前后端交互的采用的是java spring MVC来写的。之前感觉还挺好的,但是使用起来还比较困难的。不光光需要有python的基础,同时还需要有一定的java的基础。尤其是搭建java的环境,还是很烦的。最近刚好有空,就给这个项目拿了过来优化了一下,本次优化主要涉及前后端界面交互的优化,另外一条就是在模型的识别性能上的优化,提高模型的识别速度。
展示:
下面是项目的初始化界面:


使用本系统的话也是比较简单的,点击选择文件按钮选择需要识别的图片数据。然后再点击开始识别就可以识别了

识别结果如下:

实际的使用请看下面的视频:
深度学习项目实战:垃圾分类系统
项目实现思路:
项目主要分为两块,第一块是深度学习模块,另一块呢就是系统的使用界面了。
1、深度学习模块
先说第一个模块,也就是深度学习模块,这块的主体呢其实就是深度学习的网络的搭建以及模型的训练,还有就是模型的使用了。
深度学习网络的我主要使用的是ResNet的网络结构,使用这个网络结构来实现四分类的垃圾分类的任务肯定是可以的。同时呢在训练模型的时候,我这里又使用了一些调参的手法–迁移学习。为什么要使用迁移学习呢?由于ResNet在图像任务上表现的是比较出色的,同时我们的任务也是图像分类,所以呢是可以使用ResNet来进行迁移学习的。
下面是相关代码:
import torch
from torch import nn
from torch.nn import functional as Fclass ResBlk(nn.Module):def __init__(self, ch_in, ch_out, stride=1):super(ResBlk, self).__init__()self.conv1 = nn.Conv2d(ch_in, ch_out, kernel_size=3, stride=stride, padding=1)self.bn1 = nn.BatchNorm2d(ch_out)self.conv2 = nn.Conv2d(ch_out, ch_out, kernel_size=3, stride=1, padding=1)self.bn2 = nn.BatchNorm2d(ch_out)self.extra = nn.Sequential()if ch_out != ch_in:self.extra = nn.Sequential(nn.Conv2d(ch_in, ch_out, kernel_size=1, stride=stride),nn.BatchNorm2d(ch_out))def forward(self, x):out = F.relu(self.bn1(self.conv1(x)))out = self.bn2(self.conv2(out))out = self.extra(x) + outout = F.relu(out)return outclass ResNet18(nn.Module):def __init__(self, num_class):super(ResNet18, self).__init__()self.conv1 = nn.Sequential(nn.Conv2d(3, 16, kernel_size=3, stride=3, padding=0),nn.BatchNorm2d(16))self.blk1 = ResBlk(16, 32, stride=3)self.blk2 = ResBlk(32, 64, stride=3)self.blk3 = ResBlk(64, 128, stride=2)self.blk4 = ResBlk(128, 256, stride=2)self.outlayer = nn.Linear(256*3*3, num_class)def forward(self, x):x = F.relu(self.conv1(x))x = self.blk1(x)x = self.blk2(x)x = self.blk3(x)x = self.blk4(x)# print(x.shape)x = x.view(x.size(0), -1)x = self.outlayer(x)return xdef main():blk = ResBlk(64, 128)tmp = torch.randn(2, 64, 224, 224)out = blk(tmp)print('block:', out.shape)model = ResNet18(5)tmp = torch.randn(2, 3, 224, 224)out = model(tmp)print('resnet:', out.shape)p = sum(map(lambda p:p.numel(), model.parameters()))print('parameters size:', p)if __name__ == '__main__':main()
下面是迁移学习的主要代码:
trained_model=resnet18(pretrained=True)model = nn.Sequential(*list(trained_model.children())[:-1], Flatten(),nn.Linear(512,4)).to(device)
这部分代码将预训练模型的所有层(除了最后一层)复制到新模型中。Flatten()是将最后一层的输出展平,以便可以输入到全连接层(nn.Linear(512,4))。nn.Linear(512,4)是一个全连接层,有512个输入节点和4个输出节点,对应于任务中的类别数。
最后,.to(device)将模型移动到指定的设备上(例如GPU或CPU)。如果你没有指定设备,那么默认会使用CPU。
之后呢设置batchsize、learning rate、优化器就可以进行模型的训练了
参数设置如下:
batchsz = 64
lr = 1e-4
epochs = 5
2、使用界面
接下来呢,就是关于使用界面的实现思路介绍了。使用界面就是为了方便对模型使用不是很了解的小伙伴使用的。如下所示,可以看到我们只需要点击两个按钮就可以使用了。

这里的实现呢,主要采用的是Flask进行开发的,以前的版本是采用java的方式开的,使用起来不但笨重,同时模型识别的速度还比较的慢。最要命的是,搭建环境也是让人头疼的一件事。所以这次我给整个项目做了优化。主要就是提高模型的识别速度,同时让使用者拥有良好的使用体验。
系统主要架构如下图所示:

其实比较简单,其实也就4步:
第一步:就是给通过使用端选择需要识别的图片数据
第二步:给数据传到指定目录下,然后给模型识别使用
第三步:模型进行识别
第四步:给识别结果以网页的方式进行展示,这里做的是四分类的任务,所以主要设计了四个网页。还有一个就是出现意外状况的test.html
我举一个例子:比如我们输入的图片是厨房的垃圾图片,那么模型识别以后给识别结果交给Flask代码,Flask代码会根据对应的识别结果给跳转到kitch.html界面中,最后的结果如下所示,可以看到的有识别结果还有识别的图片,以及对于相应的垃圾的分类的定义还有一些小贴士。
Flask的主要代码如下:
uploaded_file = request.files['file']file_name = uploaded_file.filenameif not os.path.exists(UPLOAD_FOLDER):os.makedirs(UPLOAD_FOLDER)# get file pathfile_path = os.path.join(UPLOAD_FOLDER, file_name)# write image to UPLOAD_FOLDERwith open(file_path, 'wb') as f:f.write(uploaded_file.read())
下面的代码主要就是获取到form传递过来的图片数据,然后整个代码就会给数据上传到指定的文件夹下面。
最后说明:
由于笔者能力有限,所以在描述的过程中难免会有不准确的地方,还请多多包含!
更多NLP和CV文章以及完整代码请到"陶陶name"获取。
项目实战持续更新,大家加油!!!!
相关文章:
深度学习项目实战:垃圾分类系统
简介: 今天开启深度学习另一板块。就是计算机视觉方向,这里主要讨论图像分类任务–垃圾分类系统。其实这个项目早在19年的时候,我就写好了一个版本了。之前使用的是python搭建深度学习网络,然后前后端交互的采用的是java spring …...
C#浅拷贝和深拷贝数据
目录 一、浅拷贝 二、深拷贝 一、浅拷贝 就是把原来的数据,复制一份,但是2份数据是共享地址的,修改第一份数据或者修改第二份数据,都会一起改变,这可能不是我们程序中需要的场景。 下面我们演示一下,首…...
【JVM】4.运行时数据区(程序计数器、虚拟机栈)
文章目录 4.JVM的运行时数据区4.1 程序计数器4.2 Java虚拟机栈4.3 虚拟机栈内存溢出 4.JVM的运行时数据区 4.1 程序计数器 程序计数器(PC)会记录着下一行字节码指令的地址。执行完当前指令后,PC刷新,JVM的执行引擎根据程序计数器…...
算法:程序员的数学读书笔记
目录 0的故事 一、按位计数法 二、不使用按位计数法的罗马数字 三、十进制转二进制 四、0所起到的作用 逻辑 一、为何逻辑如此重要 二、兼顾完整性和排他性 三、逻辑 四、德摩根定律 五、真值表 六、文氏图 七、卡诺图 八、逻…...
机器学习算法---时间序列
类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…...
RK3568/RV1126/RV1109/RV1106 ISP调试方案
最近一直在做瑞芯微rv1126的开发,由于项目性质,与camera打的交道比较多,包括图像的采集,ISP处理,图像处理,H.264/H.265编解码等各个方面吧。学到了不少,在学习的过程中,也得到了不少…...
【TB作品】51单片机,语音出租车计价器
西交大题目 1.语音出租车计价器 一、功能要求: 1.具有可模拟出租车车轮转速传感器的硬件设计,可计量出租车所走的公 里数。 2.显示和语音播报里程、价格和等待红灯或堵车的计时价格: 3.具有等待计时功能 4.具有实时年月日显示和切换功能。 5.操作简单、界面友好。 二、设计建议…...
jmeter简单压测kafka
前言 这也是一个笔记,就是计划用jmeter做性能测试,但是这里是只要将数据放到kafka的topic里,后面查看下游业务处理能力。 一、方案 因为只要实现数据放到kafka,参考了下博友的方案,可行。 二、方案验证 详细过程就不…...
【漏洞复现】红帆OA iorepsavexml.aspx文件上传漏洞
漏洞描述 广州红帆科技深耕医疗行业20余年,专注医院行政管控,与企业微信、阿里钉钉全方位结合,推出web移动一体化办公解决方案——iOffice20(医微云)。提供行政办公、专业科室应用、决策辅助等信息化工具,采取平台化管理模式,取代医疗机构过往多系统分散式管理,实现医…...
04_Web框架之Django一
Web框架之Django一 学习目标和内容 1、能够描述Django的作用 2、能够使用Django创建应用 3、能够使用GET和POST请求方式进行传参 4、能够使用Django的函数式方法定义视图 5、能够进行Django的配置文件修改 6、能够基本使用Django的路由定义 一、Django相关介绍 1、什么是Djan…...
单机架构到分布式架构的演变
目录 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 总结 1.单机架构 初期,我们需要利用我们精干的技术团队,快…...
1.新入手的32位单片机资源和资料总览
前言: 学了将近1年的linux驱动和uboot,感觉反馈不足,主要是一直在学各种框架,而且也遇到了门槛,比如驱动部分,还不能随心所欲地编程,原因是有些外设的原理还不够深刻、有些复杂的底层驱动的代码…...
jmeter判断’响应断言‘两个变量对象是否相等
1、首先需要设置变量,json、正则、csv文件等变量 2、然后在响应断言中 ①JMeter Variable Name to use —— 输入一个变量,变量名即可 ② 模式匹配规则 ——相等 ③测试模式 ——输入引用的变量命${变量名} (注意这里是需要添加一个测试模式…...
【Linux基础命令使用】
文章目录 一. 操作系统和文件及文件路径介绍二. 基础指令介绍三. 结束语 一. 操作系统和文件及文件路径介绍 什么是操作系统?操作系统是一款进行软硬件资源管理的软件为什么要进行软硬件资源管理?对上提供良好的稳定的运行服务----工具Linux指令和图形化…...
【JNA与C++基本使用示例】
JNA中java与C使用注意事项和代码示例 JNA关系映射表使用案列注意代码示例C代码java代码 JNA关系映射表 使用案列 注意 JNA只支持C方式的dll使用C的char* 作为返回值时,需要返回的变量为malloc分配的地址C的strlen函数只获得除/0以外的字符串长度 代码示例 C代码…...
HttpRunner接口自动化测试框架
简介 HttpRunner是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。 项目地址:GitHub - httprunner/httprunner: HttpRunner 是一个开源的 API/UI…...
云计算:Vmware 安装 FreeNAS
目录 一、实验 1.Vmware 安装 FreeNAS 2.配置Web界面 二、问题 1.iSCSI如何限定名称 2.LUN和LVM的区别 一、实验 1.Vmware 安装 FreeNAS (1)环境准备 VMware Workstation 17 FreeNAS相关安装部署镜像: 官网地址: https://download…...
数据库交付运维高级工程师-腾讯云TDSQL
数据库交付运维高级工程师-腾讯云TDSQL上机指导,付费指导,暂定99...
目标检测YOLO实战应用案例100讲-光伏电站热斑检测(续)
目录 2.5 图像重建方法实验及其结果分析 2.5.1 数据集与超参数 2.5.2 结果分析...
jmeter如何循环运行到csv文件最后一行后停止
1、首先在线程组中设置’循环次数‘–勾选永远 2、csv数据文件设置中设置: 遇到文件结束符再次循环?——改为:False 遇到文件结束符停止线程?——改为:True 3、再次运行就会根据文档的行数运行数据 (如果需要在循环控制器中&…...
GD32F103VET6替换STM32F103VET6实战:ADC+DMA读取内部温度传感器,从3.7V异常到3.3V正常的排查全记录
GD32与STM32 ADC替换实战:从异常电压到隐蔽引脚配置的深度排查 最近在将STM32F103VET6替换为GD32F103VET6时,遇到了一个令人费解的ADC读取问题——内部温度传感器读数始终显示-400C左右。经过长达两周的排查,最终发现是LIN通信引脚配置影响了…...
深度学习图像描述生成技术解析与应用实践
1. 深度学习图像描述生成模型入门指南 在计算机视觉与自然语言处理的交叉领域,图像描述生成(Image Captioning)技术正逐渐改变人机交互的方式。想象一下,当视障人士的手机能够准确描述周围环境,当电商平台可以自动为海…...
对比体验在 Taotoken 上切换不同模型生成代码片段的差异
在 Taotoken 上切换不同模型生成代码片段的体验观察 1. 测试环境与模型选择 本次测试选取了 Taotoken 模型广场中三个擅长代码生成的模型进行对比体验,分别是 claude-sonnet-4-6、gpt-4-turbo-preview 和 deepseek-coder-33b。测试使用相同的 Python 环境与网络条…...
【紧急预警】Tidyverse 2.0.0–2.0.3版本中purrr::map_dfr静默失败漏洞(附已验证patch及CRAN临时降级方案)
更多请点击: https://intelliparadigm.com 第一章:【紧急预警】Tidyverse 2.0.0–2.0.3版本中purrr::map_dfr静默失败漏洞(附已验证patch及CRAN临时降级方案) purrr::map_dfr 在 Tidyverse 2.0.0 至 2.0.3 版本中存在一个高危静…...
2026年“史上最大IPO”争夺战:OpenAI营收承压,Anthropic后来居上?
科技巨头站到聚光灯下近日,据外媒报道,OpenAI未能完成今年第一季度的内部营收目标,ChatGPT的用户增长也已连续数月低于预期。消息传出的时机格外微妙,就在几周前,这家公司刚刚完成了一笔1220亿美元的私募融资ÿ…...
AI公平性检测:多阶段审计框架与性别偏见解决方案
1. 项目背景与核心问题去年参与某金融风控项目时,我们团队发现一个诡异现象:同一套AI评分模型对女性客户的拒贷率比男性高出23%。排查后发现训练数据中女性样本仅占38%,且历史放贷记录存在隐性性别歧视。这个案例让我意识到,AI偏见…...
英国机器视觉协会主办会议,录用率31.9%!CCF推荐学术会议(C)截稿提醒
►►►BMVC 2026The British Machine Vision Conference (BMVC) is one of the major international conferences on computer vision and related areas. It is organised by the British Machine Vision Association (BMVA). The 37th BMVC will be an in-person event from …...
为Nodejs应用快速集成稳定可靠的大模型api服务
为Nodejs应用快速集成稳定可靠的大模型API服务 1. 统一接入方案的技术选型 现代Node.js应用集成AI能力时,开发者常面临多模型供应商接入复杂、密钥管理分散等问题。Taotoken提供的OpenAI兼容API层可统一对接主流大模型,通过标准化接口降低接入成本。其…...
5分钟学会particles.js:让网页动起来的终极粒子特效指南
5分钟学会particles.js:让网页动起来的终极粒子特效指南 【免费下载链接】particles.js A lightweight JavaScript library for creating particles 项目地址: https://gitcode.com/gh_mirrors/pa/particles.js 还在为静态网页缺乏活力而烦恼吗?想…...
HS2-HF_Patch:一站式解决《Honey Select 2》语言障碍和功能限制的终极增强补丁
HS2-HF_Patch:一站式解决《Honey Select 2》语言障碍和功能限制的终极增强补丁 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾因《Honey S…...
