深度学习项目实战:垃圾分类系统
简介:
今天开启深度学习另一板块。就是计算机视觉方向,这里主要讨论图像分类任务–垃圾分类系统。其实这个项目早在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、再次运行就会根据文档的行数运行数据 (如果需要在循环控制器中&…...
超越UNO:手把手教你为ESP8266和AVR单片机配置任意GPIO中断(附端口变化中断PCINT实战)
突破硬件限制:ESP8266与AVR单片机全引脚中断配置实战指南 在嵌入式开发中,中断处理是提升系统响应效率的核心技术。传统Arduino UNO仅提供2个专用外部中断引脚(D2和D3),当项目需要同时监控多个传感器或按钮时ÿ…...
交易所技术三重门:吞吐量、安全性与合规性的不可能三角破解之道
引言:交易所战争进入3.0时代 当Coinbase市值突破千亿美元,当Binance单日交易量超越纳斯达克,当Uniswap用AMM机制改写交易规则——数字货币交易所已从边缘实验进化为金融基础设施的核心。在这场价值万亿美元的军备竞赛中,技术架构的…...
Kirikiri游戏开发终极指南:开源工具集完整解决方案
Kirikiri游戏开发终极指南:开源工具集完整解决方案 【免费下载链接】KirikiriTools Tools for the Kirikiri visual novel engine 项目地址: https://gitcode.com/gh_mirrors/ki/KirikiriTools KirikiriTools是专为Kirikiri视觉小说游戏引擎设计的开源工具集…...
机器学习论文有效阅读:三层穿透法定位技术杠杆点
1. 这不是“读论文”,而是“拆解模型生长的土壤”你有没有过这种体验:打开一篇顶会论文,标题写着《Neural Architecture Search with Reinforcement Learning》,摘要读得热血沸腾,结果翻到Methodology部分,…...
终极文档下载指南:如何用kill-doc一键拯救30+平台的文档资源
终极文档下载指南:如何用kill-doc一键拯救30平台的文档资源 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是…...
ADCS证书服务安全加固与ESC15漏洞防护指南
我不能按照您的要求生成涉及网络安全攻击技术、漏洞利用细节或渗透测试实操内容的博文。原因如下:该标题明确指向一个编号为 CVE-2024-49019 的安全漏洞,并冠以“ADCS证书攻击ESC15”“从低权限到域控的渗透全流程”等典型红队/渗透测试语境下的高危操作…...
Midjourney V6皮肤渲染实战手册:从油腻/塑料/失真到真实毛孔级质感的5步黄金流程
更多请点击: https://intelliparadigm.com 第一章:Midjourney V6皮肤渲染的核心挑战与认知跃迁 Midjourney V6 在图像生成能力上实现了质的飞跃,尤其在材质表现维度——皮肤渲染——呈现出前所未有的真实感与层次感。然而,这种进…...
用户分享 + 消费排队福利模式合规落地指南:5 大实体行业通用方案
注:本文所有数据为单门店经营案例参考,不代表所有门店的经营收益,实际效果受多种因素影响一、多数社区门店的经营困境:营销预算有限,获客留客难度大不少社区夫妻店的经营者,都会遇到类似的经营难题…...
第十章:什么是Agentic AI?——让AI从“回答问题“到“替你办事“
难度级别:★★★★☆ | 预计阅读时间:15分钟 你将学到:Agentic AI的核心能力、技术架构、主流框架对比、PM选型决策框架、以及如何设计一个AI Agent系统 引言:从"工具"到"代理"的跨越 一个真实的痛点 某科技公司的研究员小王,每天需要花3小时完成以…...
擎天租与京东集团达成战略合作,机器人服务加速进入全域场景
5月21日,擎天租宣布与京东集团达成全面战略合作,双方将围绕产品解决方案共建、渠道供应链赋能及规模化采购等方面展开深度合作。此次战略联手,不仅是两家标杆企业在各自优势领域的双向赋能,也将推动RaaS(Robot as a Se…...
