我们使用 YOLO Darknet 进行对象检测。我们使用Python3、tensorflow 1.0、numpy、opencv 3。使用yolo.weight进行检测。根据下面的链接给出:https://github.com/thtrieu/darkflow#cameravideo-file-demo https://github.com/thtrieu/darkflow#cameravideo-file-demo
当我们在视频上运行它时,它会同时检测所有不需要的对象?
请指导我们如何仅检测要搜索的特定类名。
Thanks
如果您只是按照 @JP Kim 提到的步骤进行操作 - 您将获得一个仅包含您的标签的视频,但它也会输出其他对象作为您的标签之一。
darkflow 存储库中有一个特定部分 https://github.com/thtrieu/darkflow#training-on-your-own-dataset它准确地告诉了如果您希望有不同的输出该怎么做。 TLDR - 你应该重新训练你的模型。他们通过 3 个类的例子来展示这一点。
但是,无论如何,让我引导您完成整个过程。让我们假设您有一个视频,您只需要跟踪其中的所有人员。因此,我们只需要跟踪一种类型的对象——“人”。
我们复制一份tiny-yolo-voc.cfg
文件输入cfg
目录。让我们按照他们的约定命名这个tiny-yolo-voc-1c.cfg
哪里后缀1c
代表类的数量。选择的理由tiny-yolo-voc
与我们的基本模型不同的是,它是一个较小的网络,可以在较小的 GPU 上进行训练。据我观察,其他配置需要 10GB 以上的图形内存,它们常常导致我的机器内存不足。
-
我们将进行必要的更改tiny-yolo-voc-1c.cfg
file :
- edit
classes
变量为classes=1
- 在最后
convolutional
之前的部分region
,我们会改变filter
变量为5 * (num_class + 5) = 5 * (1+5) = 30
。所以,设置filters=30
我们将编辑labels.txt
位于 darkflow 源目录中的文件,里面只有 1 行,上面写着person
,因为我们只需要一种类型的标签。
-
现在,我们需要训练我们的模型。然而,对于训练,我们首先需要有数据集。
现在,如果您的标签是 VOC 数据集或 CoCo 数据集的现有标签之一,那么您只需下载 VOC / Coco 数据集之一。在我们的例子中person
是我们需要跟踪的对象类型,并且它已经是 VOC 数据集中的一种对象类型。因此,我们将使用 VOC 数据集。
但是,如果您希望使用 YOLO 来分类和跟踪新类型的对象,那么您需要准备自己的数据集和注释。对于此自定义对象目的,您可以遵循第 5-8 部分这个 YouTube 视频系列 https://www.youtube.com/watch?v=Lg4T9iJkwhE。这些视频展示了如何使用 YOLO 进行跟踪和分类的示例fidget_spinner
.
-
下载 VOC 数据集,因为它包含适合我们的对象类型的足够数据和注释person
# Download the Pascal VOC dataset:
curl -O https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar
我们不会从头开始训练。所以,我们实际上要加载权重tiny-yolo-voc
模型并从那里开始重新训练,针对我们的特定用例(只是person
班级)。为此,我们必须下载权重tiny-yolo-voc
。你可以找到权重这里是 YOLO v2 https://pjreddie.com/darknet/yolov2/。我们将下载权重用于 VOC 数据集的微型 YOLO https://pjreddie.com/media/files/yolov2-tiny-voc.weights。将文件移至/darkflow/bin/
下载后的目录。
下载此文件后,基础模型配置文件和权重文件必须具有相同的名称。由于重命名配置不是一个好主意,我们将重命名我们下载的权重yolov2-tiny-voc.weights
to tiny-yolo-voc.weights
。这是必需的,因为当我们训练时,我们提供了权重文件,darkflow 尝试选取相应的配置文件作为训练新模型的参考。
darkflow 存储库页面上也提到了这一点:
当 darkflow 发现您正在加载tiny-yolo-voc.weights时,它将在您的 cfg/ 文件夹中查找tiny-yolo-voc.cfg,并将该配置文件与您使用 --model cfg/tiny-yolo 设置的新配置文件进行比较-voc-1c.cfg。在这种情况下,除了最后两层之外,每一层都将具有相同的权重数量,因此它将把权重加载到直到最后两层的所有层中,因为它们现在包含不同数量的权重。
-
现在,我们可以训练我们的模型了。您可以删除--gpu 0.9
如果你没有 GPU 来训练这个部分。
# Train the net on the Pascal dataset:
flow --model cfg/tiny-yolo-voc-1c.cfg --load bin/tiny-yolo-voc.weights --train --dataset "~/VOCdevkit/VOC2007/JPEGImages" --annotation "~/VOCdevkit/VOC2007/Annotations" --gpu 0.9
当您认为损失不再减少时,按 Ctrl+C 结束训练。通常良好的损失/平均损失是 1 或低于 1。
您可能已经注意到,每执行 250 步后,darkflow 就会继续在ckpt/
目录。停止训练后,您可以使用这些检查点中的任何一个来测试您的模型。
-
我们将在人物视频上运行它,并让它保存带有边界框预测的新视频。我们在此示例中使用第 1500 步检查点。
flow --model cfg/tiny-yolo-voc-1c.cfg --load 1500 --demo video-input.mp4 --gpu 0.9 --saveVideo
当您运行此程序时,它将显示模型能够处理您的视频的 FPS。这可能会因您的机器而异。根据 FPS 和视频长度,此过程可能需要一些时间才能完成。该过程完成后,您将获得video.avi
创建于darkflow/
目录。
这个应该只有person
视频中检测到的对象类型。
如果输出不是很好,您可以进一步训练模型,和/或改变阈值或其他参数以获得更好的输出。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)