# 图像分类迁移学习
迁移学习是机器学习领域的一个重要分支，广泛应用于文本、图像等各种领域，此处我们主要介绍的是图像分类领域的迁移学习，也就是我们常说的域迁移，比如将 ImageNet 分类模型迁移到我们自己场景的图像分类任务上，如花卉分类。

----------

## 目录

* [1. 超参搜索](#1)
  * [1.1 网格搜索](#1.1)
  * [1.2 贝叶斯搜索](#1.2)
* [2. 大规模分类模型](#2)
* [3. 参考文献](#3)

<a name='1'></a>

## 1. 超参搜索

ImageNet 作为业界常用的图像分类数据被大家广泛使用，已经总结出一系列经验性的超参，使用这些超参往往能够得到不错的训练精度，而这些经验性的参数在迁移到自己的业务中时，有时效果不佳。有两种常用的超参搜索方法可以用于获得更好的模型超参。

<a name='1.1'></a>

### 1.1 网格搜索

网格搜索，即穷举搜索，通过查找搜索空间内所有的点，确定最优值。方法简单有效，但当搜索空间较大时，需要消耗大量的计算资源。

<a name='1.2'></a>

### 1.2 贝叶斯搜索

贝叶斯搜索，即贝叶斯优化，在搜索空间中随机选取超参数点，采用高斯过程，即根据上一个超参数点的结果，更新当前的先验信息，计算前面 n 个超参数点的后验概率分布，得到搜索空间中每一个超参数点的期望均值和方差，其中期望均值越大表示接近最优指标的可能性越大，方差越大表示不确定性越大。通常将选择期望均值大的超参数点称为 `exporitation`，选择方差大的超参数点称为 `exploration`。在贝叶斯优化中通过定义 `acquisition function` 权衡期望均值和方差。贝叶斯搜索认为当前选择的超参数点是处于最大值可能出现的位置。

------

基于上述两种搜索方案，我们在 8 个开源数据集上将固定一组参数实验以及两种搜索方案做了对比实验，参照[1]的实验方案，我们对 4 个超参数进行搜索，搜索空间及实验结果如下所示：

- 固定参数：

```
初始学习率 lr=0.003，l2 decay=1e-4，label smoothing=False，mixup=False
```

- 超参搜索空间：

```
初始学习率 lr: [0.1, 0.03, 0.01, 0.003, 0.001, 0.0003, 0.0001]

L2 decay: [1e-3, 3e-4, 1e-4, 3e-5, 1e-5, 3e-6, 1e-6]

Label smoothing: [False, True]

Mixup: [False, True]
```

网格搜索的搜索次数为 196 次，而贝叶斯搜索通过设置最大迭代次数（`max_iter`）和是否重复搜索（`de_duplication`）来确定搜索次数。我们设计了系列实验，baseline 为 ImageNet1k 校验集 Top1 Acc 为 79.12% 的 ResNet50_vd 预训练模型，并固定超参，在新数据集上 finetune 得到的模型。下表给出了固定参数、网格搜索以及贝叶斯搜索的精度与搜索次数对比。

- 精度与搜索次数对比:

| 数据集             | 固定参数 | 网格搜索 | 网格搜索次数 | 贝叶斯搜索 | 贝叶斯搜索次数|
| ------------------ | -------- | -------- | -------- | -------- | ---------- |
| Oxford-IIIT-Pets   | 93.64%   | 94.55%   | 196 | 94.04%     | 20         |
| Oxford-102-Flowers | 96.08%   | 97.69%   | 196 |  97.49%     | 20         |
| Food101            | 87.07%   | 87.52%   | 196 |  87.33%     | 23         |
| SUN397             | 63.27%   | 64.84%   | 196 |  64.55%     | 20         |
| Caltech101         | 91.71%   | 92.54%   | 196 |  92.16%     | 14         |
| DTD                | 76.87%   | 77.53%   | 196 |  77.47%     | 13         |
| Stanford Cars      | 85.14%   | 92.72%   | 196 |  92.72%     | 25         |
| FGVC Aircraft      | 80.32%   | 88.45%   | 196 |  88.36%     | 20         |


- 上述实验验证了贝叶斯搜索相比网格搜索，在减少搜索次数 10 倍左右条件下，精度只下降 0%~0.4%。
- 当搜索空间进一步扩大时，例如将是否进行 AutoAugment，RandAugment，Cutout，Cutmix 以及 Dropout 这些正则化策略作为选择时，贝叶斯搜索能够在获取较优精度的前提下，有效地降低搜索次数。

<a name='2'></a>

## 2. 大规模分类模型

在实际应用中，由于训练数据的匮乏，往往将 ImageNet1k 数据集训练的分类模型作为预训练模型，进行图像分类的迁移学习。为了进一步助力解决实际问题，基于 ResNet50_vd, 百度开源了自研的大规模分类预训练模型，其中训练数据为 10 万个类别，4300 万张图片。10 万类预训练模型的下载地址：[**下载地址**](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_10w_pretrained.pdparams)

我们在 6 个自有采集的数据集上进行迁移学习实验，采用一组固定参数以及网格搜索方式，其中训练轮数设置为 20 epochs，选用 ResNet50_vd 模型，ImageNet 预训练精度为 79.12%。实验数据集参数以及模型精度的对比结果如下：

固定参数：

```
初始学习率 lr=0.001，l2 decay=1e-4，label smoothing=False，mixup=False
```

| 数据集          | 数据统计                                  | **ImageNet 预训练模型 <br />固定参数 Top-1/参数搜索 Top-1** | **大规模分类预训练模型<br />固定参数 Top-1/参数搜索 Top-1** |
| --------------- | ----------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------- |
| 花卉         | class:102<br />train:5789<br />valid:2396 | 0.7779/0.9883                                            | 0.9892/0.9954                                             |
| 手绘简笔画   | Class:18<br />train:1007<br />valid:432   | 0.8795/0.9196                                            | 0.9107/0.9219                                             |
| 植物叶子     | class:6<br />train:5256<br />valid:2278   | 0.8212/0.8482                                            | 0.8385/0.8659                                             |
| 集装箱车辆   | Class:115<br />train:4879<br />valid:2094 | 0.6230/0.9556                                            | 0.9524/0.9702                                             |
| 椅子         | class:5<br />train:169<br />valid:78      | 0.8557/0.9688                                            | 0.9077/0.9792                                             |
| 地质         | class:4<br />train:671<br />valid:296     | 0.5719/0.8094                                            | 0.6781/0.8219                                             |

- 通过上述的实验验证了当使用一组固定参数时，相比于 ImageNet 预训练模型，使用大规模分类模型作为预训练模型在大多数情况下能够提升模型在新的数据集上得效果，通过参数搜索可以进一步提升精度。

<a name='3'></a>
## 3. 参考文献

[1] Kornblith, Simon, Jonathon Shlens, and Quoc V. Le. "Do better imagenet models transfer better?." *Proceedings of the IEEE conference on computer vision and pattern recognition*. 2019.

[2] Kolesnikov, Alexander, et al. "Large Scale Learning of General Visual Representations for Transfer." *arXiv preprint arXiv:1912.11370* (2019).
