计算机系统应用教程网站

网站首页 > 技术文章 正文

41.人工智能——深度学习飞桨-PaddleX 模型训练过程和参数说明

btikc 2024-09-05 12:19:40 技术文章 12 ℃ 0 评论

在上一篇文章中,介绍了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:是否开启可视化分析。


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表