Package: pptb
Paddle Toolbox [Early WIP]一些方便的小工具，参考 Paddle 的 API 设计以及 Torch Toolbox API 设计:warning: 目前正处于早期设计阶段，大多数功能的开发方案尚处于草案阶段～安装使用 pip 安装注意：Python 需至少 3.7.0 版本，PaddlePaddle 需至少 2.3.0 版本（会跟随 paddle 版本变化）pipinstallpptb==0.2.0由于仍处于早期开发设计阶段，API 较为不稳定，安装时请一定要指定版本号直接从 GitHub 拉取最新代码这里以 AI Studio 为例gitclonehttps://github.com/cattidea/paddle-toolbox.gitwork/paddle-toolbox/# 如果下载太慢导致出错请使用下面的命令# git clone https://hub.fastgit.org/cattidea/paddle-toolbox.git work/paddle-toolbox/之后在你的 Notebook 或者 Python 文件中加入以下代码importsyssys.path.append('/home/aistudio/work/paddle-toolbox/')已支持的工具LabelSmoothingLossimportpaddlefrompptb.nnimportLabelSmoothingLoss,LabelSmoothingCrossEntropyLosslabel_smooth_epision=0.1loss_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)CosineWarmupimportpaddlefrompptb.optimizer.lrimportCosineWarmup# ...train_batch_size=32learning_rate=3e-4step_each_epoch=len(train_set)//train_batch_sizenum_epochs=40warmup_epochs=3lr_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 && CutmixMixupimportpaddlefrompptb.toolsimportmixup_data,mixup_criterion,mixup_metric# ...use_mixup=Truemixup_alpha=0.2forX_batch,y_batchintrain_loader():# 使用 mixup 与不使用 mixup 代码的前向传播部分代码差异对比ifuse_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 里Tensor的mixup_data，还可以使用mixup_data_numpy处理 numpy 的 ndarray。Cutmix和 Mixup 一样，只需要将mixup_data换为cutmix_data即可，与mixup_data不同的是，cutmix_data还接收一个额外参数axes用于控制需要 mix 的是哪几根 axis，默认axes = [2, 3]，也即NCHW格式图片数据对应的H与W两根 axis。MixingDataController用于方便管理使用 Mixup 和 Cutmiximportpaddlefrompptb.toolsimportMixingDataController# ...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,)forX_batch,y_batchintrain_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 下的预训练模型，以及比较新的 ConvMixerGoogLeNet（已并入 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）importpaddleimportpptb.vision.modelsasppmodelsmodel=ppmodels.convmixer_768_32(pretrained=True)PS: 如果这些模型无法满足你的需求的话，可以试试囊括了很多比较新的模型的ppim~ConvMixerModel NameKernel SizePatch SizeTop-1Top-5convmixer_768_32770.7974(-0.0042)0.9486convmixer_1024_20_ks9_p149140.7681(-0.0013)0.9335convmixer_1536_20970.8083(-0.0054)0.9557TODO List一些近期想做的功能CutmixActivation、MishRandomErasingAutoAugment、RandAugmentTransform Layer（使用 Layer 实现某些 Transform）更多 vision modelsXceptionSwin TransformerCvT完整的单元测试ReferencesPaddlePaddleTorch Toolboxpytorch-image-models