0
点赞
收藏
分享

微信扫一扫

【深度学习】垃圾分类日志(一)

文章目录


model_name = ‘rexnet_2_0_imagenet’

训练方式:对飞桨上现有的预训练模型进行迁移学习。

分类模式:4 类,包括 recyclable(可回收垃圾),other(干垃圾),kitchen(厨余垃圾),harmful(有害垃圾)。

1、分类中的问题

错误分类例子

毛巾:recyclable
一包白砂糖:harmful
纸巾:recyclable
乒乓球:kitchen(曾在115分类下被认作鸡蛋)
鞋子:harmful,recyclable
口罩:recyclable
胶带:recyclable
石头:kitchen
牙膏:harmful
拖布:recyclable

常出现的问题

1、经常把有包装,或者写有字的东西就判断为 harmful。例如:包装白砂糖,零食,易拉罐装八宝粥,书籍,桶装方便面······

2、感觉笔不太好分,例如有墨的笔需要二次分类,直接分应作为干垃圾。

3、同样是纺织品,拖布、抹布因为脏了,应该是干垃圾;而衣服却是可回收垃圾。

4、似乎总是不认识纸巾。

分类效果

请添加图片描述

2、模型问题分析

当前模型问题

可以在训练集上很好得收敛,准确率在 95% 以上;在验证集的准确率也在 90% 以上;而自己拍摄的照片,准确率却只有 50%~60%。

原因猜想

1、图片拍摄条件不同。 数据集中的图片可能是来自集中拍摄,使用某些特定的设备,且可能经过某些预处理,与我手机拍摄后直接上传的条件不同,图片中的噪音就不同,而模型没有处理这种差别的能力。
2、数据集的垃圾覆盖不充分。我验证集是从训练集中随机抽样得到,虽然验证机未用于模型训练,但它与训练集中的垃圾分布相似,验证集准确率可以较高。而我新拍摄的垃圾可能让模型感到很意外。

3、改进设想

针对图片拍摄条件,可在训练时进行数据增强,包括:裁剪、擦除、旋转、翻转、色调、对比度、亮度、噪声。

针对垃圾覆盖不充分,可以多找一些数据集,一起训练同一个模型。

4、还要做的事情

1、怎么部署。 程序最终要在硬件上跑,应当考虑移植和适配的问题。
2、再看一些别人是怎么做垃圾分类的。

来自包paddlehub.vision.transforms
1、RandomHorizontalFlip: 随机水平翻转
2、RandomVerticalFlip:随机垂直翻转
3、ResizeStepScaling:以随机比例调整图像大小
4、RandomBlur:随机模糊
5、RandomRotation:随机角度旋转
6、RandomDistort:随机调整亮度、对比度、饱和度、色调

另外,看到 paddle.vision.transforms 里有个随机裁剪,但 paddlehub.vision.transfroms 里没有,使用可能不太方便。(后面发现 paddle 的可以直接用到 paddlehub 里)

处理效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

图像预处理代码

import paddlehub.vision.transforms as T
import paddle.vision.transforms as pvt
import matplotlib.pyplot as plt


# ----配置项----
# 使用时换上自己的图片路径
im_path = 'D:\code_all\code_python\PycharmProject1\mydata\myGarbages\SetGarbage40\\26.jpg'

# 预处理效果设置
transforms = T.Compose(
    [
        T.RandomRotation(),
        T.Resize([300, 300]),
        # T.CenterCrop(224),
        pvt.RandomCrop(224),
        T.RandomHorizontalFlip(),
        T.RandomVerticalFlip(),
        T.RandomBlur(),
        T.RandomDistort(),
        T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
    ],
    to_rgb=True
)

# 输出原图
im1 = plt.imread(im_path)
plt.subplot(3, 6, 1)
plt.imshow(im1)

# 输出变换后的图像
for i in range(17):
    im = transforms(im_path)
    im = (im.transpose((1, 2, 0)) + 1.) / 2
    plt.subplot(3, 6, i+2)
    plt.imshow(im)
plt.show()

训练加处理后的预测效果

请添加图片描述

前面添加的随机预处理并没有改善模型的效果,有可能对预处理继续进行一些更精细化的调整会取得一些效果,但我打算先试试扩展数据集。

下载的单个数据集可能垃圾种类的覆盖不够充分,以至于我给它一些 ”新奇的垃圾“时,它就不认识了。前面模型经常对口罩识别错误,那我就多给它看看口罩试试。

在这里插入图片描述


举报

相关推荐

0 条评论