首页 > 解决方案 > 如何在 tf/keras 中训练自己的(不带 YOLO 等)对象检测器

问题描述

我成功地训练了多分类器模型,这很容易通过简单的类相关文件夹结构和keras.preprocessing.image.ImageDataGeneratorflow_from_directory 顺便说一句没有手动编码!)在我刚刚compile fitevaluate- Keras 的管道做得非常好!

但!当我决定制作自己的(不是猫,不是狗,不是你的名字)物体检测器时 - 这变成了一场噩梦......

TFRecord 和 tf.Example 简直是疯了!但是好的,我几乎明白了(我的数据集很小,我有很多内存,但是谁在乎呢,写 f.样板文件,这么多嗯......)

主要的事情-我只是找不到任何文档/教程如何使用简单的 tf/keras 来制作它,每个人都只想在某个模型 YOLO SSD FRCNN 之上构建它,即使他们试图检测全新的对象!!!

官方文档中有两个关于OD的链接,它们都在下面使用了一些模型。

所以我的主要问题是为什么???或者我只是瞎了..?-__-

标签: tensorflowmachine-learningkerascomputer-visionobject-detection

解决方案


它变成了一场噩梦,因为目标检测比分类困难得多。最简单的对象检测器是这样的:首先在所有对象上训练一个分类器。然后,当您想要检测图像中的对象时,在图像上滑动一个窗口,并对每个窗口进行分类。然后,如果您的分类器确定某个窗口是对象之一,则将其标记为成功检测。

但是这种方法有很多问题,主要是它的方式(比如 waaaay)太慢了。因此,研究人员对其进行了改进并发明了 RCNN。这有问题,所以他们发明了 Faster-RCNN、YOLO 和 SSD,所有这些都是为了让它更快、更准确。你不会在网上找到任何关于如何实现滑动窗口技术的教程,因为它无论如何都没用,你也不会找到任何关于如何实现更高级的东西的教程,因为网络很快就会变得复杂。

另请注意, usingYOLO并不意味着您应该使用与 in 相同weights的内容YOLOYOLO如果您愿意,可以通过随机初始化网络层中的所有权重来从头开始训练自己的数据。所以even if they trying to detect completely new objects!!!你提到的不是真的有效。另请注意,我仍然建议您使用他们在Yolo网络中使用的权重。Transfer Learning通常被认为是一个好主意,尤其是在刚开始时,尤其是在图像处理领域,因为许多图像具有共同的特征(例如边缘)。


推荐阅读