Time:6.26-7.27
Location: SYSU
Contest: MICCAI 2018 SKIN Lesion Analysis Towards Melanoma Detection
Task: Lesion Segmentation
Rank: 2966

严格意义上我第一次打这种比赛。除了做白日梦,无用功,大概就只能搬搬砖了。有很多经验教训,只能说too old, too naive。下面从数据预处理,模型选择与实现,后处理,以及模型集成这几个方面总结一下这次比赛。

数据预处理

预处理需要分析训练集本身的特性,结合任务的特点。分割给了2594张图片作为训练集,尺寸差异很大。

Resize

由于GPU显存、CNNs以及本身scale不统一的问题,需要对数据做resize。

Q1: resize到什么大小?
A1: 一般300x400, 256x256, 512x512

Q2: resize的时候需要保持比例吗?
A2: 借鉴往年的经验,保持了大部分图片的宽高比为4:3。但是最后Top1的MT并没有保持比例,而是直接Resize,因此这一点存在争议,我觉得一组对比实验确定一下就可以了。

Preprocessing

对图像归一化;
尝试了使用或者添加HSV通道;(崔哥看H通道结果并不好,弃;最后MT添加了SV通道);
尝试了Color Constancy (没有提升);
尝试了Gamma校正,然并卵……

Augmentation

数据量偏少,需要做增强。这个比较实用,但是过于保守,应当考虑到皮肤病的病灶区域形状多变性,所以Flip,Rotate, Zoom可以都做一些,尺度也可以大一些。

Kth folder Cross Validation

多折交叉验证1 。 在Local Validation Set以及Public Validation Set上的性能并不能完全代表在Private Validation Set上的性能,所以做多折交叉验证一方面增强模型的鲁棒性,一方面相当于做了模型的集成。
这个时候需要我们去shuffle数据集,划分成5份。
Q3: 先做augmentation还是先划分数据集?
A3: 先做augmentation。保证增强后的数据集足够大。

我和崔哥两个人主要负责这个task,但是我俩数据预处理一开始就没有统一,无论是resize到什么尺寸还是normalization,间接导致我俩模型性能不能比较,这个问题还是相当严重的,不能及时发现某一网络的性能,从而快速调整,影响整体进度及结果。因此到最后一周多,统一了预处理但没有时间去做交叉验证了。模型的target function更接近Public Validation Set

模型选择与实现

比赛和平时科研的最大不同在于,比赛更看重模型最终的性能,而不是很在意其创新性。对于比赛而言,做baseline的最好方法就是选一个当前top的模型,不做别的动作,直接调整至输出一个不错的结果。

选择

这个就需要依赖平时的积累了,读最新的顶会或者A类期刊的论文,关注新的高性能高表现的网络,这些模型都可以作为备选,以及一些模型中某一组件(tech),比如CRF,multi-scale,ASPP等,通过做实验去证明这些结构的有效性。

模型实现

这就要讨论到用啥主流框架的问题了,我们都是tf的‘脑残粉’,因此一直可怜巴巴痛并快乐地debug。但是遇到改一些架构问题的时候,因为对tf的掌控有限,所以并不得心应手。被老板诟病过很多次,要么换pytorch,要么keras

训练

训练的时候,做好实验记录!2 模型参数初始化,最好还是把训练好的网络的权重拿过来直接用。

打比赛,用pytorch或者keras能快速实现网络、我们的一些想法,把注意力集中到如何提升性能这一方面来,而不是某些技术细节。但是技术细节却是我们比较看重的长期的个人能力,因此之后估计也是走双修的路线吧。

后处理Post_Processing

是否需要后处理取决于模型的结果,根据predict的结果,分析模型有哪些做的不够好的地方,是模型本身的缺陷还是数据的问题,为了最终的得分的话,都可以做后处理,去除一些共性的问题。

比如Task1规定的,每个图片可能有不止一块lesion区域,但是label只标记了最中间、最主要的那一块。这就导致模型识别出了小块的lesion,但是label没有标记,反而会影响得分。因此我们后处理做了求最大连通区域,去洞操作。

模型集成

为了综合提升模型的性能,最终提交的结果需要对单个、多个模型做集成。

单模型集成

单模型的集成分为两大类。
- 多层特征融合:比如尝试改进U-Net的结构,将Encoder层的特征通过卷积再融合到Decoder的最后一层;或者采用简单的multi-scale,将输入数据调整为不同的scale,分别提取特征,最后做融合。
- 网络快照集成法:利用了网络解空间中的局部最优解来对单个网络做模型集成。通过循环调整网络学习率可使网络依次收敛到不同的局部最优解处,取不同epoch处的模型进行融合。

但是这里我们做的不够好,比较合理的做法是将不同scale的特征融合到一起的,但是囿于自身技术,没能实现。

多模型集成

多模型集成的方法相对较多,看方法名就可以知道大概做法了。需要注意的是,前面的个别单模型集成方法也可以运用到多模型当中,多模型的一些方法也可以看作是单模型的。

多模型生成策略

同一模型不同初始化;
同一模型不同训练轮数;
不同目标函数;
不同网络结构。

多模型集成方法

直接平均法;
加权平均法;
投票法;
留一法。

在网络训练的过程中使用dropout也算是多模型集成的一种。

实际操作中单模型,多模型集成相结合!

Summary

我研究了3个星期的deeplabv3+,最后表现并不好,因此最后一周meeting的时候,这个model被kill掉了,最后熬了一夜只做了U-Net的各种集成。
虽然没有取得靠前的名次,但是收获了很多宝贵的经验。从如何打比赛到如何做实验、保存实验记录,以及总结了一套个人感觉比较完善的工作流程,一些Tips3

  1. 这个在台大李宏毅老师的机器学习视频中有详细的介绍。

  2. 实验整理请看👉🏻 训练网络管理实验的科学探索💪🏼

  3. 实验整理请看👉🏻 训练网络管理实验的科学探索💪🏼