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

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

学嘛了,完全是懵懵懂懂的,跑了一篇流程,收获就是知道了计算机视觉 识别图片的 过程,

使用 全卷积化 网络的 深度学习网络模型,来对图片进行分类和识别

相关推荐
jzwei023几秒前
Transformer Decoder-Only 算力FLOPs估计
人工智能·深度学习·transformer
lilye666 分钟前
精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联
大数据·人工智能·数据分析
丰锋ff12 分钟前
操作系统学习笔记第3章 内存管理(灰灰题库)
笔记·学习
weixin_4082663430 分钟前
深度学习-分布式训练机制
人工智能·分布式·深度学习
struggle202541 分钟前
AgenticSeek开源的完全本地的 Manus AI。无需 API,享受一个自主代理,它可以思考、浏览 Web 和编码,只需支付电费。
人工智能·开源·自动化
Panesle42 分钟前
阿里开源通义万相Wan2.1-VACE-14B:用于视频创建和编辑的一体化模型
人工智能·开源·大模型·文生视频·多模态·生成模型
jackson凌1 小时前
【Java学习笔记】equals方法
java·笔记·学习
虾球xz1 小时前
游戏引擎学习第282天:Z轴移动与摄像机运动
c++·学习·游戏引擎
QQ2740287561 小时前
Kite AI 自动机器人部署教程
linux·运维·服务器·人工智能·机器人·web3
.小墨迹1 小时前
Apollo学习——planning模块(3)之planning_base
linux·开发语言·c++·学习·自动驾驶