33 Star 175 Fork 49

PaddlePaddle / PaddleX

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
classification.md 13.55 KB
一键复制 编辑 原始数据 按行查看 历史
will-jl944 提交于 2021-12-06 16:21 . add pplcnet doc

Image Classification

目录

paddlex.cls.ResNet50

paddlex.cls.ResNet50(num_classes=1000)

构建ResNet50分类器,并实现其训练、评估和预测。

参数

  • num_classes (int): 类别数。默认为1000。

train

train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', pretrain_weights='IMAGENET', learning_rate=.025, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(30, 60, 90), lr_decay_gamma=0.1, label_smoothing=None, early_stop=False, early_stop_patience=5, use_vdl=True)

参数

  • num_epochs (int): 训练迭代轮数。
  • train_dataset (paddlex.dataset): 训练数据集。
  • train_batch_size (int): 训练数据batch大小。同时作为验证数据batch大小。默认为64。
  • eval_dataset (paddlex.dataset or None): 评估数据集。当该参数为None时,训练过程中不会进行模型评估。默认为None。
  • optimizer (paddle.optimizer.Optimizer): 优化器。当该参数为None时,使用默认优化器:paddle.optimizer.lr.PiecewiseDecay衰减策略,paddle.optimizer.Momentum优化方法。
  • save_interval_epochs (int): 模型保存间隔(单位:迭代轮数)。默认为1。
  • log_interval_steps (int): 训练日志输出间隔(单位:迭代步数)。默认为10。
  • save_dir (str): 模型保存路径。默认为'output'。
  • pretrain_weights (str or None): 若指定为'.pdparams'文件时,则从文件加载模型权重;若为字符串'IMAGENET',则自动下载在ImageNet图片数据上预训练的模型权重;若为None,则不使用预训练模型。默认为'IMAGENET'。
  • learning_rate (float): 默认优化器的初始学习率。默认为0.025。
  • warmup_steps (int): 默认优化器的warmup步数,学习率将在设定的步数内,从warmup_start_lr线性增长至设定的learning_rate,默认为0。
  • warmup_start_lr(float): 默认优化器的warmup起始学习率,默认为0.0。
  • lr_decay_epochs (list): 默认优化器的学习率衰减轮数。默认为[30, 60, 90]。
  • lr_decay_gamma (float): 默认优化器的学习率衰减率。默认为0.1。
  • label_smoothing (float, bool or None): 是否使用标签平滑。若为float,表示标签平滑系数。若为True,使用系数为0.1的标签平滑。若为None或False,则不采用标签平滑。默认为None。
  • early_stop (bool): 是否使用提前终止训练策略。默认为False。
  • early_stop_patience (int): 当使用提前终止训练策略时,如果验证集精度在early_stop_patience个epoch内连续下降或持平,则终止训练。默认为5。
  • use_vdl (bool): 是否使用VisualDL进行可视化。默认为True。
  • resume_checkpoint (str): 恢复训练时指定上次训练保存的模型路径,例如output/mobilenetv3_small/best_model。若为None,则不会恢复训练。默认值为None。恢复训练需要将pretrain_weights设置为None。

evaluate

evaluate(self, eval_dataset, batch_size=1, return_details=False)

参数

  • eval_dataset (paddlex.dataset): 评估数据集。
  • batch_size (int): 验证数据批大小。默认为1。
  • return_details (bool): 是否返回详细信息。默认为False。

返回值

  • tuple (metrics, eval_details) | dict (metrics): 当return_details为True时,返回(metrics, eval_details),当return_details为False时,返回metrics。 metrics为dict,包含键值:'acc1'、'acc5',分别表示最大值的accuracy、前5个最大值的accuracy。eval_details为dict。包含键值:'true_labels'、'pred_scores',分别代表真实类别id、每个类别的预测得分。

predict

predict(self, img_file, transforms=None, topk=1)

分类模型预测接口。需要注意的是,只有在训练过程中定义了eval_dataset,模型在保存时才会将预测时的图像处理流程保存在ResNet50.test_transformsResNet50.eval_transforms中。如未在训练时定义eval_dataset,那在调用预测predict接口时,用户需要再重新定义test_transforms传入给predict接口。

参数

  • img_file (List[np.ndarray or str], str or np.ndarray): 预测图像或包含多张预测图像的列表,预测图像可以是路径或numpy数组(HWC排列,BGR格式)。
  • transforms (paddlex.transforms): 数据预处理操作。
  • topk (int): 预测时前k个最大值。

返回值

  • dictList[dict]: 如果输入为单张图像,返回dict。包含的键值为'category_id'、'category'、'score',分别对应预测类别id、预测类别标签、预测得分。如果输入为多张图像,返回由每张图像预测结果组成的列表。

analyze_sensitivity

analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='output')

模型敏感度分析接口。

参数

  • dataset (paddlex.dataset): 用于评估模型在不同剪裁比例下精度损失的评估数据集。
  • batch_size (int): 评估模型精度损失时的batch大小。默认为8。
  • criterion ({'l1_norm', 'fpgm'}): 进行Filter粒度剪裁时评估,评估Filter重要性的范数标准。如果为'l1_norm',采用L1-Norm标准。如果为'fpgm',采用 Geometric Median 标准。
  • save_dir (str): 计算的得到的sensetives文件的存储路径。

prune

prune(self, pruned_flops, save_dir=None)

模型剪裁接口。

参数

  • pruned_flops (float): 每秒浮点数运算次数(FLOPs)的剪裁比例。
  • save_dir (None or str): 剪裁后模型保存路径。如果为None,剪裁完成后不会对模型进行保存。默认为None。

quant_aware_train

quant_aware_train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', learning_rate=.000025, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(30, 60, 90), lr_decay_gamma=0.1, early_stop=False, early_stop_patience=5, use_vdl=True, quant_config=None)

分类模型在线量化接口。

参数

  • num_epochs (int): 训练迭代轮数。
  • train_dataset (paddlex.dataset): 训练数据集。
  • train_batch_size (int): 训练数据batch大小。同时作为验证数据batch大小。默认为64。
  • eval_dataset (paddlex.dataset): 评估数据集。当该参数为None时,训练过程中不会进行模型评估。默认为None。
  • optimizer (paddle.optimizer.Optimizer): 优化器。当该参数为None时,使用默认优化器:paddle.optimizer.lr.PiecewiseDecay衰减策略,paddle.optimizer.Momentum优化方法。
  • save_interval_epochs (int): 模型保存间隔(单位:迭代轮数)。默认为1。
  • log_interval_steps (int): 训练日志输出间隔(单位:迭代步数)。默认为10。
  • save_dir (str): 模型保存路径。默认为'output'。
  • learning_rate (float): 默认优化器的初始学习率。默认为0.000025。
  • warmup_steps (int): 默认优化器的warmup步数,学习率将在设定的步数内,从warmup_start_lr线性增长至设定的learning_rate,默认为0。
  • warmup_start_lr(float): 默认优化器的warmup起始学习率,默认为0.0。
  • lr_decay_epochs (list): 默认优化器的学习率衰减轮数。默认为[30, 60, 90]。
  • lr_decay_gamma (float): 默认优化器的学习率衰减率。默认为0.1。
  • early_stop (bool): 是否使用提前终止训练策略。默认为False。
  • early_stop_patience (int): 当使用提前终止训练策略时,如果验证集精度在early_stop_patience个epoch内连续下降或持平,则终止训练。默认为5。
  • use_vdl (bool): 是否使用VisualDL进行可视化。默认为True。
  • quant_config (None or dict): 量化器配置。如果为None,使用默认配置。如果为dict,可配置项如下:
{
   # weight预处理方法,默认为None,代表不进行预处理;当需要使用`PACT`方法时设置为`"PACT"`
    'weight_preprocess_type': None,

   # activation预处理方法,默认为None,代表不进行预处理`
   'activation_preprocess_type': None,

   # weight量化方法, 默认为'channel_wise_abs_max', 此外还支持'channel_wise_abs_max'
   'weight_quantize_type': 'channel_wise_abs_max',

   # activation量化方法, 默认为'moving_average_abs_max', 此外还支持'abs_max'
   'activation_quantize_type': 'moving_average_abs_max',

   # weight量化比特数, 默认为 8
   'weight_bits': 8,

   # activation量化比特数, 默认为 8
   'activation_bits': 8,

   # 'moving_average_abs_max'的滑动平均超参, 默认为0.9
   'moving_rate': 0.9,

   # 需要量化的算子类型
   'quantizable_layer_type': ['Conv2D', 'Linear']
}

其他分类模型

PaddleX提供了共计38种分类模型,所有分类模型均提供同ResNet50相同的训练train,评估evaluate,预测predict,敏感度分析analyze_sensitivity,剪裁prune和在线量化quant_aware_train接口,各模型效果可参考模型库

模型 接口
PPLCNet paddlex.cls.PPLCNet(num_classes=1000)
PPLCNet_ssld paddlex.cls.PPLCNet_ssld(num_classes=1000)
ResNet18 paddlex.cls.ResNet18(num_classes=1000)
ResNet18_vd paddlex.cls.ResNet18_vd(num_classes=1000)
ResNet34 paddlex.cls.ResNet34(num_classes=1000)
ResNet34_vd paddlex.cls.ResNet34_vd(num_classes=1000)
ResNet50 paddlex.cls.ResNet50(num_classes=1000)
ResNet50_vd paddlex.cls.ResNet50_vd(num_classes=1000)
ResNet50_vd_ssld paddlex.cls.ResNet50_vd_ssld(num_classes=1000)
ResNet101 paddlex.cls.ResNet101(num_classes=1000)
ResNet101_vd paddlex.cls.ResNet101_vd(num_classes=1000)
ResNet101_vd_ssld paddlex.cls.ResNet101_vd_ssld(num_classes=1000)
ResNet152 paddlex.cls.ResNet152(num_classes=1000)
ResNet152_vd paddlex.cls.ResNet152_vd(num_classes=1000)
ResNet200_vd paddlex.cls.ResNet200_vd(num_classes=1000)
DarkNet53 paddlex.cls.DarkNet53(num_classes=1000)
MobileNetV1 paddlex.cls.MobileNetV1(num_classes=1000, scale=1.0)
MobileNetV2 paddlex.cls.MobileNetV2(num_classes=1000, scale=1.0)
MobileNetV3_small paddlex.cls.MobileNetV3_small(num_classes=1000, scale=1.0)
MobileNetV3_small_ssld paddlex.cls.MobileNetV3_small_ssld(num_classes=1000, scale=1.0)
MobileNetV3_large paddlex.cls.MobileNetV3_large(num_classes=1000, scale=1.0)
MobileNetV3_large_ssld paddlex.cls.MobileNetV3_large_ssld(num_classes=1000)
Xception41 paddlex.cls.Xception41(num_classes=1000)
Xception65 paddlex.cls.Xception65(num_classes=1000)
Xception71 paddlex.cls.Xception71(num_classes=1000)
ShuffleNetV2 paddlex.cls.ShuffleNetV2(num_classes=1000, scale=1.0)
ShuffleNetV2_swish paddlex.cls.ShuffleNetV2_swish(num_classes=1000)
DenseNet121 paddlex.cls.DenseNet121(num_classes=1000)
DenseNet161 paddlex.cls.DenseNet161(num_classes=1000)
DenseNet169 paddlex.cls.DenseNet169(num_classes=1000)
DenseNet201 paddlex.cls.DenseNet201(num_classes=1000)
DenseNet264 paddlex.cls.DenseNet264(num_classes=1000)
HRNet_W18_C paddlex.cls.HRNet_W18_C(num_classes=1000)
HRNet_W30_C paddlex.cls.HRNet_W30_C(num_classes=1000)
HRNet_W32_C paddlex.cls.HRNet_W32_C(num_classes=1000)
HRNet_W40_C paddlex.cls.HRNet_W40_C(num_classes=1000)
HRNet_W44_C paddlex.cls.HRNet_W44_C(num_classes=1000)
HRNet_W48_C paddlex.cls.HRNet_W48_C(num_classes=1000)
HRNet_W64_C paddlex.cls.HRNet_W64_C(num_classes=1000)
AlexNet paddlex.cls.AlexNet(num_classes=1000)
Python
1
https://gitee.com/paddlepaddle/PaddleX.git
git@gitee.com:paddlepaddle/PaddleX.git
paddlepaddle
PaddleX
PaddleX
develop

搜索帮助