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

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

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

相关推荐
HABuo6 分钟前
【数据结构与算法】合并链表、链表分割、链表回文结构
c语言·开发语言·数据结构·c++·学习·算法·链表
AI完全体28 分钟前
【AI日记】24.11.25 学习谷歌数据分析初级课程-第6课
学习·数据分析
huaqianzkh1 小时前
人工智能大趋势下软件开发的未来
人工智能
码到成龚1 小时前
《数字图像处理基础》学习06-图像几何变换之最邻近插值法缩小图像
图像处理·学习
fa_lsyk1 小时前
mysql window安装(学习使用)
学习·mysql·adb
熬夜的猪2 小时前
现代安全密码哈希算法
java·学习·算法·安全·哈希算法
kuiini2 小时前
C 语言学习-06【指针】
c语言·学习
酱香编程,风雨兼程2 小时前
深度学习——多层感知机的从零开始实现和简洁实现
人工智能·深度学习
King.6242 小时前
sql工具!好用!爱用!
大数据·数据库·人工智能·sql·学习
GOTXX2 小时前
基于深度学习的手势识别算法
人工智能·深度学习·算法·机器学习·数据挖掘·卷积神经网络