pytorch 图像分割的交并比_小白通过kaggle学习few shot图像分类笔记--通过鱼尾对Humpback Whale分类...

1.题目简介

这个题目是通过鲸鱼尾巴图像对座头鲸分类,比赛特点是多达5000多类,因此是是few-shot问题,和一般分类不一样。Humpback Whale Identification在kaggle一共举办两次,一次是2018年中旬的playground比赛,一次是2019年初的给牌的feature比赛,其中前者有一个分享Whale Recognition Model with score 0.78563 为后者提供了很强的baseline.

2.metric

这次比赛使用的是MAP@5,explanation-of-map5-scoring-metric 有解释。

3.EDA

Whale Recognition Model with score 0.78563 Duplicate Images | Kaggle duplicate-images第一个比赛被发现了图片中存在很多重复图片,然后用phash进行了清理,这个重复样本检查应该每个cv任务前都做一回,我后来在aptos那个比赛靠照着做混了个金牌kernel. 

eda-distributions-images-and-no-duplicates 2000多种鲸鱼只有一张图片,30%的鲸鱼有5-73张图片,剩下40%被标为new_whale(相当于others),这是一个标准的one-shot或者few shot问题。第二个比赛出题方把重复样本删除了。

humpback-whale-id-data-and-aug-exploration 在这个比赛既有彩色图片也有黑白图片。黑白图片占47%。

eae72b98e1dd8908466e014b5a386c03.png

image-size-and-rate-of-new-whale 在这个Notebook里发现尺寸和类别存在一定的相关性,不过从后面的比赛来看,即便resize,模型一样的学的到尺寸的leak信息,因此不必要将其输入到模型中。

images-containing-text 发现有些图片中存在一些文字,可能会存在一些信息。

815b9792ccdcd0f62ca285d09f8bcd62.png

older-images-tend-to-be-new-whale EXIF里的时间信息可能有用,和一些鲸鱼类有关

4.preprocessing

Whale Recognition Model with score 0.78563
1.鲸鱼尾巴图片有正反,有些上下反的的图片需要翻过来 

2. 数据集中同时存在黑白和彩色图片,在作者的早期实验中,注意到当Siamese比较两个彩色图像或两个黑白图像时,模型获得了大约相同的精度。但是,将彩色图像与黑白图像进行比较会导致精度大大降低。最简单的解决方案是将所有图像转换为黑白图像,即使在比较原始彩色图像时也不会降低准确性。

3.给尾巴做一个框,把周围去掉.尽管数据集中的许多鲸鱼图片已经在尾巴附近剪裁得很紧,但在某些图像中,尾巴仅占据了图片的一小部分。放大图片的相关部分可为分类模型提供更高的准确性.在Bounding Box Model | Kaggle 作者自己标了1200个框,然后训练了一个模型. 在另一个kernel里,也有用opencv来做切割的,Cropping with normlized aspect ratio

ec8207c419b3f7af190d783e3b5ec205.png

bounding-box-data-for-the-whale-flukes 讲如何在旋转后仍然保持框的方形正向不变

a782fcaf1f3e5a890125813d6416032e.png

generalizing-whale-masks-with-masked-results 直接做了一个语义分割的模型将尾巴分出来

ed44d8f833dda8885c4421a199c0140b.png

image-segmentation-using-color-spaces 介绍了使用opencv在不同color spaces显示图片

function-to-clean-text-in-images 使用opencv将图片下的文本删除

5.数据增强

Whale Recognition Model with score 0.78563 没用api,自己实现增强

(rotation, shear, height_zoom, width_zoom, height_shift, width_shift)和(cropped)

Humpback Whale ID: Data and Aug Exploration , Whales: Some Image Processing 介绍了keras的数据增强api,并做了可视化

(random_rotation, random_shift, random_shear, random_zoom,random_channel_shift, transform_matrix_offset_center, img_to_array)

Data augmentation with keras into CNN ImageDataGenerator的使用及可视化

image-augmentation-using-skimage 使用skimage的数据增强演示

1st solution

翻转鲸鱼图片变为新的类,前三名都用这个trick,应该是进入钱区的关键,kaggledays时候seutao人脸识别的时候就不能用,所以很多人想不到

ddf9cd2dfc0114a79e69e87499562517.png

增加了2000个Pseudo labels样本

2nd place code

blur,grayscale,noise,shear,rotate,perspective transform;

3rd place

average blur, motion blur,dd, multiply, grayscale,scale, translate, shear, rotate align or no-align

6.模型(Notebook)

6.0 常规分类模型

keras-cnn-starter(keras)本次比赛Notebook的基本分类模型得分都很低,基本没有超过0.35的。唯一可看的就是一群fork骗赞的选手,把backbone换了个遍。

resnext50-sz448-lb-0-657 (fastai)xception-bbox-yolov3-whale(pytorch) 通过加大尺寸,将adam换sgd,使用前面提到的加框,调new whale阈值使基本分类模型也达到了0.65+的分数

6.1 Siamese神经网络

Whale Recognition Model with score 0.78563  (keras)

Siamese神经网络比较两个图像,并确定这两个图像是从同一条鲸鱼还是从不同的鲸鱼中获取。通过将测试集中的每个图像与训练集中的每个图像进行测试,可以通过对图片进行匹配排序来识别最可能的鲸鱼。Siamese神经网络由两部分组成。卷积神经网络(CNN)将输入图像转换成描述鲸鱼的特征向量。具有相同权重的相同CNN用于两个图像。CNN称为branch model.分支模型可用常见的分类模型作为预训练模型。head model用于比较CNN的特征向量,并确定鲸鱼是否匹配.

在上面那个链接里,作者详细的介绍了Siamese神经网络概念和branch model,head model,Image selection,Matching whale examples的设计思路.(我就不在贴谷歌翻译了),在Training procedure,作者充分体现了调参里学习率调度的重要性,分别用Learning rate,L2 regularization,match矩阵的k值岁epoch变化来提升模型,最后通过调阈值来得到最佳的new_whale处理方法.作者最后又用高可信的test部分pseduo label加入训练再跑一个模型并用于融合.

linear-assignment-problem-and-how-it-applies 对上面的Notebook里选择image的代码做了详细的介绍,是paris尽可能做到hard

siamese-pretrained-0-822 在19年比赛得到了0.822,siamese-two-pretrained-weights-0-855 把branch model替换为预训练模型可得到提升

Siamese网络由于需要用到匹配,复杂度太高,其实并不适合本次比赛的分类任务。

6.2 metric learning神经网络

Fastai Starter Pack 一位fastai的员工提供的基于fastai的开源文件,在基础分类网络上每个训练示例均包含两个图像,其中包含不同鲸鱼的图像和相同鲸鱼的图像。在生成初始训练数据时候。是先做一个普通的分类模型,然后鲸鱼图像配对是基于CNN特征之间的欧式距离。在距离最远的k个样本中选择。在正式模型时候,每对图像通过resnet50的卷积部分训练,模型输出图像A的标签预测,图像B的标签预测,图像A的4096长度特征向量和图像B的4096长度特征向量。loss上cross_entropy_loss上增加了ContrastiveLoss,这样使让正样本对之间的距离尽可能的小,负样本对之间的距离尽可能的大。最后分数可以达到0.9.

similarity-densenet121-0-805lb-kernel-time-limit post设计了一种损失函数,该函数允许在每个批次中执行所有对比。将ResNeXt50 改为 DenseNet169也得到了提升。这个Notebook也得到了高赞,讲的很详细就不搬了

7.模型(winner solution)

1st solution

两种loss,另外使用了两种feature做tripletloss ,backbone只有senet154最好

64c503b7773e14ac7f61eded20205cf8.png

input size is (512, 256)

四个通道:RGB + masks 作为输入
Step 1: Training within all labels with >10 samples (this step helps to converge faster and easier)
Step 2: Training with all samples, and fixed all of the networks except the last two layers.2nd place code

三种loss:arcface loss + triplet loss + focal loss; 三个backbone:resnet101, seresnet101, seresnext101;

1706ffc22f9654bd56698df998aac1b3.png

3rd place solution

感谢了手工标注框和建立检测模型的作者,认为帮助很大。

使用了ArcFace模型,最后一个conv层替换为o flattening -> BN -> dropout -> FC -> BN. backbone用的densenet121。涉及到ArcFace和landmark,看不懂。

4th Place Solution

使用Siamese网络,详细的介绍了一些降低复杂度的技巧。

5th solution

使用Siamese网络,加了对抗训练,forming adversarial pairs for un-matched whales

第四名第五名都没有用蛙神的翻转trick,这么看Siamese网络并不比直接分类的模型差,但是时间复杂度就没法比了

7th place Solution

9th place solution 使用了ArcFace模型

10th Place Solution

一位使用Siamese网络,使用不同的backbone,不同的增强策略。通过翻转图片来增加图片pairs。另一位使用metric learning,使用margin loss。

8.模型可视化

Whale Recognition Model with score 0.78563 可视化了Siamese

9ad1f7b90a5ba0960d9041b86c408f63.png

9.后处理

主要都是针对MAP@5进行优化在few shot这个场景里的优化

1st solution 手动调整的顺序,如果有些类从未出现过在top1,则按一定规则向前调整

4th Place Solution 对训练集里出现次数少(如N=1)的样本按一定规则向前调整

10.知乎相关文章

机器之心:识别座头鲸,Kaggle竞赛第一名解决方案解读

kuvli:Kaggle-whale 少样本数据不均衡差别细微开集分类识别问题小结

千佛山彭于晏:Humpback Whale Identification比赛top方案总结

11.小结

去年中旬本想学习个分类比赛入门,但其实不适合小白学习.但是看了很多Notebook一头雾水,然后就不了了之。kaggledays听了seutao的分享才有点认识,最近先学习了几个普通分类的比赛,然后重新再来看这个比赛,又请教了earhian,才理解为什么solution是分类而不是匹配的.看来cv还是要有人带指点才行,光看Notebook自己闷头想还是比较迷茫。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值