任务是对垃圾图片进行分类,即识别出垃圾图片中物品的类别,包括大分类与小分类,大分类共四个类别,分为厨余垃圾,可回收物,其他垃圾,有害垃圾。小分类为大分类下的分支。垃圾类别共214类。
{root}
├── models //模型文件夹
├── logs //日志文件夹
├── utils.py //一些工具函数
├── dataset.py //数据集预处理
├── train.py //训练运行文件
├── infer.py //批量验证文件
├── garbage.py //界面文件
├── Main.py //主文件,实现单张照片验证
├── readme.md //帮助文档
1.先找到本次题目适合的数据集。针对数据集做一些针对性的数据预处理算法,使之满足神经网络的输入并且进行数据增强,对后期的模型训练会有很大的帮助。
2.不断的尝试各种现有的网络结构。选择好的baseline。我们考虑用ResNet50和ResNet101进行结果对比,挑选出适合该网络的模型结构,然后基于该模型进行不断的调参,调试出性能较好的参数。
3.做结果验证,分析badcase。将上述模型在验证集上做结果验证,找出错误样本,分析出错原因,然后针对性地基于新数据和模型,再次进行模型调优,选择什么样的优化器,学习率衰减等等,将其得到的结果对比,选择最优。
4.用pyqt5实现界面,将选择测试的图片和最后显示的结果用界面显示出来。
在该项目中,主要使用resnet101用于垃圾分类,使用预训练参数大大地节约训练时间,并在短时间内达到更高的准确率。损失函数选择使用CrossEntropyLoss,优化函数选择使用Adam,学习率优化函数选择使用StepLR。初始学习率设置为0.0001。在训练开始时,选择之前训练过的最优参数权重进行继承。训练过程中在Terminal中运行train.py文件,训练的每一轮epoch有进度条指示进度。
工程项目实现过程中的调试手段很重要