349. Understanding Clouds from Satellite Images | understanding_cloud_organization
如果你能为每个空掩码预测出空掩码,并为每个非空掩码预测全掩码(即用 rle = '1 183750' 预测每个像素),那么你的CV(交叉验证分数)就是0.686!!因此,一个完美的分类器甚至不需要做分割就能获胜。以下代码输出的结果就是0.686:
train = pd.read_csv('../input/understanding_cloud_organization/train.csv')
train['pred'] = np.where(~train.EncodedPixels.isna(),'1 183750','')
train['dice'] = train.apply(lambda x: kaggle_dice(x['EncodedPixels'],x['pred']),axis=1)
print( train.dice.mean() )
我将大部分精力集中在构建分类模型上,通过集成两个“疯狂”的分类器,最终达到了78%的分类验证准确率(在33%的留出集上,即3折交叉验证)。第一个模型有4个骨干网络,从4张不同尺寸的缩放输入图像(一半、四分之一、六分之一和八分之一大小)中提取特征。
base_model0 = Xception(weights='imagenet',include_top=False,input_shape=(None,None,3))
base_model1 = Xception(weights='imagenet',include_top=False,input_shape=(None,None,3))
base_model2 = Xception(weights='imagenet',include_top=False,input_shape=(None,None,3))
base_model3 = Xception(weights='imagenet',include_top=False,input_shape=(None,None,3))
x0 = base_model0.output
x0 = layers.GlobalAveragePooling2D()(x0)
x1 = base_model1.output
x1 = layers.GlobalAveragePooling2D()(x1)
x2 = base_model2.output
x2 = layers.GlobalAveragePooling2D()(x2)
x3 = base_model3.output
x3 = layers.GlobalAveragePooling2D()(x3)
x = layers.concatenate([x0,x1,x2,x3])
x = layers.Dense(4,activation='sigmoid')(x)
model = Model(inputs=(base_model0.input, base_model1.input, base_model2.input,
base_model3.input), outputs=x)
我的第二个模型除了标签外还使用了掩码,单模型准确率达到了77%。标签损失通过掩码预测进行反向传播。然后,我们不直接使用输出的标签,而是根据是否存在掩码来预测标签为1或0。
model0 = Unet('resnet34', input_shape=(None,None,3), classes=4,
activation='sigmoid', encoder_freeze=True)
model0.layers[-1].name = 'out1'
x = model0.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(4, activation='sigmoid', name='out2')(x)
model = Model(inputs = model0.input, outputs = (model0.output,x))
model.compile(optimizer=opt, loss={'out1':loss1,'out2':loss2},
metric = {'out1':metric1, 'out2':metric2})
我的分割模型是公共Kernel中想法的集合。未经后处理,它在Public LB上得分0.650。测试时增强(TTAx6)将其提升至LB 0.655。使用3折交叉验证提升至LB 0.660。集成7个具有不同3折选择的副本达到LB 0.665。最后,使用我的分类器去除假阳性提升至LB 0.670。我的最终解决方案CV分数为0.663,Private LB分数为0.663。以下是具体细节: