《昇思 25 天学习打卡营第 10 天 | ResNet50 迁移学习 》
活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp
签名:Sam9029
使用迁移学习进行狼狗图像分类
简介
在机器学习和深度学习中,我们经常面临数据不足的问题。
迁移学习是一种解决这一问题的有效方法。
本章节将通过一个简单的案例,介绍如何使用迁移学习对狼和狗的图像进行分类。
迁移学习概念
迁移学习是一种学习方式,它允许我们将在一个大型数据集(如 ImageNet)上预训练的模型应用于一个新的、通常较小的数据集。这样,我们可以利用预训练模型已经学到的特征,而不必从头开始训练整个网络。
使用模型 ResNet50
- ResNet50 是一种深度卷积神经网络(CNN)架构, 由微软研究院的 Kaiming He 等人在 2015 年提出,并在多个视觉识别任务中取得了突破性的性能。
ResNet50 的应用:
图像分类:ResNet50 可以用于将图像分类到 1000 个类别中,这是 ImageNet 数据集的标准任务。
物体检测:通过将 ResNet50 与区域建议网络(Region Proposal Networks, RPN)结合,可以用于物体检测任务。
语义分割:ResNet50 也可以用于像素级的图像理解,即语义分割,其中每个像素都被分类到相应的类别。
数据准备
首先,我们需要下载并准备数据集。在这个案例中,我们使用的是来自 ImageNet 的狼和狗的图像数据集。
python
from download import download
dataset_url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/intermediate/Canidae_data.zip"
download(dataset_url, "./datasets-Canidae", kind="zip", replace=True)
加载和增强数据集
使用 MindSpore 的数据集加载接口ImageFolderDataset
来加载数据,并进行一些图像增强操作,如随机裁剪、水平翻转等。
python
import mindspore.dataset as ds
import mindspore.dataset.vision.c_transforms as vision
def create_dataset_canidae(dataset_path, usage):
"""数据加载"""
data_set = ds.ImageFolderDataset(dataset_path,
num_parallel_workers=workers,
shuffle=True,)
# 数据增强操作
mean = [0.485 * 255, 0.456 * 255, 0.406 * 255]
std = [0.229 * 255, 0.224 * 255, 0.225 * 255]
scale = 32
if usage == "train":
# Define map operations for training dataset
trans = [
vision.RandomCropDecodeResize(size=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:
# Define map operations for inference dataset
trans = [
vision.Decode(),
vision.Resize(image_size + scale),
vision.CenterCrop(image_size),
vision.Normalize(mean=mean, std=std),
vision.HWC2CHW()
]
# other code ...
训练模型&&训练过程
我们选择 ResNet50 作为基础模型,并对其进行调整以适应我们的分类任务。
python
def resnet50(num_classes: int = 1000, pretrained: bool = False):
"ResNet50模型"
resnet50_url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/models/application/resnet50_224_new.ckpt"
resnet50_ckpt = "./LoadPretrainedModel/resnet50_224_new.ckpt"
return _resnet(resnet50_url, ResidualBlock, [3, 4, 6, 3], num_classes,
pretrained, resnet50_ckpt, 2048)
- 固定特征进行训练
- 训练和评估
- 可视化模型预测
学嘛了,完全是懵懵懂懂的,跑了一篇流程,收获就是知道了计算机视觉 识别图片的 过程,
使用 全卷积化 网络的 深度学习网络模型,来对图片进行分类和识别