# 卷积神经网络垃圾分类应用
这是一个使用 `TensorFlow` 实现的,基于卷积神经网络的垃圾分类模型。
> 这是 -> 软件工程,大三第一学期,河北农业大学,理工学院,齐立萍老师的科学计算与数据分析课程的课程设计。
该应用提供了:
- 带有大量文本的 jupyter notebook
- 数据集预处理脚本
- 用于训练的命令行工具
- 用于预测新数据的命令行工具
> ! 该仓库不包含数据集,也未包含训练好的神经网络权重持久化文件。
继续阅读,来准备数据集,并训练模型,生成训练好的神经网络权重持久化文件,这个文件会在用于预测的命令行工具 `cli/predict.py` 中,被用于加载已训练的模型。
再开始之前,确保你现在正处于该仓库的根目录:
```sh
git clone https://github.com/Drincann/cnn-trash-classification.git
cd cnn-trash-classification
```
## 准备你的环境
```sh
python3 -m pip install -r requirements.txt
```
注意,请使用 TensorFlow >= 2.7.0,来支持一些该 repo 使用到的新特性。
请不要使用 macOS,Apple 目前对 TensorFlow 的支持不完整,见 [https://github.com/apple/tensorflow_macos](https://github.com/apple/tensorflow_macos)。
使用 Windows 或 Ubuntu Linux。
## Dataset
### 选择数据集
#### 两个标签的数据集
感谢 [梨为乐](https://www.heywhale.com/home/user/profile/6137612c1cac2c04682f9c47) 的 [有机、可回收物品数据集](https://www.heywhale.com/mw/project/619b91bc7d74800017258af5/dataset)。
你可以在这里下载它:
[https://www.heywhale.com/mw/project/619b91bc7d74800017258af5/dataset](https://www.heywhale.com/mw/project/619b91bc7d74800017258af5/dataset)
#### 更多标签的数据集
感谢这个 repo -> [garythung/trashnet](https://github.com/garythung/trashnet) 提供的更多标签的数据集。
你可以在这里找到 google 云盘上的两个数据集(需要梯子):
[https://github.com/garythung/trashnet](https://github.com/garythung/trashnet)
### 准备数据集
#### 数据集一
请在根目录创建 `data` 目录,脚本将在这里寻找数据集。
对于上节中的第一个数据集,它应该位于 `./data/model2ClassiDataset`:
```sh
mkdir -p ./data/model2ClassiDataset/
```
将第一个数据集解压:
```sh
$ tree -L 2
.
├── TEST
│ ├── O
│ └── R
└── TRAIN
├── O
└── R
```
`"O"` 指的是有机物(organic),`"R"` 值的是可回收物(recycle)。
数据集的提供者已经为我们分好了测试集和训练集,但在后面的过程中,我们要自己拆分数据集。
所以,现在你可以选择仅使用测试集、训练集中的一个,或者将它们合并,使用整个数据集。
然后,重命名 `O` 为 `organic`,对应的,`R` 重命名为 `recycle`,将它们放到 `./data/model2ClassiDataset/` 目录下:
```sh
cp -R ${datasetroot}/organic ./data/model2ClassiDataset/
cp -R ${datasetroot}/recycle ./data/model2ClassiDataset/
```
这是因为,在后面进行数据集拆分时,脚本会将文件名作为标签名,而且,在全局配置文件 `./globalConfig/config.py` 中我们也是这样配置的。
#### 数据集二
你可以先跳过这一节,尝试训练第一个模型。
对于第二个数据集,它应该位于 `./data/modelMalClassiDataset`:
```sh
$ tree -L 1
.
├───cardboard
├───glass
├───metal
├───paper
├───plastic
└───trash
```
其中 trash、paper、cardboard 较为相似,所以我去掉了 trash 这个标签。
然后我们把它放到 `./data/modelMulClassiDataset` 目录下:
```sh
rm -r ${datasetroot}/trash/
cp -R ${datasetroot}/* ./data/modelMulClassiDataset/
```
#### 平衡数据集
对于第二个数据集,不同标签下的图片数量存在不小的差距,这可能会让模型认为某些标签更容易出现,拟合效果不好。
使用该 repo 提供的一个命令行工具 `./cli/resampleDataset.py`,它实现了对输入图片数据集的随机过采样算法。
```sh
python3 ./cli/resampleDataset.py -i \
./data/modelMulClassiDataset/cardboard/ \
./data/modelMulClassiDataset/glass/ \
./data/modelMulClassiDataset/metal/ \
./data/modelMulClassiDataset/paper/ \
./data/modelMulClassiDataset/plastic/
```
这个脚本会扫描所有输入的目录,找出最大图片数量,然后将其他标签的图片随机过采样到这个最大数量。
第一个数据集的图片数量差异不大,不过你也可以对它进行随机过采样:
```sh
python3 ./cli/resampleDataset.py -i ./data/model2ClassiDataset/organic/ ./data/model2ClassiDataset/recycle/
```
## Train
### 两标签数据集
你可以参考 jupyter notebook `./notebookModel2Classi.ipynb`,它是可运行的,并带有大量描述文本,流程包括从读取数据集到最终输出持久化的卷积神经网络权重文件。
或者使用脚本(命令行工具)训练:
```sh
python3 ./cli/train.py -m 2classi
```
`-m` 参数指定要使用什么数据集训练模型,可选项 `['mulclassi', '2classi']`,`2classi` 是默认值。
训练是一个漫长的过程,
在仅使用训练集提供的 2k+ 个图片的情况下,在连接电源的移动平台上使用 CPU i5-9300H 进行训练,花费时间大概 10min+。
如果要使用 GPU 加速训练,请访问 [https://www.tensorflow.org/install/gpu](https://www.tensorflow.org/install/gpu) 查看你的 GPU 支持情况,并按照文档安装环境依赖。
你可以使用这种方式查看可用的计算资源:
```python
gpus = tf.config.list_physical_devices(device_type='GPU')
cpus = tf.config.list_physical_devices(device_type='CPU')
print(gpus, cpus)
```
在连接电源的移动平台上使用 RTX 2060 进行训练,花费时间大概 1min 左右。
在使用命令行工具进行训练结束后,会写出已训练好的卷积神经网络权重持久化文件,三个文件会被写到 `./models/model2Classi/storage` 下。
这些持久化文件被用于命令行工具 `./cli/predict.py`,这个命令行工具通过重新加载卷积神经网络权重来预测输入的数据。
### 多标签数据集
对这个数据集的 jupyter notebook 位于 `./notebookModelMulClassi.ipynb`,你也可以参考或运行他。
更简单的方式是使用脚本训练:
```sh
python3 ./cli/train.py -m mulclassi
```
## Predict
接下来使用 `./cli/predict.py` 进行预测。
你可以使用 `-h` 参数来查看帮助信息:
```sh
python3 ./cli/predict.py -h
```
使用示例:
```sh
python3 ./cli/predict.py -i trash.jpg -m 2classi
```
`-i` 用来指定多个要预测的图片路径输入(也可以是一个文件)。
`-m` 指定使用哪个已训练好的模型,可选项 `['mulclassi', '2classi']`,`2classi` 是默认值。
然后,对于使用两标签数据集训练的模型,该脚本会分别对每个输入图片输出两个标签的概率,以及一个结果。
没有合适的资源?快使用搜索试试~ 我知道了~
基于卷积神经网络的垃圾分类系统源码+部署教程文档+全部数据+训练好的模型(高分项目).zip
共15个文件
py:7个
ipynb:2个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 171 浏览量
2024-04-22
09:38:57
上传
评论 1
收藏 83KB ZIP 举报
温馨提示
【资源说明】 基于卷积神经网络的垃圾分类系统源码+部署教程文档+全部数据+训练好的模型(高分项目).zip基于卷积神经网络的垃圾分类系统源码+部署教程文档+全部数据+训练好的模型(高分项目).zip基于卷积神经网络的垃圾分类系统源码+部署教程文档+全部数据+训练好的模型(高分项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于卷积神经网络的垃圾分类应用源码+部署教程文档+全部数据+训练好的模型(高分项目).zip (15个子文件)
cnn-trash-classification-master
.vscode
launch.json 1KB
notebookModel2Classi.ipynb 56KB
globalConfig
config.py 2KB
LICENSE 480B
cli
ModelsEnum.py 103B
predict.py 3KB
resampleDataset.py 3KB
train.py 5KB
requirements.txt 47B
models
model2Classi
modelDefinition.py 1022B
modelMulClassi
modelDefinition.py 1KB
.gitignore 86B
README.md 7KB
notebookModelMulClassi.ipynb 64KB
171265889347208773632.zip 416B
共 15 条
- 1
资源评论
- BlueHeartForme2024-05-02简直是宝藏资源,实用价值很高,支持!
不走小道
- 粉丝: 3237
- 资源: 5112
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功