模型优化和迁移学习

数据获取方法

  • 三大要素:数据、算法(神经网络)、算力

数据集分类

  • 分类数据:图像分类,一般以目录的形式分开
  • 标注数据:目标检测和图像分割,是有标注数据的

开源数据集

免费,成本低

  1. PyTorch: Datasets — Torchvision 0.20 documentation

  2. 开源数据集imagenet:ImageNet

  3. Hugging Face数据集:https://huggingface.co/datasets

  4. kaggle数据集下载网址:https://www.kaggle.com/datasets

  5. 各种网站:

    Computer Vision DatasetsDownload free, open source datasets for computer vision machine learning models in a variety of formats.icon-default.png?t=O83Ahttps://public.roboflow.com/

    https://zhuanlan.zhihu.com/p/648720525icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/648720525

    极市开发者平台-计算机视觉算法开发落地平台-极市科技极市开发者平台(Extreme Mart)是极视角科技旗下AI开发者生态,为计算机视觉开发者提供一站式算法开发落地平台,同时提供大咖技术分享、社区交流、竞赛活动、数据集下载、CV课程等丰富的内容与服务。icon-default.png?t=O83Ahttps://www.cvmart.net/dataSets

外包平台

  • 效果好,成本高,外包平台(Amazon Mechanical Turk,阿里众包,百度数据众包,京东微工等)

自己采集和标注

  • 质量高、效率低、成本高。
  • labelimg、labelme工具的使用。
pip install -i https://mirrors.aliyun.com/pypi/simple/ labelimg
pip install -i https://mirrors.aliyun.com/pypi/simple/ label
  • 在安装工具环境下的命令行打开

  • 图片标注

  • 标注保存记录

  • labelme使用大致同理,但标注方式不一样(点框),保存格式不一样,以json格式进行保存

通过网络爬虫获取

爬虫工具或爬虫代码

数据本地化

  • 使用公开数据集时,会自动保存到本地。如果已下载,就不会重复下载。如果需要以图片的形式保存到本地以方便观察和重新处理,可以按照如下方式处理。

图片本地化

使用一下代码保存图片到本地

dir = os.path.dirname(__file__)
def save2local():
    trainimgsdir = os.path.join(dir, "MNIST/trainimgs")
    testimgsdir = os.path.join(dir, "MNIST/testimgs")
    if not os.path.exists(trainimgsdir):
        os.makedirs(trainimgsdir)
    if not os.path.exists(testimgsdir):
        os.makedirs(testimgsdir)
​
    trainset = torchvision.datasets.MNIST(
        root=datapath,
        train=True,
        download=True,
        transform=transforms.Compose([transforms.ToTensor()]),
    )
    for idx, (img, label) in enumerate(trainset):
        labdir = os.path.join(trainimgsdir, str(label))
        os.makedirs(labdir, exist_ok=True)
        pilimg = transforms.ToPILImage()(img)
        # 保存成单通道的灰度图
        pilimg = pilimg.convert("L")
        pilimg.save(os.path.join(labdir, f"{idx}.png"))
​
    # 加载测试集
    testset = torchvision.datasets.MNIST(
        root=datapath,
        train=False,
        download=True,
        transform=transforms.Compose([transforms.ToTensor()]),
    )
    for idx, (img, label) in enumerate(testset):
        labdir = os.path.join(testimgsdir, str(label))
        os.makedirs(labdir, exist_ok=True)
        pilimg = transforms.ToPILImage()(img)
        # 保存成单通道的灰度图
        pilimg = pilimg.convert("L")
        # 保存中不能有中文路径
        pilimg.save(os.path.join(labdir, f"{idx}.png"))
​
    print("所有图片保存成功~~")

加载图片数据集

直接下载的图片文件目录也可以直接使用

trainpath = os.path.join(dir, "MNIST/trainimgs")
trainset = torchvision.datasets.ImageFolder(root=trainpath, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)

本地图片序列化

  • 把本地图片存储为 pickle序列化格式,然后通过 tar格式的形式分发。
  • Pickle 和 Tar 是两种不同的文件格式,分别用于不同的目的。

Pickle 格式

  • Pickle 是 Python 内置的模块,它允许你序列化和反序列化 Python 对象结构。这意味着你可以把几乎任何 Python 对象(如列表、字典、类实例等)转换为一个字节流(序列化),然后可以将其保存到磁盘上或通过网络传输。之后,你可以从这个字节流中恢复出原始的对象(反序列化)。Pickle 文件通常以 `.pkl` 或 `.pickle` 扩展名保存。
字节流

1.字节流(Byte Stream)是一种数据传输和存储的概念,指的是将数据表示为一系列的字节(8位二进制数)。每个字节由八个连续的比特组成,是计算机中最基本的信息单位之一。字节流可以用于表示任何类型的数据,比如文本、图片、音频、视频等,并且可以在程序内部处理、通过网络发送或保存到磁盘上。

2.在计算机科学中,字节流是一个抽象的概念,它描述了数据从一个地方到另一个地方流动的过程。

  • 文件读写:当你从文件读取数据时,操作系统通常会提供一个接口,允许你以字节流的形式读取文件内容。同样,当你向文件写入数据时,你也通常是以字节流的形式写入。
  • 网络通信:在网络编程中,客户端和服务器之间交换的数据也是以字节流的形式进行传输的。无论是HTTP请求、FTP传输还是其他类型的网络协议,数据都被编码成字节流后在网络上传输。
  • 序列化/反序列化:如之前提到的 Pickle 模块,它可以将 Python 对象转换成字节流(序列化),然后可以通过网络发送或保存到磁盘。接收方可以读取这些字节并将它们转换回原始对象(反序列化)。

字节流的一个重要特性是它是无结构的,即它不包含关于如何解释这些字节的信息。这意味着,为了正确地处理字节流,发送方和接收方必须就数据格式达成一致,或者在字节流中嵌入额外的信息来描述数据结构(如使用特定的文件格式或协议)。

例如,当处理图像文件时,不同的图像格式(如JPEG、PNG等)会有不同的方式来组织字节流中的信息。解码器需要知道正在处理的是哪种格式才能正确解析这些字节。

此外,在某些情况下,字节流可能会经过压缩或加密,以便更高效地传输或保护数据的安全性。在这种情况下,接收方需要先解压缩或解密字节流,然后再进行进一步的处理。

Tar 格式

  • Tar(Tape Archive)是一种文件格式,最初设计用于磁带归档。它可以把多个文件和目录打包成一个单独的文件,但不包括压缩功能(虽然 Tar 文件经常与压缩算法结合使用,例如 gzip 或 bzip2,生成 `.tar.gz` 或 `.tar.bz2` 文件)。Tar 文件保留了原始文件的元信息,比如权限、时间戳和目录结构等。

结合使用

为了将本地图片存储为 Pickle 序列化格式并以 Tar 形式分发,你可以按照以下步骤操作:

  • 读取图片:用 Python 读取图片文件为二进制数据。
  • 序列化:使用 pickle 模块将包含图片二进制数据的对象序列化。
  • 保存 Pickle 文件:将序列化的对象保存为 Pickle 文件。
  • 创建 Tar 包:使用 `tarfile` 模块将 Pickle 文件以及可能的其他相关文件打包成一个 Tar 文件。
  • 分发 Tar 文件:你现在可以将这个 Tar 文件分发给其他人。

接收方可以解包 Tar 文件,然后使用 pickle 模块反序列化 Pickle 文件来恢复原始的图片数据。

过拟合处理

数据增强

  • 可以使用transform完成对图像的数据增强,防止过拟合发生

Transforming and augmenting images — Torchvision 0.20 documentationicon-default.png?t=O83Ahttps://pytorch.org/vision/stable/transforms.html

数据增强的方法

1.随机旋转

2.镜像

3.缩放

4.图像模糊

5.裁剪

6.翻转

7.饱和度、亮度、灰度、色相

8.噪声、锐化、颜色反转

9.多样本增强

  • SamplePairing操作:随机选择两张图片分别经过基础数据增强操作处理后,叠加合成一个新的样本,标签为原样本标签中的一种。

  • 多样本线性插值:Mixup 标签更平滑

  • 直接复制:CutMix, Cutout,直接复制粘贴样本

  • Mosic:四张图片合并到一起进行训练

数据增强的好处

  • 查出更多训练数据:大幅度降低数据采集和标注成本;
  • 提升泛化能力:模型过拟合风险降低,提高模型泛化能力

标准化

  • 使数据更加的平滑,利于数据集的训练

DROP-OUT

  • 处理过拟合问题的,丢去一定比列的神经元

欠拟合注意事项

  • 欠拟合: 如果模型在训练集和验证集上表现都不够好,考虑增加模型的层级或训练更多的周期。

训练过程可视化

wandb.ai

  • 可在控制台看到训练进度。
  • 详情参考官方文档:

https://wandb.ai/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值