# Artificial Intelligence基于深度学习的机器视觉:垃圾分类
## 1.题目介绍
目前垃圾分类已经在许多城市开展起来。这看似微不足道的“小事”,实则关系到13亿多人生活环境的改善,理应通过人工智能技术来大力提倡社会风气养成。本次实验提供六个类别的垃圾识别分类数据集,分别是glass、cardboard、metal、paper、plastic、trash。本次实验是基于卷积神经网络模型来完成六个类别垃圾分类。
## 2.任务要求
每位同学单独完成;建立神经网络模型,并尽可能将其参数调优到最佳状态;绘制深度学习模型图、绘制并分析学习曲线等;分析模型并试着调试不同学习率等超参数对模型的结果影响 ;使用Python语言。
## 3.实验方法
卷积神经网络 (Convolutional Neural Network, CNN)是一种结构类似于人类或动物的 视觉系统 的人工神经网络,包含一个或多个卷积层(Convolutional Layer)、池化层(Pooling Layer)和全连接层(Fully-connected Layer)。
## 4.搭建过程
我先尝试了VGG,发现模型始终不收敛,测试的正确率极低,仅有20%。
![](img/1.png)
Figure 1不收敛的网络学习曲线
最终的网络模型是在ResNet v2的基础上修改而来的,因为原先的ResNet v2层数过多,且前面几层的尺寸过大,跑在GPU上显存会溢出。于是我在此基础上加入了几个池化层,在训练中出现了过拟合的现象,我又调整了正则项。最终的效果能达到80%的正确率。网络模型图如下所示。
![](img/2.png)
## 5.训练过程
由于临近ddl,momodel网站的使用量大大增加,我每次对模型进行修改都要浪费大量时间等待,而我始终找不到窍门,需要大量的尝试,于是我从淘宝租用了GPU,改进网络的速度也大大加快了。
我将图像缩放到-1.0~1.0的范围,然后放入网络中训练和验证,过程如图。同时还使用了在训练过程中随时保存准确率最高的模型和随着epoch增加动态调整learning rate方法,最终的网络在数据集上训练了200个epoch,在1080ti上跑了五六个小时,学习曲线在下面的图中展示。
![](img/3.png)
Figure 2云GPU训练
```python
ef lr_schedule(epoch):
"""学习率调度
学习率将在 80, 120, 160, 180 轮后依次下降。
他作为训练期间回调的一部分,在每个时期自动调用。
# 参数
epoch (int): 轮次
# 返回
lr (float32): 学习率
"""
lr = 1e-3
if epoch > 180:
lr *= 0.5e-3
elif epoch > 160:
lr *= 1e-3
elif epoch > 120:
lr *= 1e-2
elif epoch > 80:
lr *= 1e-1
print('Learning rate: ', lr)
return lr
```
训练过程中随时保存模型
```python
checkpoint = ModelCheckpoint(filepath="./results/weights_{epoch:03d}-{val_acc:.4f}.h5",
monitor='val_acc',
verbose=1,
save_best_only=True)
lr_scheduler = LearningRateScheduler(lr_schedule)
lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),
cooldown=0,
patience=5,
min_lr=0.5e-6)
tensorboard = TensorBoard(log_dir)
callbacks = [checkpoint, lr_reducer, lr_scheduler, tensorboard]
# 训练模型, fit_generator函数:https://keras.io/models/model/#fit_generator
# 利用Python的生成器,逐个生成数据的batch并进行训练。
# callbacks: 实例列表。在训练时调用的一系列回调。详见 https://keras.io/callbacks/。
d = model.fit_generator(
# 一个生成器或 Sequence 对象的实例
generator=train_generator,
# epochs: 整数,数据的迭代总轮数。
epochs=epochs,
# 一个epoch包含的步数,通常应该等于你的数据集的样本数量除以批量大小。
steps_per_epoch=1845 // batch_size,
# 验证集
validation_data=validation_generator,
# 在验证集上,一个epoch包含的步数,通常应该等于你的数据集的样本数量除以批量大小。
validation_steps=230 // batch_size,
callbacks=callbacks)
```
绘制出来的学习曲线如图,可以看到表现很优异,val_acc后期稳定在90%。
![](img/4.png)
![](img/5.png)
![](img/6.png)
![](img/7.png)
![](img/8.png)
Figure 3学习曲线
## 6.结果展示
训练出来的模型在测试集上表现优异,达到了90.23%的正确率。
![](img/9.png)
Figure 4 结果
通过了系统测试,模型将10张图片中的9张正确分类。
![](img/10.png)
Figure 5 测试结果
## 7.总结与反思
从零开始,搭建一个神经网络,然后训练模型,测试,调整再测试……总的来说这个过程真的很有收获。虽然只是调用Keras,但通过实验感觉更深切地理解到了计算机视觉的原理。想想真的很奇妙,竟然能有人想出这么神奇的方式(神经网络)来模拟人类的视觉,而且竟然效果不错,计算机科学真是有趣。
在这个过程中我浪费了很多时间,有急得挠头的时候,比如排队等GPU,debug(predict的时候预处理没有和测试集完全一致真得困扰了我好久...),还有在各种框架和网络结构之间纠结的时候。
但同时我也收获了不少知识,多种框架的用法和异同,图像预处理,远程训练等等,最重要我对很多从前模模糊糊的概念心里有了底,比如训练集和验证集,神经网络的层是怎么回事等等,这门课真的很有意义。
## 8.网络summary
![](img/11.png)
![](img/12.png)
![](img/13.png)
甜辣uu
- 粉丝: 9628
- 资源: 1102
最新资源
- DC-Machine-Armature-Control:基于MATLAB Simulink的直流电机电枢闭环控制系统仿真模型 仿真条件:MATLAB Simulink R2015b
- 基于深度卷积生成对抗网络(DCGAN)的图像生成模型 matlab代码 只代码
- python 程序,语音识别文字 做了报错,多线程处理,加了前端窗口,超级详细讲解,讲清楚每一个包 你的导师会惊讶你比他还懂,为了能当老板的女婿,赶紧拿 声明下,除了官方文档部分,这是我原创的 本
- ROS2 Ubuntu18.04机器人系统,机器人仿真机械臂搭建 Ubuntu18.04 已经搭建好 Ros2 foxcy环境及所需命令语句,配套有gazebo11,rviz2,可以直接使用 配置
- 串口服务器方案,软件源码,给pdf版本原理图,送PCB裸板子,目前最大支持20多路串口485和232,4路网口,目前用了3路,已经全部画到PCB中,根据实际需要自己缩减所需要的串口数目,送PCB裸板
- 750W伺服方案资料 包括原理图(pdf版本) bom元件清单 程序带代码 编译软件和烧录软件 用到的芯片手册和技术文档 比较全的资料是学习的好资料 本资料可配合旋转变压器、正交式-光电编码器
- 上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通讯
- 基于遗传算法的微电网运行优化的MATLAB代码,目标函数为运行成本之和最小,注释详细
- 基于蒙特卡洛法的概率潮流 安全性分析 以IEEE33节点的电网为研究对象,建立光伏和风电的概率出力模型,并采用蒙特卡洛法进行随机抽样,基于抽样序列进行概率潮流计算 最后得到电网的电压概率出力曲线 可
- 轻量级高并发物联网服务器接收程序源码(仅仅是接收硬件数据程序 ,没有web端,不是java,协议自己写,如果问及这些问题统统不回复 ),对接几万个设备没问题,数据库采用ef6+sqlite,可改ef
- 永磁同步电机模型预测控制,自抗扰控制,滑模控制等matlab仿真及ccs代码
- 一种永磁同步电机无位置观测算法,采用的电流模型与pll,适用于表贴电机和内插电机,可实现带载闭环启动,全速度范围采用一个观测器,并且可以生成代码,已跑实际电机进行了验证,所有模块纯手工搭建,绝不是从其
- xilinx mig ddr 控制器ip使用代码,包括ddr2,ddr3,ddr4,代码内容为向ddr内部连续写入一串数据,再连续读出,以此测试ddr控制器功能 均经过下板验证 ddr3
- 导线平差反算程序(2021年7月版):此版为闭合导线,附合导线反算合成版,简化了输入数据工程量,新增了观测记录的新样式 可以选导线类型,等级,左右角,并且有自动校核显示,通过反算出的数据进行二次正向
- 基于EKF的三相PMSM无传感器矢量控制,基于卡尔曼滤波器的无速度传感器
- 电力电子、电机驱动、数字滤波器matlab simulink仿真模型实现及相关算法的C代码实现 配置C2000 DSP ADC DAC PWM定时器 中断等模块,提供simulink与DSP的联合仿
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页