Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Yolo Darknet仅检测特定类别,如人、猫、狗等_Python_Image Processing_Object Detection_Darknet - Fatal编程技术网

Python Yolo Darknet仅检测特定类别,如人、猫、狗等

Python Yolo Darknet仅检测特定类别,如人、猫、狗等,python,image-processing,object-detection,darknet,Python,Image Processing,Object Detection,Darknet,我们使用YOLO Darknet进行目标检测。我们正在使用Python3、tensorflow1.0、numpy和opencv3。使用yolo.weight进行检测。
根据以下链接中给出的信息: 

 当我们在视频上运行它时,它会同时检测所有不需要的对象 请指导我们如何仅检测要搜索的特定类名 谢谢根据我的发现,您可以按如下方式进行操作: 将原始yolo cfg文件复制到新文件中,并编辑其值 [region]部分中的类,以指定要创建的类的数量 探测 创建标签文本文件并放置要检测的类名 (原始类的子

我们使用YOLO Darknet进行目标检测。我们正在使用Python3、tensorflow1.0、numpy和opencv3。使用yolo.weight进行检测。
根据以下链接中给出的信息: 



当我们在视频上运行它时,它会同时检测所有不需要的对象

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


谢谢

根据我的发现,您可以按如下方式进行操作:

  • 将原始yolo cfg文件复制到新文件中,并编辑其值 [region]部分中的类,以指定要创建的类的数量 探测
  • 创建标签文本文件并放置要检测的类名 (原始类的子集)
  • 那么

    flow --model cfg/your_new_copied_file.cfg --load path/to/weight_file --demo your_video.mp4 --labels your_labels.txt --saveVideo
    
    就这样

    但问题是,总体检测准确率显著下降。通常,它会将完全不同的对象检测为标签中的对象。 (如果高于阈值,也许暗流只是在标签中选择最自信的猜测?)


    因此,如果您只想在跳过其他对象时检测其他类中的一些对象(即识别它们但跳过),我认为最好编辑暗流源以接受其他参数(如--marklabels.txt).

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

    如果您希望有不同的输出,它确切地告诉您应该做什么。TLDR-您应该重新培训您的模型。他们举了3个类的例子来说明这一点

    但是,不管怎样,让我带你走过这个过程。让我们考虑你有一个视频,你只需要跟踪它里面的所有人。所以,我们只需要跟踪一种类型的对象——“person”

  • 我们在
    cfg
    目录中复制了
    tiny yolo voc.cfg
    文件。让我们按照他们的惯例将其命名为
    tiny-yolo-voc-1c.cfg
    ,其中后缀
    1c
    表示类的数量。之所以选择
    tiny yolo voc
    而不是其他配置作为我们的基本模型,是因为它是一个较小的网络,可以在较小的GPU上进行训练。从我观察到的情况来看,其他配置需要10GB+的图形内存,它们过去常常使我的机器内存不足

  • 我们将在
    tiny-yolo-voc-1c.cfg
    文件中进行必要的更改:

    • classes
      变量编辑为
      classes=1
    • 区域
      前面的最后一个
      卷积
      部分中,我们将
      过滤器
      变量更改为
      5*(num_class+5)=5*(1+5)=30
      。因此,设置
      filters=30
  • 我们将编辑暗流源目录中的
    labels.txt
    文件,其中只有一行写着
    person
    ,因为我们只需要一种标签类型

  • 现在,我们需要训练我们的模型。然而,对于培训,我们首先需要数据集

    • 现在,如果您的标签是VOC数据集或CoCo数据集的现有标签之一,那么您可以下载一个VOC/CoCo数据集。在我们的例子中,
      person
      是我们需要跟踪的对象类型,它已经是VOC数据集中的对象类型。所以,我们将使用VOC数据集

    • 但是,如果希望使用YOLO对新类型的对象进行分类和跟踪,则需要准备自己的数据集和注释。对于此自定义对象,您可以遵循的第5-8部分。这些视频展示了如何使用YOLO跟踪和分类
      fidget\u 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
    
  • 我们不会从头开始训练。因此,我们实际上要为
    微型yolo voc
    模型加载权重,并从那里开始重新训练,以适应我们的特定用例(只需
    个人
    类)。为此,我们必须下载
    tiny yolo voc
    的重量。你可以找到重量。我们将下载的重量为。下载后,将文件移动到
    /darkflow/bin/
    目录

  • 一旦我们下载了这个,就需要让基本模型配置文件和权重文件具有相同的名称。由于重命名配置不是一个好主意,我们将把从
    yolov2 tiny voc.weights
    下载的权重重命名为
    tiny yolo voc.weights
    。这是必需的,因为当我们训练时,我们提供了权重文件,而暗流试图获取相应的配置文件作为训练新模型的参考

  • 暗流回购页面上也提到了这一点:

    当暗流看到您正在加载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。这可能因您的机器而异。副署长