《昇思 25 天学习打卡营第 10 天 | ResNet50 迁移学习 》

发布于:2024-07-08 ⋅ 阅读:(40) ⋅ 点赞:(0)

《昇思 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 的狼和狗的图像数据集。

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来加载数据,并进行一些图像增强操作,如随机裁剪、水平翻转等。

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 作为基础模型,并对其进行调整以适应我们的分类任务。

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)
  • 固定特征进行训练
  • 训练和评估
  • 可视化模型预测

学嘛了,完全是懵懵懂懂的,跑了一篇流程,收获就是知道了计算机视觉 识别图片的 过程,
使用 全卷积化 网络的 深度学习网络模型,来对图片进行分类和识别


网站公告

今日签到

点亮在社区的每一天
去签到