基于PaddleX的模型演习的过程:

一、划分数据

41.人工智能——深度进修飞桨-PaddleX 模型演习过程和参数说明_模子_数据 计算机

1、利用paddlex自带命令划分数据集,划分比例一样平常比例,演习集:验证集:测试集=7:2:1

1.1.图像分类任务:在命令行下输入如下命令

paddlex --split_dataset --format ImageNet --dataset_dir MyDataset --val_value 0.2 --test_value 0.1

1.2.目标检测任务:在命令行输入如何命令

paddlex --split_dataset --format VOC --dataset_dir MyDataset --val_value 0.2 --test_value 0.1

个中参数:

--dataset_dir:数据集目录

--format:数据集格式

--val_value:验证集比例

--val_test:测试集比例

划分完成后,会在数据集目录里自动天生4个文件,用于后面的模型演习。

labels.***:分类名称或目标名称

test_list.***:测试数据

train_list.***:演习数据

val_list.***:验证数据

二、定义演习和验证时的transforms,图像增强操作。

train_transforms = T.Compose([ T.RandomResizeByShort( short_sizes=[640, 672, 704, 736, 768, 800], max_size=1333, interp='CUBIC'), T.RandomHorizontalFlip(), T.Normalize( mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])eval_transforms = T.Compose([ T.ResizeByShort(short_size=800, max_size=1333, interp='CUBIC'), T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])

解释:为了简化代码,默认参数可以省略不写。
根据须要选择得当的增强操作。

详细API解释:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/transforms/transforms.md

三、定义演习和验证所用的数据集

train_dataset = pdx.datasets.VOCDetection( data_dir='goods', file_list='goods/train_list.***', label_list='goods/labels.***', transforms=train_transforms, shuffle=True)eval_dataset = pdx.datasets.VOCDetection( data_dir='goods', file_list='goods/val_list.***', label_list='goods/labels.***', transforms=eval_transforms, shuffle=False)

参数解释:

data_dir:数据集目录

file_list:演习数据文件

label_list:标签文件

transforms:数据增强

shuffle:是否开启乱序

四、初化始模型,开启演习

num_classes = len(train_dataset.labels)model = pdx.det.FasterRCNN( num_classes=num_classes, backbone='ResNet50', with_fpn=True)

解释:这里紧张选择算法模型和backbone骨干网

详细API解释:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/models/detection.md

model.train( num_epochs=12, train_dataset=train_dataset, train_batch_size=2, eval_dataset=eval_dataset, learning_rate=0.0025, lr_decay_epochs=[8, 11], warmup_steps=500, warmup_start_lr=0.00025, save_dir='output/faster_rcnn_r50_fpn', use_vdl=True)

参数解释:

num_epochs:是模型演习迭代的总轮数(模型对演习集全部样本过一遍即为一个epoch),用户可以设置较大的数值,根据模型迭代过程在验证集上的指标表现,来判断模型是否收敛,进而提前终止演习。

train_dataset:演习集

train_batch_size:指模型在演习过程中,前向打算一次(即为一个step)所用到的样本数量,Batch Size跟机器的显存/内存高度干系,batch_size越高,所花费的显存/内存就越高,如若演习时提示GPU显存不敷,则相应调低BatchSize。

eval_dataset:验证集

learning_rate:学习率

lr_decay_epochs:用于让学习率在模型演习后期逐步衰减,它一样平常是一个list,如[6, 8, 10],表示学习率在第6个epoch时衰减一次,第8个epoch时再衰减一次,第10个epoch时再衰减一次。
每次学习率衰减为之前的学习率lr_decay_gamma。

warmup_steps,warmup_start_lr:在演习模型时,一样平常都会利用预演习模型,例如检测模型在演习时利用backbone在ImageNet数据集上的预演习权重。
但由于在自行演习时,自己的数据与ImageNet数据集存在较大的差异,可能会一开始由于梯度过大使得演习涌现问题,这种情形下可以在刚开始演习时,让学习率以一个较小的值,逐步增长到设定的学习率。
warmup_steps和warmup_start_lr便是起到这个浸染,模型开始演习时,学习率会从warmup_start_lr开始,在warmup_steps个batch数据迭代后线性增长到设定的学习率。

save_dir:演习模型保存的目录

use_vdl:是否开启可视化剖析。