在上一篇文章中,介绍了PaddleX基本功能和安装方法:40.人工智能——深度学习飞桨-PaddleX 安装:Windows 10系统。本文主要讲一下使用PaddleX的API来训练模型,虽然有PaddleX GUI图像形化界面程序,是可以作为初学者或入门级的选择,如果需要更灵活自由的方式来组织实现自己的功能,则使用PaddleX的提供的API来完成比如方便。
基于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.txt:分类名称或目标名称
test_list.txt:测试数据
train_list.txt:训练数据
val_list.txt:验证数据
二、定义训练和验证时的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.txt',
label_list='goods/labels.txt',
transforms=train_transforms,
shuffle=True)
eval_dataset = pdx.datasets.VOCDetection(
data_dir='goods',
file_list='goods/val_list.txt',
label_list='goods/labels.txt',
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:是否开启可视化分析。
本文暂时没有评论,来添加一个吧(●'◡'●)