Giter VIP home page Giter VIP logo

paddle-toolbox's Introduction

Paddle Toolbox [Early WIP]

一些方便的小工具,参考 Paddle 的 API 设计以及 Torch Toolbox API 设计

⚠️ 目前正处于早期设计阶段,大多数功能的开发方案尚处于草案阶段~

安装

使用 pip 安装

注意:Python 需至少 3.7.0 版本,PaddlePaddle 需至少 2.3.0 版本(会跟随 paddle 版本变化)

pip install pptb==0.2.0

由于仍处于早期开发设计阶段,API 较为不稳定,安装时请一定要指定版本号

直接从 GitHub 拉取最新代码

这里以 AI Studio 为例

git clone https://github.com/cattidea/paddle-toolbox.git work/paddle-toolbox/
# 如果下载太慢导致出错请使用下面的命令
# git clone https://hub.fastgit.org/cattidea/paddle-toolbox.git work/paddle-toolbox/

之后在你的 Notebook 或者 Python 文件中加入以下代码

import sys

sys.path.append('/home/aistudio/work/paddle-toolbox/')

已支持的工具

LabelSmoothingLoss

import paddle
from pptb.nn import LabelSmoothingLoss, LabelSmoothingCrossEntropyLoss

label_smooth_epision = 0.1

loss_function = paddle.nn.CrossEntropyLoss()
# 如果需要标签平滑后 Loss,将下面这行替换成后面那一行即可
loss_function = LabelSmoothingLoss(
   paddle.nn.CrossEntropyLoss(soft_label=True),
   label_smooth_epision
)
# 由于 CrossEntropyLoss 的 LabelSmoothing 比较常用,因此也可以使用下面这个别名
loss_function = LabelSmoothingCrossEntropyLoss(label_smooth_epision)

CosineWarmup

import paddle
from pptb.optimizer.lr import CosineWarmup

# ...

train_batch_size = 32
learning_rate = 3e-4
step_each_epoch = len(train_set) // train_batch_size
num_epochs = 40
warmup_epochs = 3

lr_scheduler = CosineWarmup(
    learning_rate,
    total_steps = num_epochs * step_each_epoch,
    warmup_steps = warmup_epochs * step_each_epoch,
    warmup_start_lr = 0.0,
    cosine_end_lr = 0.0,
    last_epoch = -1
)

Mixup && Cutmix

Mixup

import paddle
from pptb.tools import mixup_data, mixup_criterion, mixup_metric

# ...

use_mixup = True
mixup_alpha = 0.2

for X_batch, y_batch in train_loader():
   # 使用 mixup 与不使用 mixup 代码的前向传播部分代码差异对比
   if use_mixup:
      X_batch_mixed, y_batch_a, y_batch_b, lam = mixup_data(X_batch, y_batch, mixup_alpha)
      predicts = model(X_batch_mixed)
      loss = mixup_criterion(loss_function, predicts, y_batch_a, y_batch_b, lam)
      acc = mixup_metric(paddle.metric.accuracy, predicts, y_batch_a, y_batch_b, lam)
   else:
      predicts = model(X_batch)
      loss = loss_function(predicts, y_batch)
      acc = paddle.metric.accuracy(predicts, y_batch)

   # ...

除了用于处理 paddle 里 Tensormixup_data,还可以使用 mixup_data_numpy 处理 numpy 的 ndarray。

Cutmix

和 Mixup 一样,只需要将 mixup_data 换为 cutmix_data 即可,与 mixup_data 不同的是,cutmix_data 还接收一个额外参数 axes 用于控制需要 mix 的是哪几根 axis,默认 axes = [2, 3],也即 NCHW 格式图片数据对应的 HW 两根 axis。

MixingDataController

用于方便管理使用 Mixup 和 Cutmix

import paddle
from pptb.tools import MixingDataController

# ...

mixing_data_controller = MixingDataController(
   mixup_prob=0.3,
   cutmix_prob=0.3,
   mixup_alpha=0.2,
   cutmix_alpha=0.2,
   cutmix_axes=[2, 3],
   loss_function=paddle.nn.CrossEntropyLoss(),
   metric_function=paddle.metric.accuracy,
)

for X_batch, y_batch in train_loader():
   X_batch_mixed, y_batch_a, y_batch_b, lam = mixing_data_controller.mix(X_batch, y_batch, is_numpy=False)
   predicts = model(X_batch_mixed)
   loss = mixing_data_controller.loss(predicts, y_batch_a, y_batch_b, lam)
   acc = mixing_data_controller.metric(predicts, y_batch_a, y_batch_b, lam)

   # ...

Vision models

提供更加丰富的 backbone,所有模型均会提供预训练权重

合入 paddle 主线的模型会在新版本发布时移除,避免 API 不同步导致的问题

已支持一些 PaddleClas 下的预训练模型,以及比较新的 ConvMixer

  • GoogLeNet(已并入 paddle 主线且已移除,请直接使用 paddle.vision.models.GoogLeNet)
  • Incetpionv3(已并入 paddle 主线且已移除,请直接使用 paddle.vision.models.InceptionV3)
  • ResNeXt(已并入 paddle 主线且已移除,请直接使用 paddle.vision.models.ResNet)
  • ShuffleNetV2(已并入 paddle 主线且已移除,请直接使用 paddle.vision.models.ShuffleNetV2)
  • MobileNetV3(已并入 paddle 主线且已移除,请直接使用 paddle.vision.models.MobileNetV3Large 和 paddle.vision.models.MobileNetV3Small)
  • ConvMixer(预训练权重转自 PyTorch)
import paddle
import pptb.vision.models as ppmodels

model = ppmodels.convmixer_768_32(pretrained=True)

PS: 如果这些模型无法满足你的需求的话,可以试试囊括了很多比较新的模型的 ppim~

ConvMixer

Model Name Kernel Size Patch Size Top-1 Top-5
convmixer_768_32 7 7 0.7974(-0.0042) 0.9486
convmixer_1024_20_ks9_p14 9 14 0.7681(-0.0013) 0.9335
convmixer_1536_20 9 7 0.8083(-0.0054) 0.9557

TODO List

一些近期想做的功能

  • Cutmix
  • Activation、Mish
  • RandomErasing
  • AutoAugment、RandAugment
  • Transform Layer(使用 Layer 实现某些 Transform)
  • 更多 vision models
    • Xception
    • Swin Transformer
    • CvT
  • 完整的单元测试

References

paddle-toolbox's People

Contributors

dependabot[bot] avatar renovate[bot] avatar siguremo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

paddle-toolbox's Issues

为 Paddle Toolbox 添加 Activation

任务详情

Paddle Toolbox 是为大家提供一些易用且常用功能的工具箱,但由于尚处于早期开发阶段,所以在功能性上尚不完善。

Paddle Toolbox 目前在功能和 API 设计上参考了 Torch Toolbox 的设计理念,将补充的 API 路径尽可能的贴合了框架(PyTorch)本身的 API 结构,因此 Paddle Toolbox 补充的 API 也应当尽可能地贴合 PaddlePaddle 相应功能的 API 路径。

本任务需要实现类似于 tf.keras.layers.Activation 的功能,为用户提供 pptb.nn.Activation 这一 API,该 API 可以直接接收激活函数类型的字符串参数,如 pptb.nn.Activation('relu') 即对应了 ReLU 激活函数,实现方式可以参考 Torch Toolbox 相应部分。

任务属性

  • 难度:⭐️
  • 前置任务:无
  • 任务序号:4

技术要求

  • 熟悉 Python
  • 了解 tf.keras.layers.Activation 功能
  • 了解 Paddle 高层 API 使用方式以及自定义激活函数方式

需完成内容

  • 通过 pptb.nn.Activation 能够正确调用该功能
  • 文档(README)
  • 单元测试

以上内容以 PR 形式提交

参考链接

☑️ Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/paddle-toolbox-test.yml
  • actions/checkout v3
  • actions/setup-python v4
  • Gr1N/setup-poetry v7
  • actions/cache v3
poetry
pyproject.toml
  • python ^3.7
  • paddlepaddle ^2.3.1
  • pytest ^7.1.2
  • isort ^5.10.1
  • jupyter ^1.0.0

  • Check this box to trigger a request for Renovate to run again on this repository

为 Paddle Toolbox 添加 Swin Transformer

任务详情

Paddle Toolbox 是为大家提供一些易用且常用功能的工具箱,但由于尚处于早期开发阶段,所以在功能性上尚不完善。

Paddle Toolbox 目前在功能和 API 设计上参考了 Torch Toolbox 的设计理念,将补充的 API 路径尽可能的贴合了框架(PyTorch)本身的 API 结构,因此 Paddle Toolbox 补充的 API 也应当尽可能地贴合 PaddlePaddle 相应功能的 API 路径。

虽然经过 PaddlePaddle Hackathon 后 PaddlePaddle 中大多经典 VisionModels 已经补全,但是尚缺乏最新的 ViT 结构模型,torchvision 和 keras-application 也是如此(现在 torchvision 已支持)。而 Swin Transformer 作为一个优秀的 ViT 结构网络,可以先添加到 Paddle Toolbox 中试用,之后再做是否添加到 Paddle 的打算。

本任务需要实现通过 pptb.vision.models.SwinTransformer 路径正确地调用 SwinTransformer 网络,并提供相应的预训练网络 API(参考 PaddleClas、ppim、timm 设计 API)。该网络需要与 PaddleClas 中网络结构一致,以复用其提供的预训练参数。在网络风格上要与 paddle.vision.models 中其余网络风格一致,应当提供 num_classes 参数与 with_pool 参数,代码风格也应当如此。

任务属性

  • 难度:⭐️⭐️
  • 前置任务:无
  • 任务序号:3

技术要求

  • 熟悉 Python
  • 了解 ViT 网络基本原理与 SwinTransformer 网络结构
  • 了解 Paddle 高层 API 使用方式以及自定义网络方式

需完成内容

  • 通过 pptb.vision.models.SwinTransformer/pptb.vision.SwinTransformer 能够正确调用该功能
  • 能够正确匹配预训练参数
  • 精度自测
  • 文档(README)
  • 单元测试

以上内容以 PR 形式提交

参考链接

为 Paddle Toolbox 添加 Xception

任务详情

Paddle Toolbox 是为大家提供一些易用且常用功能的工具箱,但由于尚处于早期开发阶段,所以在功能性上尚不完善。

Paddle Toolbox 目前在功能和 API 设计上参考了 Torch Toolbox 的设计理念,将补充的 API 路径尽可能的贴合了框架(PyTorch)本身的 API 结构,因此 Paddle Toolbox 补充的 API 也应当尽可能地贴合 PaddlePaddle 相应功能的 API 路径。

本任务需要实现通过 pptb.vision.models.Xception 路径正确地调用 Xception 网络,并提供相应的预训练网络 API(xception41 等)。该网络需要与 PaddleClas 中网络结构一致,以复用其提供的预训练参数。在网络风格上要与 paddle.vision.models 中其余网络风格一致,应当提供 num_classes 参数与 with_pool 参数,代码风格也应当如此。

任务属性

  • 难度:⭐️⭐️
  • 前置任务:无
  • 任务序号:2

技术要求

  • 熟悉 Python
  • 了解 Xception 网络结构
  • 了解 Paddle 高层 API 使用方式以及自定义网络方式

需完成内容

  • 通过 pptb.vision.models.Xception/pptb.vision.Xception 能够正确调用该功能
  • 能够正确匹配预训练参数
  • 精度自测
  • 文档(README)
  • 单元测试

以上内容以 PR 形式提交

参考链接

为 Paddle Toolbox 添加 MobileNetV3

任务详情

Paddle Toolbox 是为大家提供一些易用且常用功能的工具箱,但由于尚处于早期开发阶段,所以在功能性上尚不完善。

Paddle Toolbox 目前在功能和 API 设计上参考了 Torch Toolbox 的设计理念,将补充的 API 路径尽可能的贴合了框架(PyTorch)本身的 API 结构,因此 Paddle Toolbox 补充的 API 也应当尽可能地贴合 PaddlePaddle 相应功能的 API 路径。

虽然经过 PaddlePaddle Hackathon 后 VisionModels 已经具备了大多经典网络结构,但仍有少数网络是 torchvision 和 keras-application 拥有而 paddle 中没有提供的,MobileNetV3 作为 MobileNet 系列的最新网络,torchvision 和 keras-application 中均有提供,但 Paddle 中尚无该网络,因此可暂在 pptb 添加该网络。

本任务需要实现通过 pptb.vision.models.MobileNetV3 路径正确地调用 MobileNetV3 网络,并提供相应的预训练网络 API(mobilenet_v3_small_x0_35 等)。该网络需要与 PaddleClas 中网络结构一致,以复用其提供的预训练参数。在网络风格上要与 paddle.vision.models 中其余网络风格一致,应当提供 num_classes 参数与 with_pool 参数,代码风格也应当如此。

任务属性

  • 难度:⭐️⭐️
  • 前置任务:无
  • 任务序号:1

技术要求

  • 熟悉 Python
  • 了解 MobileNetV3 网络结构
  • 了解 Paddle 高层 API 使用方式以及自定义网络方式

需完成内容

  • 通过 pptb.vision.models.MobileNetV3/pptb.vision.MobileNetV3 能够正确调用该功能
  • 能够正确匹配预训练参数
  • 精度自测
  • 文档(README)
  • 单元测试

以上内容以 PR 形式提交

参考链接

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.