我们正在使用YOLO Darknet进行目标检测。我们使用Python3,tensorflow 1.0,numpy,opencv 3。使用yolo.weight进行检测。根据以下链接提供的 : https://github.com/thtrieu/darkflow#cameravideo-file-demo
当我们在视频上运行它时,它同时检测所有不需要的对象?
请指导我们如何仅检测要搜索的特定类名。
谢谢
发布于 2018-05-20 03:57:57
如果你只是遵循@JP Kim提到的步骤-你会得到一个只有你的标签的视频,但是它也会输出其他对象作为你的标签之一。
There's a specific section of the darkflow repo,它准确地告诉你如果你想要一个不同的输出该怎么做。TLDR -你应该重新训练你的模型。他们以3个班级为例来说明这一点。
但是,不管怎样,让我向您介绍这个过程。假设您有一个视频,您只需要跟踪其中的所有人。因此,我们只需要跟踪一种类型的对象- 'person‘。
cfg目录下制作了一个tiny-yolo-voc.cfg文件的副本。让我们遵循他们的惯例,将这个后缀命名为tiny-yolo-voc-1c.cfg,其中后缀1c表示类的数量。之所以选择tiny-yolo-voc而不是其他配置作为我们的基础模型,是因为它是一个较小的网络,可以在较小的GPU上进行训练。根据我所观察到的,其他配置需要10GB+图形内存,它们过去常常使我的机器耗尽内存。tiny-yolo-voc-1c.cfg文件中进行必要的更改:- edit `classes` variable to `classes=1`
- In the last `convolutional` section just before `region`, we will change `filter` variable to `5 * (num_class + 5) = 5 * (1+5) = 30`. So, set `filters=30`
labels.txt文件,其中只有一行显示为person,因为我们只需要一种类型的标签。- Now, if your label is one of the existing label of VOC datset or CoCo dataset, then you could just download one of VOC / Coco datsets. In our case `person` is the type of object we need to track, and that is already a type of object in VOC dataset. So, we'll use VOC dataset.
- However, if you wish to use YOLO to classify and track a new type of object, then you need to prepare your own dataset and annotations. For this custom object purpose, you could follow the part 5-8 of [this youtube video series](https://www.youtube.com/watch?v=Lg4T9iJkwhE). These videos showcase an example of how to use YOLO to track and classify `fidget_spinner`.
person下载Pascal VOC数据集: curl -O https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar tar xf VOCtest_06-Nov-2007.tartiny-yolo-voc模型加载权重,并从那里开始重新训练,用于我们的特定用例(只有person类)。为此,我们必须为tiny-yolo-voc下载权重。您可以找到权重here for YOLO v2。我们将下载Tiny YOLO for VOC dataset的权重。将文件移到downloading./darkflow/bin/目录我们已经下载了这个文件,有必要使基本模型配置文件和权重文件具有相同的名称。由于重命名配置不是一个好主意,我们将从yolov2-tiny-voc.weights下载的权重重命名为tiny-yolo-voc.weights。这是必需的,因为当我们训练时,我们提供了权重文件,并且darkflow尝试选取相应的配置文件作为训练新模型的参考。这也在darkflow repo页面中提到:
当darkflow发现你正在加载tiny-yolo-voc.weight时,它会在你的cfg/文件夹中查找tiny-yolo-voc.cfg,并将该配置文件与你设置的新配置文件进行比较--model cfg/tiny yolo-voc-1c.cfg。在这种情况下,除了最后两个之外,每个层都将具有相同数量的权重,因此它会将权重加载到直到最后两个的所有层中,因为它们现在包含不同数量的权重。
--gpu 0.9部分: flow --model cfg/tiny yolo-voc-1c.cfg --load bin/tiny yolo-voc.weight-- this.Train --dataset "~/VOCdevkit/VOC2007/JPEGImages“--annotation”~/VOCdevkit/VOC2007/annotation“--当您认为损失不再减少时,gpu 0.9您可能已经注意到,在每250步之后,darkflow将继续在ckpt/目录中保存检查点。一旦停止训练,您可以使用这些检查点中的任何一个来测试您的模型。
flow --model cfg/tiny yolo-voc-1c.cfg --load 1500 --demo video-input.mp4 --gpu 0.9 --saveVideo
当你运行它时,它会显示模型能够处理你的视频的FPS。这可能会根据您的计算机而有所不同。根据FPS和视频的长度,这可能需要一些时间才能完成。该过程完成后,您将在darkflow/目录中创建一个video.avi。
这应该只在视频中检测到person类型的对象。
如果输出不是很好,你可以进一步训练你的模型,和/或改变阈值或其他参数来获得更好的输出。
希望这能有所帮助。
发布于 2017-07-18 13:55:22
从我发现的情况来看,你可以这样做:
然后,
flow --model cfg/your_new_copied_file.cfg --load path/to/weight_file --demo your_video.mp4 --labels your_labels.txt --saveVideo就这样。
但问题是,总体检测准确率明显下降。通常它会检测到与标签中的对象完全不同的对象。(也许darkflow只是在标签中选择最有信心的猜测,如果它高于阈值?)
因此,如果你想在跳过其他对象的同时只检测其他类中的一些对象(即识别它们但跳过),我认为最好编辑暗流源以接受额外的参数(如--mark marklabels.txt)。
发布于 2021-09-17 08:16:19
如果你想要一些快速的结果而不需要重新训练darknet,官方的建议可以在https://github.com/AlexeyAB/darknet/issues/2920#issuecomment-482810023上找到,AlexeyAB回答了这一点,我总结如下:
只需在除猫、狗、人之外的每一行前添加
dont_show即可:https://github.com/AlexeyAB/darknet/blob/master/data/coco.names
然后运行(类似以下命令):
./darknet检测器测试cfg/coco.data cfg/yolov3.cfg yolov3.weight -thresh 0.25
因此,对于您不希望输出的每个类,例如person,在第一行的"coco.names“文件中这样做:
dont_show person如果你不想展示,其他的也是相似的。
https://stackoverflow.com/questions/44674517
复制相似问题