我们正在使用YOLO Darknet进行对象检测。我们正在使用Python3,tensorflow 1.0,numpy,opencv3。使用yolo.weight进行检测。根据以下链接中给出的:
https://github.com/thtrieu/darkflow#cameravideo-file-demo

当我们在视频上运行它时,它会同时检测所有对象,这不是必需的吗?

请指导我们如何仅检测要搜索的特定类名称。

谢谢

最佳答案

如果您只是按照@JP Kim提到的步骤进行操作-您将获得仅带有标签的视频,但是它也会将其他对象作为标签之一输出。

There's a specific section of the darkflow repo准确地告诉您如果希望获得不同的输出该怎么办。 TLDR-您应该重新训练模型。他们以3个类为例来说明这一点。

但是,无论如何,让我引导您完成整个过程。让我们考虑一下,您有一个视频,您只需要跟踪其中的所有人。因此,我们只需要跟踪一种类型的对象-'person'。


我们在tiny-yolo-voc.cfg目录中复制cfg文件。让我们遵循它们的约定并将其命名为tiny-yolo-voc-1c.cfg,其中后缀1c表示类的数量。选择tiny-yolo-voc而不是其他配置作为我们的基本模型的原因是它是一个较小的网络,可以在较小的GPU上进行训练。根据我的观察,其他配置需要10GB +的图形内存,它们过去使我的计算机内存不足。
我们将在tiny-yolo-voc-1c.cfg文件中进行必要的更改:


classes变量编辑为classes=1
在紧挨着convolutional的最后一个region部分中,我们将filter变量更改为5 * (num_class + 5) = 5 * (1+5) = 30。因此,设置filters=30

我们将在darkflow源目录中编辑labels.txt文件,并且其中只有1行表示person,因为我们只需要1种标签类型。
现在,我们需要训练我们的模型。但是,对于训练,我们首先需要数据集在那儿。


现在,如果您的标签是VOC数据集或CoCo数据集的现有标签之一,那么您只需下载VOC / Coco数据集之一。在我们的例子中,person是我们需要跟踪的对象类型,而这已经是VOC数据集中的对象类型。因此,我们将使用VOC数据集。
但是,如果您希望使用YOLO分类和跟踪新型对象,则需要准备自己的数据集和注释。为此目的,您可以遵循this youtube video series的5-8部分。这些视频展示了如何使用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下载权重。您可以找到权重here for YOLO v2。我们将下载Tiny YOLO for VOC dataset的权重。下载后将文件移到/darkflow/bin/目录。
下载完成后,有必要使基本模型配置文件和权重文件具有相同的名称。由于重命名配置不是一个好主意,因此我们将从yolov2-tiny-voc.weights下载的权重重命名为tiny-yolo-voc.weights。这是必需的,因为在训练时,我们提供了权重文件,并且darkflow尝试获取相应的配置文件作为训练新模型的参考。


在darkflow回购页面上也提到了这一点:


当darkflow看到您正在加载tiny-yolo-voc.weights时,它将在cfg /文件夹中查找tiny-yolo-voc.cfg,并将该配置文件与您使用--model cfg / tiny-yolo设置的新配置文件进行比较。 -voc-1c.cfg。在这种情况下,除最后两层外,每一层都将具有相同的精确权重数,因此它将把权重加载到最后两层之前的所有层中,因为它们现在包含不同数量的权重。



现在,我们可以训练模型了。如果没有GPU可以训练--gpu 0.9部分,则可以将其删除。

# 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类型的对象。

如果输出效果不佳,则可以进一步训练模型和/或更改阈值或其他参数以获得更好的输出。

希望这可以帮助。

关于python - Yolo Darknet仅检测特定类别,例如人,猫,狗等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44674517/

10-12 14:28