448. SIIM-FISABIO-RSNA COVID-19 Detection | siim-covid19-detection
首先,祝贺所有的获奖者,非常感谢主办方举办了如此有趣的比赛。也非常感谢我的队友 @ryunosukeishizaki 和 @rinnqd !!
我是日本的一名麻醉科医生。COVID-19 患者到处都在增加,面对着大量的胸部 X 光片。通过机器学习对 COVID-19 肺炎进行分类和检测是非常有趣且有意义的,这也是我参加这项任务的动力。
在这里我将分享我的那部分解决方案。
我所做的工作主要包含 3 个部分:2 种基线分类建模 & 不透明度检测建模 & 后处理。
所有的实验和提交都是使用 512x512 的图像完成的。我根据讨论(链接)选择了用于训练的图像,每个 study_id 选取 1 个 image_id(如果一个 study_id 有多张图像,则只使用带有 bbox 的图像)。
交叉验证:多标签分层 kfold。
毫无疑问,带有辅助损失的模型比没有的要好。我的基线模型是 2 种类型的 EfficientNets 分类器,共有 5 个类别(Negative, Typical, Indeterminate, Atypical, 和 None)。
・类型 1
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
###blocks###
self.logit = nn.Linear(n_features, 5)
self.mask = ...
def forward(self, x):
###blocks###
mask = self.mask(x)
logit = self.logit(x)
return logit, mask
・类型 2
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
###blocks###
self.logit1 = nn.Linear(n_features, 4)
self.logit2 = nn.Sequential(
nn.Softmax(),
nn.Linear(4, 4),
nn.ReLU(),
nn.Linear(4, 1))
self.mask = ...
def forward(self, x):
###blocks###
logit1 = self.logit1(x)
logit2 = self.logit2(logit1)
return logit1, logit2, mask
我制作了自定义损失函数:
CCE * 0.8 (4 类损失) + BCE * 0.1 (1 类损失) + BCE * 0.1 (分割损失)
数据增强:水平翻转、平移缩放旋转、随机亮度、Cutout。
团队合并后,他们使用预训练方法改进了我的基线模型!@ryunosukeishizaki 还尝试了各种类型的 EfficientNet,这对于集成是必要的。谢谢。
最终提交包含 4x efnetb3 和 3x efnetv2l。
最终集成 CV: 0.521 / 0.833 (5 折 7 个模型集成)
Public: ???
因为这是我第一次接触目标检测比赛,我在这上面花了很多时间。最终准备了 5 折 4 个模型:YOLOv5x, EfficientDetD3, EfficientDetD4, EfficientDetD5。
在使用肺炎检测数据集(RSNA Pneumonia Detection Challenge)对所有模型进行预训练后,每个模型的训练都是使用我上面选取的训练数据完成的。
YOLO 数据增强:角度、平移、缩放、左右翻转。
EfficientDet 数据增强:水平翻转、随机亮度、Cutout。
每个模型的 CV 如下(5 折平均值):
YOLOv5x: 0.5428 / 1.0 (0.0904 / 0.1666)
EfdetD3: 0.5526 / 1.0 (0.0921 / 0.1666)
EfdetD4: 0.5436 / 1.0 (0.0906 / 0.166