目录
1. 实验目的与内容
1.1 实验目的
本实验使用MindSpore框架进行AI模型的训练与部署,通过训练一个基于MobileNet V2架构的深度学习模型,实现垃圾分类。具体目标包括:
1. 下载并预处理垃圾分类数据集。
2. 利用预训练的MobileNet V2模型进行微调,训练出一个高精度的垃圾分类模型。
3. 实现实时垃圾分类的功能,并对模型的性能进行评估和优化。
1.2 实验内容
1. 数据准备与加载:
下载并解压垃圾分类数据集。
对数据集进行图像增强和预处理操作,创建训练集和验证集。
2. 模型训练:
下载预训练的MobileNet V2模型。
利用预训练模型进行微调,调整模型参数以适应垃圾分类任务。
训练模型,并使用验证集评估模型性能,保存验证精度最高的模型。
3. 模型可视化:
使用训练好的模型对输入图像进行预测,并将预测结果可视化展示。
4. 性能评估与优化:
评估模型在验证集上的性能,包括准确率和损失。
对模型进行调参和优化,提高模型的精度和推理速度。
1.3 研究背景与意义
垃圾分类是当前社会面临的一个重要环境保护问题。通过对垃圾进行分类处理,可以有效提高资源的回收利用率,减少环境污染。然而,人工进行垃圾分类不仅效率低下,而且容易出错。为了解决这一问题,利用深度学习技术开发自动化的垃圾分类系统具有重要的现实意义。
近年来,随着深度学习技术的发展和硬件计算能力的提升,基于图像分类的AI模型在实际应用中表现出色。MobileNet V2作为一种轻量级卷积神经网络,因其高效的计算能力和较低的资源消耗,特别适用于移动端和嵌入式设备。通过MobileNet V2的垃圾分类模型,可以实现高效、便捷的实时垃圾分类,助力环保事业的发展。
2. 算法概述、流程、功能模块
2.1 准备数据
下载数据集: 垃圾分类数据集包含6个类别:纸板、玻璃、金属、纸、塑料、垃圾,我们下载并解压数据集到指定路径下。
datasets
└── Garbage_Data
├── infer
│ ├── cardboard1.jpg
│ ├── glass1.jpg
│ ├── metal1.jpg
│ ├── paper1.jpg
│ ├── plastic1.jpg
│ └── trash1.jpg
├── train
│ ├── cardboard
│ ├── glass
│ ├── metal
│ ├── paper
│ ├── plastic
│ └── trash
└── val
├── cardboard
├── glass
├── metal
├── paper
├── plastic
└── trash
加载数据集: 该create_dataset函数从指定路径加载数据集,如果train设置为,则应用数据增强True,它规范化图像并将其转换为所需的格式。
def create_dataset(path, batch_size=10, train=True, image_size=224):
dataset = ds.ImageFolderDataset(path, num_parallel_workers=8, class_indexing={"cardboard": 0, "glass": 1, "metal": 2, "paper": 3, "plastic": 4, "trash": 5})
# 图像增强操作
mean = [0.485 * 255, 0.456 * 255, 0.406 * 255]
std = [0.229 * 255, 0.224 * 255, 0.225 * 255]
if train:
trans = [
vision.RandomCropDecodeResize(image_size, scale=(0.08, 1.0), ratio=(0.75, 1.333)),
vision.RandomHorizontalFlip(prob=0.5),
vision.Normalize(mean=mean, std=std),
vision.HWC2CHW()
]
else:
trans = [
vision.Decode(),
vision.Resize(256),
vision.CenterCrop(image_size),
vision.Normalize(mean=mean, std=std),
vision.HWC2CHW()
]
dataset = dataset.map(operations=trans, input_columns="image", num_parallel_workers=8)
# 设置batch_size的大小,若最后一次抓取的样本数小于batch_size,则丢弃
dataset = dataset.batch(batch_size, drop_remainder=True)
return dataset
# 加载训练数据集和验证数据集
train_path = "Garbage_Data/train"
dataset_train = create_dataset(train_path, train=True)
val_path = "Garbage_Data/val"
dataset_val = create_dataset(val_path, train=False)
2.2 配置网络
下载预训练的MobileNet V2模型,并进行微调。设置网络超参数,包括学习率、批次大小、训练轮数等。
from mindspore import nn, load_checkpoint, load_param_into_net
from mindspore.train import Model
from mindspore import context
# 设置执行环境
context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
# 加载预训练的MobileNetV2模型
from mindvision.classification.models import mobilenet_v2
network = mobilenet_v2(num_classes=6, pretrained=True)
# 修改最后的全连接层
network.clas