胃肠道分割Baseline

Baseline跑通遇到的问题以及解决方案:

import cupy报错

一开始采用的是pip install cupy-cuda110安装成功后但是报如上图所示的错,后改用conda安装成功,安装命令为conda install -c conda-forge cupy cudatoolkit=11.0。注意安装CUDA对应的版本。

import StratifiedGroupKFold

import StratifiedGroupKFold报错显示ImportError: cannot import name 'StratifiedGroupKFold' from 'sklearn.model_selection'。后更新了scikit-learnd的版本后运行成功。

运行成功显示如下:

Baseline框架以及改进想法:

模型

Baseline模型采用的是Unet原始结构,backbone采用的是efficientnet-b1。

在Baseline中使用了segmentation_models_pytorch包,其可支持的结构如下。一般显示效果不错的是Unet和FPN。也可以尝试一些新的Unet结构比如TransUnet和SwinUnet,但是segmentation_models_pytorch暂不支持。

改进想法:模型是性能的下限,好的模型就有好的开始。Unet是在语义分割尤其是医学语义分割里比较好的模型,我所接触的医学语义分割大都是以Unet为基准进行一些魔改操作,包括:

1.Backbone的选择:目前最常用就是EfficientNet系列、ResNet系列、ResNeXt系列,Baseline中采用的是efficientnet-b1,从b2-b5都可以尝试。ResNeXt可以达到与EfficientNet相近的效果。Inception和Mobilenet也是常用的Backbone。一般会基于不同backbone的模型进行集成预测。

2.在Unet中加入其他模块:ASPP(空洞卷积)、Hypercolumn、以及CBAM和SCSE这种注意力模块。segmentation_models_pytorch支持部分操作但是高度集成不适合修改,可以下载segmentation_models_pytorch的源码进行自主的模块添加。

损失函数

Baseline中采用的是BCELoss和TverskyLoss,语义分割中可以采用的损失如下所示:

改进想法:常见有效的损失包括BCELoss、DICEloss、BCELoss+DICEloss,其中Lovaszloss有的时候有奇效,对于Lovaszloss的改进网上也有现成的方法。Focal Loss可以针对样本不平衡的情况并进行难例挖掘。好的损失可以带来不小的提升。

训练

1.Baseline采用的优化器是Adam,Adam的好处是不用特别关注怎么调整学习率,3e-4号称是Adam最好的初始学习率。但是如果可以好的调整学习率,SGD号称可以在Adam的基础上提升性能。lr_find()提供了一种寻找最优初始学习率的方式。

2.Baseline学习率调整策略StepLR,衰减位置的确定需要一定的经验和感觉,可以根据验证loss的走势调整衰减位置。Warmup + Cosine也是一种常用的学习率调整策略,每个iteration逐渐增大至初始学习率,然后余弦下降至终止学习率。CosineAnnealingLR+Snapshot Ensembles是一个循环衰减学习率获得不同局部最优模型的集成策略。

3.Batchsize和分辨率大小也是可以调整的训练参数。一般Batchsize都不会选择不合理。图像输入的分辨率大小对于模型也很关键,我遇到过不同分辨率模型的集成预测方案。或者,在训练期间进行多尺度训练,然后测试的时候选取其中某几个尺度表现优异的预测结果出来融合,提升模型对多尺度的鲁棒。

数据预处理和后处理

该部分最能体现比赛目标相关,决定性能的上限。好的预处理和后处理带来的提升很大。

1. Baseline采用的数据增强策略:

对数据增强的改进没有固定的策略,依赖于一些经验和直觉。比较重要的是可以对模型预测中的bad case做针对性的调整。 还有一些针对大图像需要切割成patch的各种策略,目前来看应该不适用于本数据集。使用额外数据集进行预训练也是常见的方法,但是额外数据集不容易获得。

2.后处理中有一些通用的技巧:包括TTA(将同一图像进行不同几何变换后预测,将预测结果变换回来后取预测平均值)、集成预测(TTA也属于集成预测,还包括训练不同模型得到不同的预测,预测结果可以投票或者取平均,或者采用stacking的方式,利用机器学习模型对预测进行训练后得到集成预测结果)。

3.利用伪标签进行半监督学习,变相扩增数据集。有时有效有时过拟合,需要谨慎使用。如果验证集或者测试集出现了训练集没有的样本种类,该方法更可能有效。比较安全的方法是:(1)筛选预测置信度高的样本作为伪标签,如分类里,再test里的预测概率是大于0.9的,则视为正确的预测,此时将其作为伪标签来使用。(2)帮第一次的伪标签扔进去训练集一起训练后,得到新的模型,按相同的规则再次挑一次伪标签出来。(3)如此不断循环多次,置信度的阈值可以适当作调整。实际使用中可能没那么复杂只进行了第一步。

4.一些新颖的或者针对本次比赛的idea可以从kaggle的讨论区获得,经常会有一些不错的想法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容