题目:Tencent ML-Images: A Large-Scale Multi-Label Image Database for Visual Representation Learning - 2019

作者:Baoyuan Wu, Weidong Chen, Yanbo Fan,Tong Zhang 等

团队:Tencent AI Lab, Shenzhen

项目:Github - Tencent ML-Images

腾讯 AI Lab 开源了多标签数据集 - Tencent ML-Images,近期其发布了介绍该数据集的论文.

Dataset - Tencent ML-Images 腾讯多标签数据集 - AIUAI

1. 综述

图像识别的很多大规模图像数据集,如 ImageNet,往往单张图片只有一个标注标签(tag). 但是,实际上单个标签很难描述图片的所有重要内容信息,在训练时可能会丢弃某些有用的视觉信息. 因此,Tencent AI Lab 提出对标注了多个标签的图像训练 CNN 模型的方法,以提升模型的视觉表示能力. 即:

[1] - 构建了大规模图像数据集 - Tencent ML-Images,其包含 18M 张图片和 11K 个类别.

[2] - 基于 Tencent ML-Images 数据集,训练多输出的 ResNet-101 模型. 采用大规模分布式深度框架,训练了 60 个 epochs,耗时 90 hours.

[3] - 提供的模型断点(checkpoints),具有很好的视觉表示能力;其在三个任务场景的迁移学习中被验证,即:ImageNet 和 Caltech-256 的单标签图像分类;PASCAL VOC 2007 的目标检测;PASCAL VOC 2012 的语义分割.

关于数据集的构建,讨论了两个问题:

[1] - 为什么需要大规模图像数据集?

深度神经网络在单标签的图像分类任务上,大规模训练数据集是很有必要;且在其它视觉任务,如目标检测和语义分割,数据集的获取代价较高. 因此,在其它大规模数据集视觉任务上的预训练模型断点,是很有必要的.

[2] - 为什么需要多标签图像数据集?

现实图片中,单张图片往往是包含多个物体的,如果只标注了单个物体标签,其一般会丢失某些有用信息,并误导 CNNs 模型的训练.

例如,两张视觉相似图片包含 cowgrass可能会分别标注为 cowgrass. 而合理的方式是告诉 CNN 模型这两张图片都包含 cowgrass.

对此,AI Lab 新构建了大规模多标签图片数据集:

  • 图片并非从 Google 或 Flicker 上收集新的图片,而是基于 OpenImages 和 ImageNet 数据集.
  • 主要合并了两个数据集的类别标注词汇为统一标注词汇,移除了很稀少和无用的类别标注及对应的图片;然后进一步根据 WordNet 构建的标注词汇的语义层次词汇.
  • 基于 OpenImages 和 ImageNet 的原始标注标签,派生了类别的共生性(co-occurrence)词汇,然后与语义层次词汇一起作为增强的标注标签.

基于新构建的大规模多标签图片数据集,训练 ResNet-101 V2 模型,以学习视觉表示特征,验证图片数据集的质量.

多标签图像数据集的大规模训练,主要面临两个问题:类别不均衡训练时间较长. 对此:

[1] - 为了缓解类别不均衡的问题,设计了新的损失函数,其考虑了加权交叉熵(weighted cross entropy),训练过程中损失权重的自适应,和每个 mini-batch 中负训练图片的下采样.

[2] - 为了加速训练过程,采用了大规模分布式深度学习框架,如 TFplus,采用了 Message Passing Interface (MPI) 和 NVIDIA Collective Communications Library (NCCL). 128 GPUs 训练 60 个 epochs,耗时 90 hours.

2. Tencent ML-Images 数据集收集

2.1. 图像源和类别词汇

基于 ImageNet 和 OpenImages 数据集图片和标注的标签.

[1] - 首先,从 ImageNet-11K 提取图像 URLs.

ImageNet-11K 是 MXNet 收集的 ImageNet 数据集的一个子集,其共包含了 11797630 张训练图像,包含了 11221 个标注类别. 不过,这 11221 个类别中的 1989 个类别标注是视觉非常抽象的,如 eventsummer 等. 这些抽象标签的标注可能不会对图像的视觉表示有帮助.

[2] - 然后,移除抽象标注的标签类别,以及对应的图像.

移除后,得到 10322935 张训练图片和 9232 个类别标注.

[3] - 接着,根据类别间的语义关系,根据 ImageNet 的标注词汇,新增了 800 个更精细的类别.

例如,ImageNet 的类别标注中的标签 dog,则将 Husky词汇添加到标签词汇中,以及对应的 ImageNet 中的图片.

得到 10756941 个 URLs,包含了 ImageNet 的 10032 个类别词汇.

随机选取 50000 个 URLs 作为验证集 URLs,并保证每个类别标签选择的 URLs 的数量不多于 5.

[4] - 对于 OpenImages 数据集,采用每个类别标准,过滤数据集中的所有图片.

如果一个类别的图像少于 650 张,则移除该类别标签和对应的图片.

同时,类似于ImageNet,移除了非常抽象的标签类别及对应的图像.

另外,新增了 OpenImages 的标注词汇中与 10032 个类别词汇相似或同义词,并合并为统一的类别标签.

如果一张图片的所有标签都被移除了,则该图片也丢弃.

最后,保留得到了 6902811 张训练图像和 38739 张验证图片,包含了 1134 个独立类别词汇.

[5] - 合并 ImageNet 和 OpenImages 中选择的 URLs 和类别词汇,构成了 Tencent ML-Images 的 URLs 和标签词汇.

共 17609752 张训练图片 URLs 和 88739 张验证图片 URLs,包含了 11166 个类别.

从图片 URLs 下载原始图片.

语义层次(Semantic Hierarchy)

首先,将 ImageNet 和 OpenImages 的类别映射到 WordNet 中的 WordIDs.

然后,根据 WordIDs,构建 11166 个类别词汇的语义层次. 共包含 4 个独立的树,其根节点分别为:thing, matter, physical objectatmospheric phenomenon. 从根节点到叶节点的最长语义路径长度为16,平均长度为 7.47.

2.2. 图像的类别标签增强

ImageNet-11K 的每张图片只标注了一个标签. Tencent ML 数据集通过利用类别间的语义层次和共生性对图片的标注标签进行增强.

[1] - 首先,根据语义层次,原始的单个标签的所有父类别(ancestor categories) 均被标注为该图片的标签.

[2] - 然后,计算 ImageNet-11K 类别和 OpenImages 类别的共生矩阵 CO. 即:

基于 OpenImages 训练 1134 个输出的 ResNet-101 模型;并采用该训练模型,预测 ImageNet-11K 中图片的标签. 如果预测的图片的标签的后验概率大于 95%,并将该类别标签作为该图片的正标签.

计算共生矩阵的方式为:

对于 ImageNet-11K 的类别 i 和 OpenImages 的类别 j,记 ImageNet 中的类别 i 的正图像的数量为 $n_i$,其中同时被标注为类别 j 的图像数量为 $n_{i, j}$,则:$CO(i, j) = \frac{n_{i,j}}{n_i} \in [0, 1]$.

如果 $CO(i, j) > 0.5$ 则类别 i 和类别 j 间没有语义关系.(如,语义层次中,从类别 i 和类别 j 间没有路径,或路径相反.) 并判定类别 i 和类别 j 是类别的强共生对.

然后,增强 ImageNet-11K 图像的标签标注:如果原始标签类别为 i,则还标注其类别标签为 j.

2.3. 数据集统计

# 训练图片# 验证图片# 类别# 训练类别# 平均每张图片的标签数# 平均每个类别的图片数
17,609,75288,73911,16610,50581447.2

每个类别的图片数和训练集中标注数的直方图,如图:

img

3. 基于 Tencent ML-Images 数据集的视觉表示学习

3.1. 训练多输出的 ResNet-101 模型

3.1.1. 模型和损失函数

基于 Tensorflow-1.6.0 训练 ResNet-101 模型.

由于任务场景是多标签分类(multi-label classification),ResNet-101 模型的输出是 m 个独立 Sigmoid 激活函数的激活值,其中 m 是标注的类别词汇量.

为了缓解类别不均衡问题,提出了新的加权交叉熵损失函数.

以单张训练图片 $\mathbf{x}_i$ 的损失函数为例,

$$ \mathcal{L}_{\mathbf{w}}(\mathbf{x}_i, \mathbf{y}_i) = \frac{1}{m} \sum_{j}^{m} r_t^j [- \eta y_{ij}log(p_{ij}) - (1-y_{ij}log(1 - p_{ij}))] $$

其中,

$p_{ij} = f_{\mathbf{w}} (\mathbf{w}_i, j) \in [0, 1]$ 为关于类别 j 的后验概率,$\mathbf{w}$ 为待训练参数.

$\mathbf{y}_i = [y_{i1}, ..., y_{ij}, ..., y_{im}] \in \lbrace 0, 1 \rbrace^m$ 表示图像 $\mathbf{x}_i$ 的标注的标签向量.

参数 $\eta > 1$ 用于设置正标签比负标签更大的权重,以消除每个类别的正样本和负样本间的不平衡. 这里 设置为 $\eta = 12$.

$r_t^j = 0.9^{t-1}$ 表示在训练过程中的自适应权重. 对于类别 j,如果一个 mini-batch 内所有的训练图像都是负样本,则记录其状态为 0;如果至少有一张训练图片是正样本,则记录其状态为 1. 因此,可以得到一个状态向量:$(..., 0, 1, 1, 1, 0, 0, 1, 0, ...)$. 则,t 的定义为:如果当前 mini-batch 的状态与最后一个 mini-batch 不同,如,01和10,则 t=1; 如果当前 mini-batch 的状态与最后一个 mini-batch 的状态相同,则,t = t+1.

With $r_t^j$ , if the parameters corresponding to category j are positively or negatively updated in sequential mini-batches, the weight of the corresponding loss function is decayed. It will alleviatet he imbalance among frequent and rare categories.

3.1.2. 图像预处理

采用的图像预处理序列步骤如下:

[1] - 随机在图像中裁剪一个框(bounding box),并保证框内图像的面积在整张图像的 [0.5, 1.0] 范围,图像的 width 和 height 比例在 [3/4, 4/3] 范围.

[2] - 将裁剪的图像尺寸调整为 224x224.

[3] - 以 0.5 的概率随机水平翻转.

[4] - 以 0.25 的概率在 [-45, 45] 的范围旋转图像.

[5] - 以 0.5 的概率颜色变换.

[6] - 将图像像素值范围由 [0, 1] 变换到 [-1, 1].

3.1.3. 训练算法和参数

共 17609752 张训练图片,batchsize=4096,每个 epoch 包含 4300 次迭代.

学习率采用 warm-up 策略调整. 即:前 8 个 epochs,学习率由 0.01 开始,接着在每个 epoch 后以因子 1.297 递增. 在第 9 个 epoch 学习率则变为 0.08. 然后,每 25 个 epochs 以因子 0.1 衰减. momentum=0.9. 最多训练 60 个 epochs.

在更新 BatchNorm 的参数时,moving average 的衰退因子为 0.9,常量 $\epsilon = 0.001$. decapy=0.0001.

在每个 batch 数据中,对于每个类别,大部分甚至是全部的图像都是负样本. 对于类别 i,如果在当前 batch 中没有正样本图片,则全连接层中对应于类别 i 的参数会以 0.1 的概率进行更新;如果对于类别 i ,batch 中包含正样本图片,则下采样负样本图片,其数量为正样本图片的 5 倍;然后根据正样本图片和下采样后的负样本图片,更新对应的参数. 基于此,分类器对应于每个类别的参数会学习相似的分布,如,负样本图像是正样本图像的 5 倍. 尽管各类别的训练图像的绝对数仍不相同,但能够在一定程度上缓解类别不均衡的影响.

训练的 loss 曲线如下:

image

3.1.4. 分布式训练

ResNet-101 模型,11K outputs,18M 张训练图片,单机训练需要 12 天左右.

Tencent AI Lab 采用了大规模分布式深度学习框架,TFplus. 基于 TensorFlow. 替换了原始基于 MPI 的 gRPC 实现为 NCCL.

NCCL provides a highly optimized version of routines, such as all-gather, all-reduce, broadcast, reduce, reduce-scatter, especially the integrated bandwidth-optimal ring all-reduce algorithm, to achieve high bandwidth over PCIe on NVIDIA GPU.

3.2. 评价标准和结果

多标签学习的度量:instance-level Precision, Recall, F1 score.

由于模型关于每一个类别的输出是后验概率,故需要将模型输出的连续预测值转换为二值预测,以计算评价度量.

具体的,对于图像 i,选择对应于 top-k 个最大的后验概率的类别作为正标签(如,1),其它的类别作为负标签(如,0). 最终可以得到二值预测向量 $\hat{\mathbf{y}}_i^k \in \lbrace 0, 1 \rbrace ^m$.

评价度量的计算方式:

$$ P_k = \frac{1}{n} \sum_i^n P_{i, k} = \frac{1}{n} \sum_i^n \frac{\mathbf{y}_i * \hat{\mathbf{y}}_i^k}{k} $$

$$ R_k = \frac{1}{n} \sum_i^n R_{i, k} = \frac{1}{n} \sum_i^n \frac{\mathbf{y}_i * \hat{\mathbf{y}}_i^k}{\mathbf{1}^T * \mathbf{y}_i} $$

$$ F1_k = \frac{1}{n} \sum_i^n \frac{2P_{i,k} * R_{i, k}}{P_{i, k} + R_{i, k}} $$

Top-5 和 Top-10 预测结果如:

image

由于验证数据集只有训练数据集的 1/200,对于验证数据集的图片应该有很多缺失的标签. 因此,得到的评价结果可能不足以度量模型的视觉表征能力. 但,后续的其它任务场景的迁移学习,可以体现训练的多标签模型的视觉表征能力.

4. 多标签模型的迁移学习

4.1. 迁移到ImageNet的单标签图像分类任务

以在 Tencent ML-Images 训练的 ResNet-101 模型作为初始权重断点,替换其最后一层输出层,换成 1000 个输出节点的网络层,并采用 softmax loss 作为损失函数在 ImageNet-ILSVRC2012 数据集进行 finetune.

超参数对比

image

结果:

image

image

4.2. 迁移学习到 Caltech-256 单标签图像分类任务

Caltech-256,小规模单标签图像数据集,共 30607 张图片,256 个类别.

image

4.3. 迁移学习到目标检测任务

image

4.4. 迁移学习到语义分割任务

image

Last modification:January 12th, 2019 at 10:35 am