作者参加了39个Kaggle比赛,按照整个比赛的顺序,总结了赛前数据的处理,模型的训练,以及后处理等可以助力大家的tips和tricks,非常多的技巧和经验,现在全部分享给大家。
想象一下,如果你能得到所有的tips和tricks,你需要去参加一个Kaggle比赛。我已经超过39个Kaggle比赛,包括:
Data Science Bowl 2017 – $1,000,000 Intel & MobileODT Cervical Cancer Screening – $100,000 2018 Data Science Bowl – $100,000 Airbus Ship Detection Challenge – $60,000 Planet: Understanding the Amazon from Space – $60,000 APTOS 2019 Blindness Detection – $50,000 Human Protein Atlas Image Classification – $37,000 SIIM-ACR Pneumothorax Segmentation – $30,000 Inclusive Images Challenge – $25,000现在把这些知识都挖出来给你们!
外部数据
使用 LUng Node Analysis Grand Challenge 数据,因为这个数据集包含了来自放射学的标注细节。 使用 LIDC-IDRI 数据,因为它具有找到了肿瘤的所有放射学的描述。 使用Flickr CC,维基百科通用数据集 使用Human Protein Atlas Dataset 使用IDRiD数据集数据探索和直觉
使用0.5的阈值对3D分割进行聚类 确认在训练集和测试集的标签分布上有没有不一样的地方预处理
使用DoG(Difference of Gaussian)方法进行blob检测,使用skimage中的方法。 使用基于patch的输入进行训练,为了减少训练时间。 使用cudf加载数据,不要用Pandas,因为读数据更快。 确保所有的图像具有相同的方向。 在进行直方图均衡化的时候,使用对比度限制。 使用OpenCV进行通用的图像预处理。 使用自动化主动学习,添加手工标注。 将所有的图像缩放成相同的分辨率,可以使用相同的模型来扫描不同的厚度。 将扫描图像归一化为3D的numpy数组。 对单张图像使用暗通道先验方法进行图像去雾。 将所有图像转化成Hounsfield单位(放射学中的概念)。 使用RGBY的匹配系数来找到冗余的图像。 开发一个采样器,让标签更加的均衡。 对测试图像打伪标签来提升分数。 将图像/Mask降采样到320×480。 直方图均衡化(CLAHE)的时候使用kernel size为32×32 将DCM转化为PNG。 当有冗余图像的时候,为每个图像计算md5 hash值。数据增强
使用 albumentations 进行数据增强。 使用随机90度旋转。 使用水平翻转,上下翻转。 可以尝试较大的几何变换:弹性变换,仿射变换,样条仿射变换,枕形畸变。 使用随机HSV。 使用loss-less增强来进行泛化,防止有用的图像信息出现大的loss。 应用channel shuffling。 基于类别的频率进行数据增强。 使用高斯噪声。 对3D图像使用lossless重排来进行数据增强。 0到45度随机旋转。 从0.8到1.2随机缩放。 亮度变换。 随机变化hue和饱和度。 使用D4:https://en.wikipedia.org/wiki/Dihedral_group增强。 在进行直方图均衡化的时候使用对比度限制。 使用AutoAugment:https://arxiv.org/pdf/1805.09501.pdf增强策略。模型
结构
使用U-net作为基础结构,并调整以适应3D的输入。 使用自动化主动学习并添加人工标注。 使用inception-ResNet v2 architecture结构使用不同的感受野训练特征。 使用Siamese networks进行对抗训练。 使用_ResNet50_, Xception, Inception ResNet v2 x 5,最后一层用全连接。 使用global max-pooling layer,无论什么输入尺寸,返回固定长度的输出。 使用stacked dilated convolutions。VoxelNet。
在LinkNet的跳跃连接中将相加替换为拼接和conv1x1。 Generalized mean pooling。 使用224x224x3的输入,用Keras NASNetLarge从头训练模型。 使用3D卷积网络。 使用ResNet152作为预训练的特征提取器。 将ResNet的最后的全连接层替换为3个使用dropout的全连接层。 在decoder中使用转置卷积。 使用VGG作为基础结构。 使用C3D网络,使用adjusted receptive fields,在网络的最后使用64 unit bottleneck layer 。 使用带预训练权重的UNet类型的结构在8bit RGB输入图像上提升收敛性和二元分割的性能。 使用LinkNet,因为又快又省内存。MASKRCNN
BN-Inception Fast Point R-CNN Seresnext UNet and Deeplabv3 Faster RCNN SENet154 ResNet152 NASNet-A-Large EfficientNetB4 ResNet101 GAPNet PNASNet-5-Large Densenet121 AC-GAN XceptionNet (96), XceptionNet (299), Inception v3 (139), InceptionResNet v2 (299), DenseNet121 (224) AlbuNet (resnet34) from ternausnets SpaceNet Resnet50 from selim_sef SpaceNet 4 SCSEUnet (seresnext50) from selim_sef SpaceNet 4 A custom Unet and Linknet architecture FPNetResNet50 (5 folds) FPNetResNet101 (5 folds) FPNetResNet101 (7 folds with different seeds) PANetDilatedResNet34 (4 folds) PANetResNet50 (4 folds)