PaddleClas学习<二>图像分类介绍和训练

2023-09-30 16:08:19
标签: paddle python

作者: Sam(甄峰) sam_code@hotmail.com


0. PULC方案简介:

图像分类是计算机视觉的基础算法之一。近年来骨干网络发展迅速,精度记录不断刷新。但实用性却有待提高。高精度模型体积大,运算慢。找到合适的模型后,还需要继续调参,费时费力。

PaddleClas为了解决以上问题,提出了实用轻量级图像分类解决方案(PULC, Practical Ultra Lightweight Classification). 融合了骨干网络,数据增强,蒸馏等。可以自动训练得到轻量且高精度的图像分类模型。


1. PP-LCNet介绍:

在计算机视觉中,骨干网络的好坏直接影响视觉任务的好坏。这个评价包含推理速度和准确性。Paddle针对Intel CPU以及其加速库MKLDNN设计了独特的骨干网络PP-LCNet.极大的提高了推理速度。


2. PP-LCNet模型细节:

 

更好的激活函数

自从卷积神经网络使用了 ReLU 激活函数后,网络性能得到了大幅度提升,近些年 ReLU 激活函数的变体也相继出现,如 Leaky-ReLU、P-ReLU、ELU 等,2017 年,谷歌大脑团队通过搜索的方式得到了 swish 激活函数,该激活函数在轻量级网络上表现优异,在 2019 年,MobileNetV3 的作者将该激活函数进一步优化为 H-Swish,该激活函数去除了指数运算,速度更快,网络精度几乎不受影响。我们也经过很多实验发现该激活函数在轻量级网络上有优异的表现。所以在 PP-LCNet 中,我们选用了该激活函数。

合适的位置添加 SE 模块

SE 模块是 SENet 提出的一种通道注意力机制,可以有效提升模型的精度。但是在 Intel CPU 端,该模块同样会带来较大的延时,如何平衡精度和速度是我们要解决的一个问题。虽然在 MobileNetV3 等基于 NAS 搜索的网络中对 SE 模块的位置进行了搜索,但是并没有得出一般的结论,我们通过实验发现,SE 模块越靠近网络的尾部对模型精度的提升越大。

合适的位置添加更大的卷积核

在 MixNet 的论文中,作者分析了卷积核大小对模型性能的影响,结论是在一定范围内大的卷积核可以提升模型的性能,但是超过这个范围会有损模型的性能,所以作者组合了一种 split-concat 范式的 MixConv,这种组合虽然可以提升模型的性能,但是不利于推理。


GAP 后使用更大的 1x1 卷积层

在 GoogLeNet 之后,GAP(Global-Average-Pooling)后往往直接接分类层,但是在轻量级网络中,这样会导致 GAP 后提取的特征没有得到进一步的融合和加工。如果在此后使用一个更大的 1x1 卷积层(等同于 FC 层),GAP 后的特征便不会直接经过分类层,而是先进行了融合,并将融合的特征进行分类。这样可以在不影响模型推理速度的同时大大提升准确率。 

 

 

 

 

 2.2: PPLCNet模型:

PPLCNet_x0_25.yaml中,指定了模型结构:

Arch:

  name: PPLCNet_x0_25

具体模型结构在:

ppcls/arch/backbone/legendary_models/pplc_net.py中定义。


这里PaddleClas提供了一些backbone. 可以根据需要自行选择使用。如pp_lcnet_v2.py,  pp_hgnet.py, vgg.py, resnet.py等。

 

 

 

3. PULC训练:

3.1: 数据准备:

PaddleClas使用txt格式的文件指定训练集和验证集。

格式为:

# 每一行采用"空格"分隔图像路径与标注

others\bg\noexpsqr1038_1.jpg 0

others\bg\noexpsqr1040_1.jpg 0

分别产生train.txt, val.txt作为训练集和验证集。

此外,建立: label_list.txt 描述分类名。

如:

other

fist

palm

在训练配置文件PPLCSmallNet_x0_25.yaml中指定train.txt和val.txt,label_list.txt文件。

3.2: 训练:

训练命令:

python ./tools/train.py -c ./myconfigs/PPLCSmallNet/PPLCSmallNet_x0_25.yaml

训练完成后,在output中,可以看到PPLCSmallNet_x0_25目录。

这是因为yaml中指定的:

  output_dir: ./output/

Arch:

  name: PPLCSmallNet_x0_25

其中,放有训练出的东西。


待研究: 

SSLD预训练权重

EDA数据增强策略

SKL-UGI模型蒸馏

超参搜索

 

 


 


阅读(0) 收藏(0) 转载(0) 举报/Report
相关阅读

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有