生成图像处理数据

Generating data for image processing

我是深度学习的新手,我正在从事与足球运动分析相关的业余爱好项目。我想使用足球视频并将其转换为 2D 地图。我把这个过程分解成更小的步骤。第一步是能够检测到球员和足球。

我正在考虑从预训练的对象检测模型入手。我拍了一段视频并从中生成了图像。我在其中一张图片上使用了它,并附上了输出。它显然没有注意到很多事情。解决这个问题的一种方法是进行一些迁移学习。为此,我将不得不生成自己的数据集。我能想到的唯一方法是将此图像切成 windows 并手动将它们标记为球员和足球。

这似乎是一项繁琐的任务。还有其他有效的数据生成方式吗?有哪些最佳做法?

这更有可能用于长期 运行 开发,但由于我已经写了一个类似的答案,因此将其张贴在这里。

  1. 首先创建一个带有边界框的球员数据集(大约 500-1k,然后使用增强来增加几千个)。您可以使用以下工具进行注释:

https://github.com/developer0hye/Yolo_Label(效果很好,但仅适用于 windows)

https://github.com/AlexeyAB/Yolo_mark

https://github.com/heartexlabs/label-studio(这是一个用于许多其他任务的更复杂的注释工具)

使用这些工具,注释数据不会超过几个小时。

有很多增强工具,例如 - https://github.com/mdbloice/Augmentor

https://github.com/wagonhelm/rotation_augment(如果你想在图像上使用旋转)

  1. 由于玩家会移动,因此您需要具有良好 FPS 和合理 mAP 的东西。从我对许多对象检测模型的实验中,我发现 yolov3 (darknet) 是最稳定的。

我建议使用用C++编写的darknet YOLO,你不需要编写任何主要代码,它会快速准确。

https://pjreddie.com/darknet/yolo/

如果您在 Linux https://github.com/pjreddie/darknet

,请使用此存储库

如果你在 Windows https://github.com/AlexeyAB/darknet

,请使用这个
  1. 在训练之前,您需要为您的数据集找到最佳的锚尺寸。我写了一个简单的 k-means 来找到任何与 yolo 兼容的数据集中的锚点大小。

https://github.com/zabir-nabil/yolov3-anchor-clustering

  1. 我做了一些小的定制(比如将 OpenCV/numpy 数组直接发送到模型)到 运行 暗网 python API 在服务器上更快(tensorflow 模型服务器与REST 和 gRPC)。我还为它写了一个烧瓶服务器。你可以在这里找到它 -

https://github.com/zabir-nabil/tf-model-server4-yolov3

有一些针对行人的预训练模型(您可以在 github 上轻松找到它们),但由于非常不同的背景和运动伪影,它们不会为您提供很好的性能。