天天看点

Google AI Open Images Kaggle 比赛

比赛描述:

  • 一个识别和定位图片中物体的比赛
    • https://www.kaggle.com/c/google-ai-open-images-object-detection-track/leaderboard
  • google提供的数据集的细节:
    • 180w张图片,每个图片有多个标注框,数据大概600T
    • 不是某个类别只要出现了就会被标注出来。
    • 数据存在极度的不均衡
    • 类别有层级关系,检测出子类物体,一定也要检测出父类物体才行
  • 评估的时候也不是图片中出现了的物体都必须检测出来。每张图片有个存在列表和不存在列表,只有检测出来了存在列表的东西,或者没有检测出来不存在列表里面的东西才能得分。其他物体,不管检测出来没有都不影响结果。

我的方案:

  • 使用yolo3,一块1080Ti显卡
  • 使用各种调整学习率的方法来降误差
  • 随机从不同类比中抽取相同量的数据来训练,所以最终只使用了20w图片。一个epoch训练时间大概4小时

结果:

  • 450个team里面,排位26名。mAP 3.8样子

讨论:

  • 最大的提升来至于理解了mAP的计算原理。一开始我设定了一个阈值。只有大于这个值才认为是检测到了这个物体。但后来发现AP其实是回去平均所有阈值的结果。这个阈值并不由我来定。所以我就把阈值讲到很低,上传文件大概1.5个G。mAP一下从2+提升到4+。(比赛结束前只能看到用20%test数据计算的mAP,用这种方式得到的mAP是4.1样子)
  • 看了下排名第二地方案,其实也没有很特别的地方,使用了更复杂的网络模型,使用了更多的算力(512个GPU)。然后使用了针对不完全标注的处理。还使用了Ensembling。我机器的运算速度更本没有时间来做Ensembling。
  • 另外我还尝试了faster rcnn,速度实在太慢,就放弃了。
  • 这次主要的锻炼是处理大量数据的能力,编写了很多输入输出,可视化自动化的脚本。

继续阅读