垃圾分类对比分析实验过程及结果

2022-05-31

垃圾分类对比分析实验过程及结果

设计了三个实验进行对比实验分析。
分别是:

  • 实验一:使用金字塔网络PyramidNet实现垃圾分类实验;
  • 实验二:使用ECA-ResNet50系列网络进行垃圾分类实验;
  • 实验三:使用SRM,GE,SE和ResNet进行垃圾分类实验;

均采用垃圾60分类数据集进行对比验证,其中还采用垃圾60分类0等数据集进行基线验证。实验均采用VisualDL进行训练和验证以及测试过程中的acc和loss的可视化。

结论:

实验一:

    • 在性能超越resnet50的情况下,模型反而具有少的多的参数量。

实验二:

    • 添加了ECA模块后,原有的ResNet网络的性能有了可观的提高。
    • Paddle自带的SE网络性能很好,可见Paddle对此做了很多优化。
    • 用ECA模块替换SE网络中的SE模块后,虽然最高的验证准确率略低一点,但是从图中可以看出不管是准确率还是loss都在整体上 优于SE网络。
    • ECA-NET可以认为是在SE网络上的改进网络,只考虑了通道注意力,但却突出的体现了简约但不简单的优点。

实验三:

    • SRM-NET虽然是提取风格权重,但本质是一种注意力机制,所以可以用在通用计算机视觉任务上,比如分类。
    • 作为含有注意力机制的一种卷积网络结构,SRM-NET可以作为一种backbone的选择用来替代ResNet。
    • 本实验还比较了SRM和其它两种注意力网络GE,SE及原生ResNet的训练验证过程,可以看出在分类任务上,SRM也是其中表现最好的一种网络。

具体实验

实验一:使用金字塔网络PyramidNet实现垃圾分类实验

import os
import shutil
from config import config_parameters

train_dir = config_parameters['train_image_dir']
eval_dir = config_parameters['eval_image_dir']
paths = os.listdir('work/dataset')

if not os.path.exists(train_dir):
    os.mkdir(train_dir)
if not os.path.exists(eval_dir):
    os.mkdir(eval_dir)

for path in paths:
    imgs_dir = os.listdir(os.path.join('work/dataset', path))
    target_train_dir = os.path.join(train_dir,path)
    target_eval_dir = os.path.join(eval_dir,path)
    if not os.path.exists(target_train_dir):
        os.mkdir(target_train_dir)
    if not os.path.exists(target_eval_dir):
        os.mkdir(target_eval_dir)
    for i in range(len(imgs_dir)):
        if ' ' in imgs_dir[i]:
            new_name = imgs_dir[i].replace(' ', '_')
        else:
            new_name = imgs_dir[i]
        target_train_path = os.path.join(target_train_dir, new_name)
        target_eval_path = os.path.join(target_eval_dir, new_name)     
        if i % 8 == 0:
            shutil.copyfile(os.path.join(os.path.join('work/dataset', path), imgs_dir[i]), target_eval_path)
        else:
            shutil.copyfile(os.path.join(os.path.join('work/dataset', path), imgs_dir[i]), target_train_path)

- 使用PyramidNet_bottleneck对垃圾60分类的训练验证图示

垃圾60分类训练验证过程

- 使用PyramidNet_bottleneck对垃圾60分类的训练验证图示

使用PyramidNet_bottleneck对垃圾60分类的训练验证图示

- 使用PyramidNet的训练验证图示

使用PyramidNet的训练验证图示

- 使用resnet50网络进行垃圾分类的训练并验证

使用resnet50网络进行垃圾分类的训练并验证

- 使用PyramidNet和ResNet的训练验证比较图示


使用PyramidNet-32(alpha=300 without bottleneck)和PyramidNet-32(alpha=300 with bottleneck)相较于resnet50模型具有更高的准确率,却具有少的多的参数。其中,resnet50的模型大小有141.5M,而PyramidNet-32(alpha=300 without bottleneck)的模型大小有72.6M,PyramidNet-32(alpha=300 with bottleneck)的模型大小仅有48.9M。

- 实验总结:

本实验使用金字塔网络对动物数据集进行了训练验证。从本实验可以看出在性能超越resnet50的情况下,模型反而具有少的多的参数量。

实验二:使用ECA-ResNet50系列网络进行垃圾分类

- 在ResNet50网络上添加ECA模块:

使用ECA-ResNet50的训练验证图示

- 经过优化的SE网络SE_ResNet50_vd:

使用SE-ResNet50_vd的训练验证图示

- 在上面SE网络的基础上,用ECA模块替换SE模块,使用ECA-ResNet50_vd网络:

使用ECA-ResNet50_vd的训练验证图示

- ECA-ResNet50系列网络比较:

使用的四种网络的训练验证比较图示

通过以上试验,可以看出:

  1. 添加了ECA模块后,原有的ResNet网络的性能有了可观的提高。
  2. Paddle自带的SE网络性能很好,可见Paddle对此做了很多优化。
  3. 用ECA模块替换SE网络中的SE模块后,虽然最高的验证准确率略低一点,但是从图中可以看出不管是准确率还是loss都在整体上 优于SE网络。
  4. 在模型大小方面,生成的模型大小比较可以看出ECA模块有着最高的性价比。

- 实验总结:

  • 本实验对含有注意力机制的卷积网络ECA-NET进行了复现。
  • ECA-NET可以认为是在SE网络上的改进网络,只考虑了通道注意力,但却突出的体现了简约但不简单的优点。

实验三:使用SRM,GE,SE和ResNet进行垃圾分类

- 使用SRM-ResNet50网络进行垃圾分类的训练并验证:

使用SRM的训练验证比较图示

- 使用GE-ResNet50网络进行垃圾分类的训练并验证:

使用GE的训练验证比较图示

- 使用SE-ResNet50网络进行垃圾分类的训练并验证:

使用SE的训练验证比较图示

- 使用SRM,GE,SE和ResNet的验证比较实验比较:

使用SRM,GE,SE和ResNet的验证比较图示

- 实验总结

  1. 本实验对含有注意力机制的风格校正卷积网络SRM-NET进行了复现,并在垃圾分类数据集上进行了训练和验证。
  2. SRM-NET虽然是提取风格权重,但本质是一种注意力机制,所以可以用在通用计算机视觉任务上,比如分类。
  3. 作为含有注意力机制的一种卷积网络结构,SRM-NET可以作为一种backbone的选择用来替代ResNet。
  4. 本实验还比较了SRM和其它两种注意力网络GE,SE及原生ResNet的训练验证过程,可以看出在分类任务上,SRM也是其中表现最好的一种网络。