为 Carvana Kaggle 挑战赛破解 GTA V

为 Carvana Kaggle 挑战赛破解 GTA V

原文:https://medium.com/hackernoon/hacking-gta-v-for-carvana-kaggle-challenge-6d0b7fb4c781

“Check out this licence number, dude!”

ka ggle 上举办的 Carvana 图像掩蔽挑战赛吸引了深度学习社区的大量关注。目前,比赛有 600 多个团队注册。任务是建立一个模型,将汽车从场景背景中分割出来。

Original and target images

从概念上来说,这项任务似乎定义明确且简单,特别是在比较中,比如说,与安全自动驾驶的道路场景的完全识别相比。

的确,有 396 支队伍取得了 0.99 以上的成绩。所有进一步的比赛将在最后分数的小数点后 3-4 位进行。

总的来说,Kaggle 社区极具创造力,非常重要的解决方案是激烈竞争的结果。比如,出租车预测挑战赛冠军解答

然而,当涉及到语义分割问题时,非平凡的方法很难利用。在大多数得分最高的解决方案中,以不同分辨率训练的 Unet 类架构的集合将占优势。在非常相似的方法相互竞争的情况下,机会起着巨大的作用。

下面的问题出现了:

"有没有其他方法可以获得竞争优势?"

我们认为答案是肯定的,特别是如果我们从不同的角度来看这个任务:攻击数据而不是建模

在本帖中,我们将描述我们如何设法生成与真实图像(挑战组织者提供的训练数据)非常相似的合成 Carvana 图像(加上地面真相)。更重要的是,我们的合成训练集是免费提供的,每个人都可以利用它在挑战中获得更高的分数。

看看上面那两辆车。一个是真实的,一个是用 GTA V 合成生成的,哪个是哪个?

来玩 GTA V 科普一下吧!

现代电脑游戏与深度学习有着有趣的联系。它们很吸引人,更重要的是,看起来很真实。以 GTA V 为例。 Rockstar North ,多年来,投入巨大的努力让游戏性尽可能的贴近现实。因此,潜在地,一个人可能认为游戏是无限的训练集,具有所有可能和不可能的道路场景配置。

这里我们缩小了上面提到的一般方法。我们使用 GTA V 来获取不同摄像机视角下的汽车图像和分割掩膜。这个想法并不新鲜,例如,为 2016 年的数据数据集而战。

不幸的是,没有直接的方法可以做到这一点(GTA V 没有这种 API 可用)。但概念上是可能的。所以一点逆向工程可以帮助我们。我们不会太关注逆向工程过程本身(如果有人感兴趣,请在评论中告诉我们),而是会描述整个过程(并展示许多很酷的图片)。

Some intermediate magic in action

在我们成功地将 DLL 注入 GTA 流程后,我们可编程地将 GTA 中的每辆车放入车库。嗯,不是每一个——经过一些筛选,我们只保留了 154 个对 Carvana 挑战赛有意义的模型,因为飞艇没有。然后,我们用几个不同的摄像机角度将模型旋转 10 度。最后,我们改变汽车颜色:我们选择了黑色和白色。

好的,现在我们可以像上面一样截取一些漂亮的截图,但是没有事实依据。那很糟糕。幸运的是,我们可以挂接 DirectX API 调用,并对场景中的对象进行一些操作。在几次键盘损坏后,我们找到了一种突出汽车的方法:

如你所见,这里没有窗户。这是因为在 GTA V 中,窗口是完全独立的对象。因此,我们也只突出显示窗口:

这下好了!我们实际上得到了地面真相面具和汽车图像。但是我们还需要提取我们的模型并将其放置在 Carvana 场景中,并使最终结果尽可能接近现实。正因为如此,我们还想从 GTA 中提取一个汽车阴影:

正如你所看到的,我们没有把地板弄得完全洁白和平整。但是不要担心:Photoshop 是来帮助我们的!

用于深度学习的 Photoshop

什么样的人会用 Photoshop 进行机器学习?嗯,我们有。

其实 Photoshop 大有可为。但是大多数人不知道可以使用优秀的 JavaScript 来自动化每一个动作。我们就是这么做的。

我们从游戏截图开始:

首先,简单的一个:我们结合汽车和窗户地面真相,以获得最终的面具:

现在,我们可以从截图中剪出汽车,并将其放在我们之前制作的空舞台上:

如你所见,车内太暗。那是因为它是在较暗的地方拍摄的。幸运的是,Photoshop 有自动色调和自动颜色功能:

好多了!但是车是飘在空中的。那是因为没有影子。在 Photoshop 中生成阴影是可能的,但是很难,因为我们需要记住模型的旋转角度。所以,我们将直接从 GTA 中获取阴影。我们加载了白色地板的截图,并做了一些处理:

但是还是没有窗户!让我们通过使用一些渐变生成窗口来解决这个问题:

最后,放大汽车以适应场景:

所有这些操作都是使用 Photoshop JS 脚本和预先录制的动作编程完成的。如果你认为这是一个有趣的话题,请在评论中留下你的观点。

如何获取合成 Carvana 数据集

我们已经在我们的培训数据平台 Supervise.ly 中公开了这个数据集。如果你想了解更多,请查看 medium 上的这个帖子。按照这些简单的步骤获取数据:

1.创建一个帐户

在 Supervise.ly 上注册。这是免费的,只需几分钟。

2.从库中选择数据集

打开ImportDatasets库,点击“CarvanaGTA5”数据集。输入项目名称(如“Carvana”),点击NextUpload。导入任务完成后,您将在Projects页面上看到您的新数据集。

Datasets library

您可以点击数据集或查看统计数据来查看Annotation tool中的图像。

Annotation tool

3.导出数据

现在,您可以使用Export tool将数据集下载到您的计算机上。Export 是 Supervise.ly 的一个强大功能,它使用 JSON 配置进行过滤、调整大小、增强、训练验证分割,将多个数据集合并为一个数据集,然后将结果保存为流行的 ready to train 框架格式。

转到Export页面,在编辑器中粘贴以下配置:

[
  {
    "action": "data",
    "src": [
      "<Your project name>/*"
    ],
    "dst": "$sample",
    "settings": {
      "classes_mapping": "default"
    }
  },
  {
    "action": "tag",
    "src": [
      "$sample"
    ],
    "dst": "$sample2",
    "settings": {
      "tag": "train"
    }
  },
  {
    "action": "background",
    "src": [
      "$sample2"
    ],
    "dst": "$sample3",
    "settings": {
      "class": "bg"
    }
  },
  {
    "action": "segmentation",
    "src": [
      "$sample3"
    ],
    "dst": "Carvana",
    "settings": {
      "gt_machine_color": {
        "car": [255, 255, 255],
        "bg": [0, 0, 0]
      },
      "tag2part": {
        "train": "train"
      },
      "txt_generation": {
        "prefix": "."
      }
    }
  }
]

在这里,我们定义了一个数据顺序转换的数组:我们将每个图像标记为“train”,将其传递给background层以生成bg类,最后使用segmentation层来制作地面真实图像。你可以在文档中阅读更多关于导出的信息。

现在点击Start Exporting按钮并输入一些名称(可选)。

Supervise.ly 将准备您的档案,一段时间后Download按钮将出现在任务中:

搞定了。如果你有时间,可以看看我们在 Supervise.ly 上的教程,比如车牌检测——它提供了很多东西。

代替结论的是几个普通的词

我们生活在一个深度学习技术空前民主化的时代——学术界和商界公开发表研究和构建神经网络的框架。然而,当涉及到训练数据时,情况就大不相同了。在数据可用性方面,行业巨头(谷歌、facebook、亚马逊)比其他公司有巨大的优势。

下面这张来自吴恩达的图表很能说明问题:

或者换句话说:基于深度学习的智力产品的质量是由可用的训练数据量决定的。

提高培训数据的可用性是我们公司的首要任务。我们从两方面着手解决这个问题:

  • 手动注释工具的开发。最近我们免费开放了 Supervise.ly 的测试版
  • 研究合成/半合成场景的生成,实验自动注释过程的工具。我们今天发布的合成 Carvana 数据集是我们研究的一部分。

请让我们知道我们的合成数据集是否有助于您获得更高的分数。


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除