简介
本文主要讨论了几个点:
- 图像分辨率对识别的影响
- 长尾数据应对方法,主要针对iNaturalist数据。所谓长尾数据是指类别数据量不平衡,有些类别数据量很大,很多类别数据量很少,呈长尾状。
- 细粒度图像识别,例如鸟类、车类的子类别。本文并没有提出新的网络结构,主要是通过迁移学习达到此目的。针对source数据的选取、预训练及fine-tune。
图像分辨率讨论
分辨率越高包含的信息量也越多,尤其是针对细粒度识别。作者做实验证明分辨率越大越好(这是肯定的啦)。
长尾数据
数据量不平衡是造成长尾数据的主要原因,iNatrualist数据数据量最多的大类有19w张,数据量最少的大类只有3百多张,数据量最多的类别与最少的类别的数据量比值是435,若不重采样或加权重,网络很容易会被数据量大的类别所引导,数据量少的类别就会很差。iNatrualist论文给出了各个数据集数据不平衡的情况:
针对长尾数据,作者的做法是:
- 先正常在不平衡的数据集上训练,模型可以学到比较好的特征表达。
- 在上面数据集的一个平衡的子集上,使用小学习率fine-tune。目的是缓慢地让学到的特征均衡化,迁移到所有类别。
作者做的实验如下,下图蓝色是第一阶段学习的error,红色是第二阶段学习后的error。
个人感觉应该跟重采样的效果差不多吧,反正数据量少的样本就那么多,重采样相当于让数量少的样本出现次数变多了,达到了上面第二阶段的均衡子集的作用,而且还不会减少数据量多的类别的数据,好的特征应该也足够学到。
迁移学习与细粒度识别
作者使用迁移学习使用数据量大的数据集预训练网络,再在数据量少的细粒度数据上fine-tune。主要分两步:
第一步:
假设数据集S是用于预训练的,数据量很多。数据集T是目标域,数据量很少。作者发现在iNatrualist数据集预训练后在CUB-200上fine-tune的效果比在ImageNet上预训练的效果好。猜测因为iNatrualist里样子跟CUB-200相似的鸟比较多。因此作者假设,在与T集相似的类别上预训练然后在T上fine-tune的效果要更好。
因此第一步就要在S集中找到与T集相似的那些类别,进行模型的预训练。先定一个距离函数:
s跟t分别是S跟T中的数据,g()函数是抽特征的函数,一般是模型最后fc前的特征。作者使用Earth Mover’s Distance (EMD)计算S跟T之间的距离。 定义 跟,其中si是第i类的特征,为所有这个类别数据的特征的均值。w是此类别数量占总量的比例,故有。然后求解EMD:
EMD求解是个线性规划问题,上面的fij是求解EMD的最优路径解,dij是上面的距离函数,然后通过下式计算S跟T的距离:
gamma作者设为0.01。下图是EMD求解距离的图解,红圈的是S,绿圈的是T,蓝线是flow值,从S到T的flow大小。
第二步:
用上面的sim函数,在S域数据集中每个类别si与T域计算sim(si,T),取topk个类别。然后用这些类别预训练网络,之后在子集上fine-tune。下图使用此法选出来的类别,左边一列是不同的细粒度数据集,右边是从ImageNet跟iNat中选出来的相似类别:
细粒度识别的实验结果如下:
绿色是最好的,红色是最低的。SubsetA、B是上面方法取的子集,绿色大体上集中于用SubsetAB的预训练。另外作者发现使用ImageNet+iNat一起预训练并未取得最好效果,精度介于ImageNet跟iNat预训练之间。说明仅仅通过此方式增大预训练集的尺度并不能提升效果。