Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

2020年5月22日10:00:31 发表评论 381 °C
摘要

使用 ResNet 50 训练一个「垃圾分类器」。

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收录,有技术干货文章,整理的学习资料,一线大厂面试经验分享等,欢迎 Star 和 完善。

一、垃圾分类

还记得去年,上海如火如荼进行的垃圾分类政策吗?

2020年5月1日起,北京也开始实行「垃圾分类」了!

北京的垃圾分类标准与上海略有差别,垃圾分为厨余垃圾、可回收物、有害垃圾和其他垃圾四大类,分别对应四种不同颜色的垃圾桶,即绿色、蓝色、红色和灰色。

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

继上海之后,北京也迈入了“垃圾强制分类时代”。

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

垃圾分类,最变态的地方还是日本。

日本把垃圾分为资源、可燃、不可燃、危险、塑料、金属和粗大,这 7 大类垃圾。

并规定了回收站每天允许回收的垃圾种类,比如如周一收资源的,周二收塑料的。居民要在指定时间、指定地点丢垃圾。像桌子衣柜这些大件垃圾还要交钱才能扔。

敢乱扔垃圾的垃圾最多还可能吃 5 年牢饭并罚上 1000 万日元

不过,有 24 小时在线发牌打理家务的家庭主妇,人家可以每天花上半小时去搞垃圾分类,然后照样有时间去刷刷抖音,打打农药,看看小电影啥的。

现在,中国一线城市的“社畜”们,干着 996 的活,又要操起“日本主妇的心”。

一家一个码农就够惨了,一家双码农那就是「惨上加惨」,下班一个比一个晚。

上海实行「垃圾分类」已经快一年了,不知近况如何?

疫情前,曾去上海玩过一次,一个很明显的感受是垃圾分类确实是井然有序地进行着,租住的民宿摆放了 4 个垃圾桶,吃剩的垃圾都需要动动脑子才知道怎么丢。

不过,也在小区附近看到,分类垃圾桶旁,随意堆放的未分类的垃圾。

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

北京通知开始实施「垃圾分类」快一个月了,我所居住的小区在市中心,小区内还没有见到分类垃圾箱,倒是公告张贴了很多,应该还处于宣传阶段。

不过公司里,倒是开始垃圾分类了,看来是从企业开始行动,然后再到个人。

随着政策的完善,支持力度的加大,不知若干年后,是否会出现一家提供垃圾分类服务的家政公司?

二、垃圾分类助手

吐槽归吐槽,人们总归要随着时代的发展而顺势前行。

好在,一些 APP 或者小程序已经为我们准备好了查询工具。

查询方式无非三种形式:文字、语音、图片。

好多家,都有类似的产品。

你可以查询 「996加班掉落的头发是什么垃圾」,也可以查询「夜宵必备的小龙虾是什么垃圾」。

比如,腾讯有个微信小程序,叫「垃圾分类精灵」;

百度 APP 相机识别入口有个 tag ,叫「识垃圾」。

支付宝有个小程序,叫「垃圾分类指南」。

都支持文字、语音、图片的垃圾分类识别。

上海刚实行垃圾分类的时候,淘宝的「拍立淘」也有垃圾分类识别入口,不过现在貌似已经下线了。

垃圾分类哪家强,体验一下就知道了。

三、垃圾分类技术

垃圾识别背后的技术是什么呢?

文字和语音的都相对简单,文本匹配即可,语音多了一个音频转文本的步骤。

基于图片的垃圾识别就要难不少。

比如,卫生纸你可以弄成各种形状,团成一团,或者撕成一条一条。

甚至,可以把蛋糕恶趣味地做成「便便」的样子。

让算法通过图片去识别这些东西,显然有些难为算法。

目前,使用深度学习分类算法去识别垃圾种类,还是比较难做好的。

一般都是采用多级分类模型或检索,搭建的超大分类网络,比如 1 万多类物体识别,甚至 10 万。

然后根据类别标签做映射,映射到最终的垃圾类别。

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

底层技术实现,其实还是多分类。

垃圾分类不同于通用的图像识别,通用图像识别的「鱼」,可能是一条在水中自由自在嬉戏的金鱼。

而垃圾分类识别的「鱼」,则很可能是一个躺在餐盘里仅剩躯干骨的鱼骨头。

弄个合适的数据集,也是一门技术活

数据集获取一般可以通过以下 3 个渠道:

  • 写爬虫,爬各大网站的图片数据,然后使用自己的接口清洗或者人工标注;
  • 将需求提交给数据标注团队,花经费标注数据。

前两个是要么得有技术、要么得有钱。

  • 最后一个方法,就得碰运气了。翻论文,找公开数据集,或者去 AI 比赛网站或者 AI 开放平台碰碰运气。

比赛,比如可以去 Kaggle 搜一搜数据集。

URL:https://www.kaggle.com/

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

AI 开放平台,可以去 AI Studio看看。

URL:https://aistudio.baidu.com/aistudio/datasetoverview

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

在 AI Studio 我搜索到了不错的垃圾分类数据集。

一共 56528 张图片,214 类,总共 7.13 GB。

URL:https://aistudio.baidu.com/aistudio/datasetdetail/30982

瞧,运气不错,找到了一个不错的数据集。

下载速度也很给力,10 MB/s。

本文使用这个数据集,训练一个简单的垃圾分类模型。

四、数据处理

垃圾数据都放在了名字为「垃圾图片库」的文件夹里。

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

首先,我们需要写个脚本根据文件夹名,生成对应的标签文件(dir_label.txt)。

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

前面是小分类标签,后面是大分类标签。

然后再将数据集分为训练集(train.txt)、验证集(val.txt)、测试集(test.txt)。

训练集和验证集用于训练模型,测试集用于验收最终模型效果。

此外,在使用图片训练之前还需要检查下图片质量,使用 PIL 的 Image 读取,捕获 Error 和 Warning 异常,对有问题的图片直接删除即可。

写个脚本生成三个 txt 文件,训练集 48045 张,验证集 5652 张,测试集 2826 张。

脚本很简单,代码就不贴了,直接提供处理好的文件。

处理好的四个 txt 文件可以直接下载。

下载地址:点击查看

将四个 txt 文件放到和「垃圾图片库」的相同目录下即可。

有了前几篇教程的基础,写个数据读取的代码应该很轻松吧。

编写 dataset.py 读取数据,看一下效果。

读取 train.txt 文件,加载数据。数据预处理,是将图片等比例填充到尺寸为 280 * 280 的纯黑色图片上,然后再 resize 到 224 * 224 的尺寸。

这是图片分类里,很常规的一种预处理方法。

此外,针对训练集,使用 pytorch 的 transforms 添加了水平翻转和垂直翻转的随机操作,这也是很常见的一种数据增强方法。

运行结果:

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

OK,搞定!开始写训练代码!

五、垃圾分类初体验

我们使用一个常规的网络 ResNet50 ,这是一个非常常见的提取特征的网络结构。

整个训练过程也很简单,训练步骤不清楚的,可以看我上两篇教程:

Pytorch深度学习实战教程(三):UNet模型训练

Pytorch深度学习实战教程(四):必知必会的炼丹法宝

创建 train.py 文件,编写如下代码:

代码并不复杂,网络结构直接使 torchvision 的 ResNet50 模型,并且采用 ResNet50 的预训练模型。算法采用交叉熵损失函数,优化器选择 Adam,并采用 StepLR 进行学习率衰减。

保存模型的策略是选择在验证集准确率最高的模型。

batch size 设为 64,GPU 显存大约占 8G,显存不够的,可以调整 batch size 大小。

模型训练完成,就可以写测试代码了,看下效果吧!

创建 infer.py 文件,编写如下代码:

这里需要注意的是,DataLoader 读取的数据需要进行通道转换,才能显示。

预测结果:

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

怎么样?还算简单吧?

赶快训练一个自己「垃圾分类器」体验一下吧

六、总结

  • 本文从实战出发,讲解了怎么训练一个自己的「垃圾分类器」。
  • baseline 已经提供,提升精度,就是一些细节上的优化了。
  • 训练好的模型,关注微信公众号,后台回复「垃圾分类」获取。

PS:文中出现的所有代码,均可在我的 github 上下载,欢迎 Follow、Star:点击查看

Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?

weinxin
微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。
Jack Cui

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: