Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现

Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现

  • 解决方案
  • 代码执行流程

解决方案

  • 使用的模型是retinanet,其中的两个retinanet模型,resnet-50和resnet-101使用了keras进行了优化,并且已经在ImageNet上做了预训练。Retinanet网络用于解决数据不平衡问题,即正负样本差距较大的情况;

  • 将25684张图像分为:训练集95%,验证集5%。没有使用高分辨率的图像,而是使用了224 x 224分辨率的图像,作者认为在该任务中不需要使用高分辨图像,另外这也使得训练过程更加高效;

  • 数据增强:rotation, translation, scaling, horizontal flipping, 以及在图像上增加随机常数(想法来源于post by @ZFTurbo);(train.py)
    Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第1张图片

  • 为了匹配focal loss 论文,训练参数做了如下修改;
    Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第2张图片

  • 在每个epoch后,计算score threshold,提高验证集上的最大约登指数(这一点不是特别理解,因为代码没有跑完一个epoch,看不到每个epoch发生的情况);

  • 在后处理阶段,作者使用了Faster-NMS, 比通常tensorflow自带的NMS效果要好;

  • 作者从两个训练的神经网络中取重叠边界框的加权平均,使用每个网络中框的得分作为权重。使用了一个单独的更高阈值来决定是否应该保留孤立框 ;(predict.py
    Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第3张图片

  • 对最终所有剩余的bbox采用一个固定的百分比进行缩小(边界框收缩);
    在这里插入图片描述

代码执行流程

  • 首先,必须按照作者给的环境运行,不然中途会出现各种错误。我就是在尝试修改了很多bug后才从新配置的环境,出现的错误基本都是各个包的兼容问题;
    Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第4张图片

我创建了一个python3.6.6的环境,上述包可以在该目录下执行:
pip install -r requirements.txt 一并安装;

  • 然后按照作者给的readme文件执行相应步骤,这里在执行
    python setup.py build_ext --inplace 时会报错
    Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第5张图片
    需要下载Visoul Studio 生成工具 中的2019版去编译setup.py文件(需要勾选右侧的两个蓝色小),安装空间需要较大,所以我没有安装到C盘;
    Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第6张图片
    然后执行prepare_data.py划分数据集
    Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第7张图片
    Git Bash中分别执行 train_50.shtrain_101.sh文件(激活虚拟环境再执行),这两个文件会去调用train.py文件进行训练。Kaggle: RSNA 肺炎检测挑战——第三名解决方案分析及代码复现_第8张图片

由于训练时间太长,我只运行到第一个epoch的第12步。执行完这两个retinanet网络后就可以执行predict,py文件。(当然,也可以将代码中的25个epoch改小,以及每个epoch的step也改小去执行)

你可能感兴趣的:(人工智能,tensorflow)