kaggle鲸鱼比赛kernel 第三名 解读6-arcface

https://www.kaggle.com/c/humpback-whale-identification/discussion/82484

数据集: 随机采样400个 id,包括有两个id 和110个新鲸鱼的,

训练集: 除了新鲸鱼外的所有图像

使用水平翻转将id 加倍

模型

使用了bounding box 以及landmark 

使用了Radek Osmulski 的注解( https://www.kaggle.com/c/humpback-whale-identification/discussion/78699).没有你的贡献,我无法取得如此高的分数。

做了 5fold 的交叉验证,

iou:0.93

whale identifier

使用了 arcface,最后一个卷积后的层被替换成了flattening -> BN -> dropout -> FC -> BN.

densenet121

m 0.5 (the default value of the paper)

weight decay 0.0005, droupout 0.5

数据增强:

平均模糊,动作模糊,

加,乘,灰度

对齐或者不对其

训练:

Adam

学习率  0.00025->0.000125->0.0000625

推论:

获取融合特征

对于每个图像,使用了5个5 bounding boxes and landmarks 来得到多个特性向量。

对于每个id ,所有特征向量的id 作为最终的融合向量。

获得测试图片的 embedding feature。

对于每张图片,生成多个特征向量,并且使用特征向量的中心。

计算相似度:

用上述两个特征向量的余弦相似性作为相似性的度量。

选择阈值:

新鲸鱼的使用比例为0.276

以下为最终方法的过程:

没有landmark

起初,去掉了训练集中只有一个image的id 和所有的新鲸鱼,为了推论,训练集中最相似的图片的id 作为预测的id。

Public LB: 0.90, Private LB: 0.90

使用了相同id 的所有特征的feature 时,

Public LB: 0.942 / Private LB: 0.939

使用了weight decay  0.0005

Public LB: 0.946 / Private LB: 0.946

包含了训练集中只有一个图像的id

Public LB: 0.963 / Private LB: 0.961

使用landmark

当使用对其图像的时候,网络训练地更快,但是分数没有提高。

Public LB: 0.962 / Private LB: 0.959

有些图像的bounding box 和landmark 非常poor,似乎会降低score,所以我使用了非对齐的图像

 Public LB: 0.965 / Private LB: 0.961

最后,我通过水平翻转将id 翻倍,翻转的图像有不同的id,但视觉上非常相似,因此,我将翻转的对数值设置为零,以防止流动梯度。

Public LB: 0.968 ~ 0.971 / Private LB: 0.965 ~ 0.968

ArcFace 算法:

论文链接:https://arxiv.org/abs/1801.07698 

代码链接:https://github.com/deepinsight/insightface

提出一种新的用于人脸识别的损失函数:additive angular margin loss,基于该损失函数训练得到人脸识别算法 ArcFace(开源代码中该算法取名为insightface,二者意思一样) ArcFace 的思想是(additive angular margin)和SphereFace以及不久前的CosineFace(additive cosine margin )有一定的共同点,重点在于: 在ArchFace 中直接在角度空间(angular space) 中最大化分类界限,在CosineFace 是在余弦空间中最大化分类界限。

不管是SphereFace,CosineFace 还是ArcFace 的都是基于softmax loss 修改得到的,因此公式1 就是softmax loss 损失函数

kaggle鲸鱼比赛kernel 第三名 解读6-arcface_第1张图片

首先把偏置bj 设置为0,然后权重和输入的内积用下面的式子表示。

当用L2 正则化处理wj 使得|| wj||=1,,L2  正则化就是将wj 向量中的每个值分别除以wj 的模,从而得到新的wj,新的wj 的模就是1,从公式1就可以得到下面这个式子,这一步操作在sphereFace ,CosineFace 中都有做。

kaggle鲸鱼比赛kernel 第三名 解读6-arcface_第2张图片

然后一方面对输入xi 也用L2 做正则化,同时再乘以一个scale 参数s;另一方面将cos(θyi) 用cos(θyi+m),这部分是ArcFace 的核心,公式也很简洁,m 默认取0.5,于是就得到了公式9,L7就是additive angular margin loss。在限制条件(10)中,前两个正是对权重和输入特征的L2正则化处理。 

kaggle鲸鱼比赛kernel 第三名 解读6-arcface_第3张图片

本文会对比sphereFace 和CosineFace ,因此这里给出SphereFace 中的angular  softmax loss 的公式:

kaggle鲸鱼比赛kernel 第三名 解读6-arcface_第4张图片

和CosinFace 中的additive margin softmax loss公式: 

kaggle鲸鱼比赛kernel 第三名 解读6-arcface_第5张图片

接下来看几个损失函数的分类边界(decision boundary) 这里以二分类为例,对于二分类 而言,分类边界就是样本属于两个类别的概率相等,而概率就是前面的公式1,3,4,8,9 中log 函数的输入。

https://blog.csdn.net/u014380165/article/details/80645489

 

 

 

 

 

你可能感兴趣的:(图像分类)