基于深度学习的垃圾分类识别系统

编程知识 更新时间:2023-05-02 21:48:40

文章目录

  • 前言
  • 一、环境准备
    • 1.准备python、pycharm
    • 2.准备pytorch
  • 二、构建数据集
    • 1.准备图像
    • 2.图像标签
  • 三、代码实现
  • 四、训练结果
  • 五、系统测试

前言

根据一些资料和日常生活经验,一般情况下将日常垃圾分类为:厨余垃圾、其他垃圾、有害垃圾和可回收垃圾。

该课题研究的垃圾自动分类系统能够帮助人们进行垃圾分类,防止因错误投放造成的污染,并且减少了后期垃圾分拣的工作量,从而缩短了整个处理过程所需要的时间,并且加强了居民内心深处垃圾分类的意识,对保护环境有着重要意义,进一步推动了高质量的绿色城市的建设。


一、环境准备

1.准备python、pycharm

             去官网下载对应的版本即可

2.准备pytorch

  (1)安装anaconda

       打开Anaconda Prompt,看到第一行左面有(base)即安装成功。如下图所示:

             

       使用conda指令创建一个虚拟环境python3.5版本,输入命令:conda create-n python=3.5之后,弹出提示,输入y,即可安装;

       输入指令:conda activate pytorch进入pytorch环境,准备安装pytorch。如下图所示,当左面的base变成pytorch后,说明已经进入了pytorch环境。

            

   (2)安装pytorch

       打开官网找到推荐的版本,在命令行中输入对应命令,等待安装。最后检查是否安装成功,输入python,之后输入import torch,如果没有报错,则安装结束,如下图所示:

           

  

二、构建数据集

1.准备图像

     

可回收垃圾189种39143张图片
厨余垃圾100种20123张图片
其他垃圾44种4531张图片
有害垃圾10种1686张图片

        可回收垃圾包含有189个种类,有39143个训练项目;厨余垃圾有100个种类,包括20123个训练项目;其他垃圾有44个种类的垃圾,包含4531个项目;而有害垃圾有10个种类的垃圾,包含1686个训练项目。

2.图像标签

 三、代码实现

           本文选择了ResNet网络结构,基于ResNet我们选择了ResNet50模型

Resnet模型代码示例:

class ResNet18(nn.Module):

    def __init__(self, num_class):
        super(ResNet18, self).__init__()

        self.conv1 = nn.Sequential(
            nn.Conv2d(3, 16, kernel_size=3, stride=3, padding=0),
            nn.BatchNorm2d(16)
        )
        # followed 4 blocks
        # [b, 16, h, w] => [b, 32, h ,w]
        self.blk1 = ResBlk(16, 32, stride=3)
        # [b, 32, h, w] => [b, 64, h, w]
        self.blk2 = ResBlk(32, 64, stride=3)
        # # [b, 64, h, w] => [b, 128, h, w]
        self.blk3 = ResBlk(64, 128, stride=2)
        # # [b, 128, h, w] => [b, 256, h, w]
        self.blk4 = ResBlk(128, 256, stride=2)

        # [b, 256, 7, 7]
        self.outlayer = nn.Linear(256*3*3, num_class)

    def forward(self, x):
        """
        :param x:
        :return:
        """
        x = F.relu(self.conv1(x))

        # [b, 64, h, w] => [b, 1024, h, w]
        x = self.blk1(x)
        x = self.blk2(x)
        x = self.blk3(x)
        x = self.blk4(x)

        # print(x.shape)
        x = x.view(x.size(0), -1)
        x = self.outlayer(x)


        return x

训练网络train文件代码如下:

batchsz = 32
lr = 1e-4
epochs =1

device = torch.device('cpu')##cuda 改 cpu
torch.manual_seed(1234)

train_db = Data('train_data', 224, mode='train')
val_db = Data('train_data', 224, mode='val')
test_db = Data('train_data', 224, mode='test')
train_loader = DataLoader(train_db, batch_size=batchsz, shuffle=True,
                          num_workers=4)
val_loader = DataLoader(val_db, batch_size=batchsz, num_workers=4)
test_loader = DataLoader(test_db, batch_size=batchsz, num_workers=4)

viz = visdom.Visdom()


def evalute(model, loader):
    model.eval()

    correct = 0
    total = len(loader.dataset)

    for x, y in loader:
        x, y = x.to(device), y.to(device)
        with torch.no_grad():
            logits = model(x)
            pred = logits.argmax(dim=1)
        correct += torch.eq(pred, y).sum().float().item()

    return correct / total

四、训练结果

运行train文件后,我们可以看到经过数十次的迭代之后,最终网络模型的准确率还是比较可观的,最好的批次是第十次,其准确率达到98%,但是测试的最终的准确率大约为96.7%,其运行界面如下:

        

 与此同时生成了可视化结果图,结果图显示,随着迭代次数的不断增加,损失函数值逐渐变小并趋于0,并且训练数据的准确性逐渐达到1,具体结果图如下所示:

       

 系统整体准确率很高,实际应用性很强

五、系统测试

测试的代码如下所示:

def prediect(img_path):
    net=torch.load('model.pkl')
    net=net.to(device)
    torch.no_grad()
    img=Image.open(img_path)
    img=transform(img).unsqueeze(0)
    img_ = img.to(device)
    outputs = net(img_)
    _, predicted = torch.max(outputs, 1)
    # print(predicted)
    print(classes[predicted[0]])

if __name__ == '__main__':
    prediect('./test/img_除湿袋_9.jpeg')

将数据集中一部分图片取出来作为测试的数据集,避免训练网络的数据和测试的数据重复的情况,确保了系统的实用性。将测试的图片导入其中,可以看到除湿袋被定义为其他垃圾,经查证后结果正确,结果图如下所示:

       


 

总结

本研究系统最终的准确率达到96%,经测试系统准确率还可以,仅供大家学习使用。

更多推荐

基于深度学习的垃圾分类识别系统

本文发布于:2023-04-28 22:13:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/5652d1bc4d570eb227091978e4a53851.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:识别系统   深度   垃圾

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 109534文章数
  • 27817阅读数
  • 0评论数