我们正在使用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/