县域农业AI大赛总结

大赛描述

大赛链接

时间:

  • 初赛:2019年6月20日-7月19日
  • 复赛:2019年7月29日-8月30日

排名:参赛总人数1520,初赛个人排名96,初赛团体排名36,复赛团体排名27。

思路总结

  1. 这个图像分割的任务,训练数据是一张很大的图,必须要做裁切。裁切的方式可以使用顺序或者随机。由于各个类别不平衡,可以在裁切时控制各类别的比例、使之平衡。在大赛中最终选用的是随机裁切,并且resize到原图的$\frac{1}{4}$。做resize是由于考虑到农田中的种植较为稀疏,用U-Net这样的网络直接预测会过多考虑作物之间的空隙。
  2. 网络选用了U-Net,在imagenet上预训练,使用交叉熵loss。
  3. backbone用了resnet18,试过resnet50,和resnet18效果差距不大。
  4. 提分点:预训练,snapshot,旋转预测取平均,对patch的预测取中间部分,为防止过拟合取第一个epoch的结果(初赛)。
  5. 试了用UNet++做模型蒸馏,效果没有变化。

可用trick

  1. 预训练一般是有用的
  2. 用较大的patch可以提升效果,但是也不能太大导致gpu塞不下。
  3. snapshot有用
  4. 旋转预测取平均
  5. 预测一个patch后取中间的一小块
  6. 可以把各个epoch的预测结果都show出来看一下
  7. 模型融合一般是有用的,两个线上效果差不多的模型,差异越大、融合后的提升越多。

赛后总结

  1. 瞎改loss没什么用
  2. 瞎改网络没什么用
  3. 似乎没有想到什么特别好的方法防止过拟合
  4. 选择拟合能力足够的backbone即可,没有必要选择很多的、很复杂的backbone。
  5. 由于农作物比较稀疏,选用Deeplab v3+这样较多使用high-level feature的网络,效果会比较好。一开始选择了U-Net对农作物进行预测是一个失误。此外,似乎U-Net对道路的预测结果比DeepLab好。应当根据任务和数据的特性取选择合适的网络。
  6. 图像不应该resize到$\frac{1}{4}$,这样会损失信息。应当用原始图像,然后用DeepLab v3+或者PSPNet。
  7. 冠军的方案使用了软标签,这个是由于数据集的标注不够精准。软标签的做法是将边界区域一定宽度的像素设置为0~1之间的浮点数,而非原始的one-hot向量。
  8. 冠军的方案使用了伪标签,似乎这个一般而言都是有用的。做法是对测试数据进行预测,取预测概率比较高的结果加入到训练数据中,然后重新训练,然后对剩下的测试数据再做预测、概率高的结果加入训练数据,如此往复。
  9. 后处理用过腐蚀、膨胀,效果不明显。不过对于其他任务而言,可以用这种方式消除较小的连通域。
  10. 模型融合方法,我们用的是直接取并集,可能这并不是最好的融合方案。可以采用投票的方式,或者取交集。