转载于Gary https://zhuanlan.zhihu.com/p/54743461

比赛介绍

任务介绍
本次比赛的问题是场景识别 定位的是蛋白质所处位置的识别,例如在细胞液,细胞核里之类的 依输出分所属多标签分类(Multi-lable Classification)
难点及数据介绍
首先一张示例图如下:

  • 一个样本由四个"通道图"组成(分成四张存储,每个"通道图"单通道),2048*2048大小,官方提供了插值缩小为512大小的数据
  • 外部数据70k(每个"通道图"都是rgb格式)
  • 图片伪重多,然后四个"通道图",id相同但实例不同的情况也很多,如下

    难点:
  • 对比我们发现了外部数据总共有4 * 3个通道,而官方数据只有4 * 1个
  • 最麻烦的是伪重问题,伪重造成验证集leak,不能制作一个好的验证集

外部数据处理后加入训练集,要制作一个好的验证集就得跨过两道坎

  • 外部数据无论咋处理总是和测试集分布有些不一样的
  • 训练集里伪重过多,如何保证验证集不leak

solution

model config1

  1. 数据增广(亮度对比度调整,crop_resize,flip,other)

    1.1、 我们总共用了12倍的TTA
    1.2、亮度对比度主要用于让模型对外部数据和官方数据差异的鲁棒性更好
    1.3、crop_resize对于显微镜下实例大小方差巨大的情况,带来了较好的线下收益 受限于调试成本,为了不避免数据增广带来的分布偏移问题,于是只选择性的尝试了上述几种

def get_augumentor(mode):if mode =='train':return iaa.SomeOf(n=(1,6),children=[iaa.Noop(),iaa.Sequential([iaa.Add((-5,5),per_channel=True),iaa.Multiply((0.8,1.2),per_channel=True)]),iaa.Crop(percent=(0,0.15)),iaa.Affine(shear=(-16, 16)),iaa.OneOf([iaa.Affine(rotate=90),iaa.Affine(rotate=180),iaa.Affine(rotate=270),iaa.Fliplr(1),iaa.Flipud(1),])])elif mode == 'TTA0':return iaa.Noop()elif mode == 'TTA1':return iaa.Flipud(1)elif mode == 'TTA2':return iaa.Fliplr(1)elif mode == 'TTA3':return iaa.Affine(rotate=90)elif mode == 'TTA4':return iaa.Affine(rotate=180)elif mode == 'TTA5':return iaa.Affine(rotate=270)elif mode == 'TTA6':return iaa.Sequential([iaa.Crop(percent=0.15),iaa.Flipud(1)])elif mode == 'TTA7':return iaa.Sequential([iaa.Crop(percent=0.15),iaa.Fliplr(1)])elif mode == 'TTA8':return iaa.Sequential([iaa.Crop(percent=0.15),iaa.Affine(rotate=90)])elif mode == 'TTA9':return iaa.Sequential([iaa.Crop(percent=0.15),iaa.Affine(rotate=180)])elif mode == 'TTA10':return iaa.Sequential([iaa.Crop(percent=0.15),iaa.Affine(rotate=270)])elif mode == 'TTA11':return iaa.Crop(percent=0.15)else:raise ValueError("aug error")
  1. Models
res18 (batchsize=64)
res34 (batchsize=32)
bninception (batchsize=32)
inceptionv3 (batchsize=32)
xception (batchsize=24, P40-24G)
se-resnext50(batchsize=24, P40-24G)

其中模型对batchsize大小十份敏感,正确来说是模型对参与batchnorm计算的样本数十分敏感,需用sync-bn或者P40(24G)显存实现

同时,如果按照榜上的分数来体现,融合有效的模型为res18,xception,se-resnext50,融合无效的模型原来是模型之间的差异性较小。

  1. lr schedule
    3.1、Nadam优化器
    3.2、阶段性学习率衰减(根据小模型的log而手动设置了衰减的位置)
    3.3、差分学习率(其中初层用于转换通道的卷积和最后的model head同学习率,中间的backbone学习率小一倍)

model config2
只简述一下与config1差异的部分

1. 优化器和schedule的不同
1.1、lr schedule
1.2、SGD 优化器(init=5e-2, momontum=0.9, weight_decay=4e-4)
1.3、cosine lr

2. 数据增强

fair_img_tsfm = Compose([Flip(p=0.75),Transpose(),RandomBrightnessContrast(brightness_limit=(-0.25, 0.1), contrast_limit=(-0, 0)),])weighted_img_tsfm = Compose([ShiftScaleRotate(rotate_limit=45, shift_limit=0.1, scale_limit=0.1, p=1,border_mode=cv2.BORDER_CONSTANT)])

3. custom f1 loss

fair_img_tsfm = Compose([Flip(p=0.75),Transpose(),RandomBrightnessContrast(brightness_limit=(-0.25, 0.1), contrast_limit=(-0, 0)),])weighted_img_tsfm = Compose([ShiftScaleRotate(rotate_limit=45, shift_limit=0.1, scale_limit=0.1, p=1,border_mode=cv2.BORDER_CONSTANT)])

4. 杂项
res18/34 (96batchsize + float16 + 过采样)

Threshold
在阈值的选取上,我们试过多种固定阈值,和search不同类不同阈值,但根据public榜的分数都没有很好的效果,最终选取了我手调适应public最高分的threshold=0.205

postprocess
基本是利用了伪重的性质 将测试集中的相似图片的预测进行共享,其中预测选择图片质量较高的那张,约0.002的收益

ensemble
外部数据灰度化和外部数据取高范数的通道两种方案得到了两份数据 两份数据上训练出来的模型进行差异化集成 model config1 和 config2进行集成

其中一个比较具有通用性的trick,可供大家参考 cnn with image patches (lb 0.619) 图片分成多个patch,将baseline模型对这些块输出分数,拿那些响应最高的patch重新训练一次模型, 相当于一个hard attention

Kaggle-人类蛋白质图谱图像分类(Human Protein Atlas)相关推荐

  1. HPAIC人类蛋白质图谱分类挑战赛金牌经验分享

    雷锋网(公众号:雷锋网)按:本文由极链AI研究院投稿. 近期,由Kaggle主办,Leica Microsystems和NVIDIA赞助的HPAIC(Human Protein Atlas Image ...

  2. HPAIC人类蛋白质图谱分类挑战赛金牌经验分享 1

    雷锋网(公众号:雷锋网)按:本文由极链AI研究院投稿. 近期,由Kaggle主办,Leica Microsystems和NVIDIA赞助的HPAIC(Human Protein Atlas Image ...

  3. Kaggle Human Protein Atlas 比赛总结—如何闯入Top1%拿到金牌

    点击我爱计算机视觉标星,更快获取CVML新技术 本文来自Gary知乎的文章,感谢大佬分享经验.同时Gary也在52CV-竞赛交流群和求职招聘群里,正在寻找实习机会,欢迎进群与大佬交流- 前言 gith ...

  4. 送书 | 人类细胞图谱计划发起人Aviv Regev博士讲单细胞基因组学

    看过都说好系列 NGS系列文章包括NGS基础.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞测序分析 (重磅综 ...

  5. 清华张学工团队入选“人类细胞图谱计划”首批项目

    来源:测序中国 作者:Reggie 本文长度为2600字,建议阅读3分钟 本文为你介绍"人类细胞图谱计划"公布首批38个项目,并分享清华大学张学工教授专访. 美国太平洋时间2017 ...

  6. HPA:人类蛋白图谱数据库

    欢迎关注"生信修炼手册"! HPA全称是Human Protein Atls, 利用转录组学和蛋白质组学技术,从RNA和蛋白水平研究人类不同组织和器官中的蛋白表达情况,网址如下 h ...

  7. 人类一败涂地mac版(human fall flat中文版)

    在手机端很火爆的人类一败涂地游戏已经在Mac上线啦!人类一败涂地human fall flat for mac 破解版的玩家需要操控梦境中的主角bob利用物理效果来解开谜题,能否逃出梦境就看你的啦! ...

  8. Cell综述:人类转录因子(The Human Transcription Factors)

    目录 一.How Transcription Factors Are Identified(如何鉴定转录因子) 二.Determining TF DNA-Binding Motifs(确定TF的DNA ...

  9. Science | 利用深度学习搭建蛋白质功能位点(Scaffolding protein functional sites using deep learning)

    参考文献: https://www.science.org/doi/10.1126/science.abn2100 文献提供的代码地址: https://github.com/RosettaCommo ...

最新文章

  1. shiro 解决 跨域(仅端口不同) 登陆 问题
  2. 使用MySql保存session
  3. 【系统平台】模拟器-通道-模型-图形配置
  4. spring之二——使用maven创建一个java project
  5. linux(4):Linux逻辑卷详解总结
  6. sqlmap注入检测经验0x01
  7. 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法
  8. Smart/400开发上手2: COBOL批处理程序处理过程
  9. 51单片机18B20测温1602LCD显示
  10. OpenCV-白平衡(灰度世界算法)
  11. arctanx麦克劳林公式推导过程_实用反三角函数运算公式
  12. 优秀互联网面试题总结
  13. 蓝牙 - 技术演变史
  14. tomcat--catalina
  15. 数字化转型 — 新能源汽车 — 产品设计与研发流程
  16. 自己动手做聊天机器人 二十九-重磅:近1GB的三千万聊天语料供出
  17. 系统试运行报告是谁写的_煤矿安全监控系统升级改造验收方案
  18. java数据库图书销售系统_SQL+java数据库课程设计,图书销售管理系统
  19. 程序猿光棍节闯关游戏
  20. 简历上如果出现过于高大上的项目,反而过犹不及:再论如何通过项目引出技术

热门文章

  1. 飞书机器人/应用开发
  2. Python实战—学籍注册小程序
  3. 前端行为层,表示层,结构层的分离
  4. 数字化工厂建设智能车间的意义与应用场景
  5. python蓝桥杯 成绩统计
  6. Linux系统入门教程:五大图像处理软件
  7. 浅谈 高并发 处理方案
  8. 非线性ode及在工程中的应用第一次大作业
  9. java农机收割机租赁预约系统springboot+Vue
  10. 台式计算机在打开程序时 风扇就响,如果台式机正在运行时风扇响了怎么办?...