网站开发维护前景,域名注册及网站建设,惠州seo关键字排名,微信目录文章转wordpress0 前言
#x1f525; 优质竞赛项目系列#xff0c;今天要分享的是
#x1f6a9; opencv python 深度学习垃圾分类系统
#x1f947;学长这里给一个题目综合评分(每项满分5分)
难度系数#xff1a;3分工作量#xff1a;3分创新点#xff1a;4分
这是一个较为新颖的竞…0 前言 优质竞赛项目系列今天要分享的是 opencv python 深度学习垃圾分类系统
学长这里给一个题目综合评分(每项满分5分)
难度系数3分工作量3分创新点4分
这是一个较为新颖的竞赛课题方向学长非常推荐 更多资料, 项目分享
https://gitee.com/dancheng-senior/postgraduate
课题简介
如今垃圾分类已成为社会热点话题。其实在2019年4月26日我国住房和城乡建设部等部门就发布了《关于在全国地级及以上城市全面开展生活垃圾分类工作的通知》决定自2019年起在全国地级及以上城市全面启动生活垃圾分类工作。到2020年底46个重点城市基本建成生活垃圾分类处理系统。
人工垃圾分类投放是垃圾处理的第一环节但能够处理海量垃圾的环节是垃圾处理厂。然而目前国内的垃圾处理厂基本都是采用人工流水线分拣的方式进行垃圾分拣存在工作环境恶劣、劳动强度大、分拣效率低等缺点。在海量垃圾面前人工分拣只能分拣出极有限的一部分可回收垃圾和有害垃圾绝大多数垃圾只能进行填埋带来了极大的资源浪费和环境污染危险。
随着深度学习技术在视觉领域的应用和发展让我们看到了利用AI来自动进行垃圾分类的可能通过摄像头拍摄垃圾图片检测图片中垃圾的类别从而可以让机器自动进行垃圾分拣极大地提高垃圾分拣效率。
基于深度学习的垃圾分类系统是非常好的毕业设计课题 一、识别效果
老样子 废话不多说先展示图像垃圾分类的识别效果
训练模型精度 可以看到只迭代了10轮精度达到87.50%而且没有出现过拟合现象
我最高训练达到96%迭代200轮
识别结果 实际验证正确率还是很高的。
二、实现
1.数据集
该数据集包含了 2507 个生活垃圾图片。数据集的创建者将垃圾分为了 6 个类别分别是 如下所示 一共6类垃圾 比如玻璃类的如下 塑料类的如下 其他的不列举了。
2.实现原理和方法
使用深度残差网络resnet50作为基石在后续添加需要的层以适应不同的分类任务 模型的训练需要用生成器将数据集循环写入内存同时图像增强以泛化模型 使用不包含网络输出部分的resnet50权重文件进行迁移学习只训练我们在5个stage后增加的层
需要的第三方库主要有tensorflow1.xkerasopencvPillowscikit-learnnumpy 安装方式很简单打开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(weightspretrain,include_topFalse,poolingNone,input_shape(input_size,input_size, 3),classesnum_classes)#由于有预权重前部分冻结后面进行迁移学习for layer in base_model.layers:layer.trainable False#添加后面的层x base_model.outputx layers.GlobalAveragePooling2D(nameavg_pool)(x)x layers.Dropout(0.5,namedropout1)(x)#regularizers正则化层正则化器允许在优化过程中对层的参数或层的激活情况进行惩罚#对损失函数进行最小化的同时也需要让对参数添加限制这个限制也就是正则化惩罚项使用l2范数x layers.Dense(512,activationrelu,kernel_regularizer regularizers.l2(0.0001),namefc2)(x)x layers.BatchNormalization(namebn_fc_01)(x)x layers.Dropout(0.5,namedropout2)(x)#40个分类x layers.Dense(num_classes,activationsoftmax)(x)model Model(inputsbase_model.input,outputsx)#模型编译model.compile(optimizeradam,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_sizeimg_sizeself.gar_numgar_numself.data_dirdata_dirself.batch_sizebatch_sizeself.pretrainpretrain 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)epochs4model.fit_generator(train_sequence,steps_per_epochlen(train_sequence),epochsepochs,verbose1,validation_datavalidation_sequence,max_queue_size10,shuffleTrue)#微调,在实际工程中激活函数也被算进层里所以总共181层微调是为了重新训练部分卷积层同时训练最后的全连接层layers149learning_rate1e-4for layer in model.layers[:layers]:layer.trainable Falsefor layer in model.layers[layers:]:layer.trainable TrueAdam adam(lrlearning_rate, decay0.0005)model.compile(optimizerAdam, losscategorical_crossentropy, metrics[accuracy])model.fit_generator(train_sequence,steps_per_epochlen(train_sequence),epochsepochs * 2,verbose1,callbacks[callbacks.ModelCheckpoint(./models/garclass.h5,monitorval_loss, save_best_onlyTrue, modemin),callbacks.ReduceLROnPlateau(monitorval_loss, factor0.1,patience10, modemin),callbacks.EarlyStopping(monitorval_loss, patience10),],validation_datavalidation_sequence,max_queue_size10,shuffleTrue)print(finish train,look for garclass.h5)最后 更多资料, 项目分享
https://gitee.com/dancheng-senior/postgraduate