zoukankan      html  css  js  c++  java
  • AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)

    版本3有什么新功能?             

    YOLOv3使用了一些技巧来改进训练和提高性能,包括:多尺度预测、更好的主干分类器等等。全部细节都在我们的论文上!             

    使用预先训练的模型进行检测             

    这篇文章将指导你通过使用一个预先训练好的模型用YOLO系统检测物体。如果你还没有安装Darknet,你应该先安装。或者不去阅读所有的东西:

    git clone https://github.com/pjreddie/darknet

    cd darknet

    make

    容易的!             

    cfg/子目录中已经有YOLO的配置文件。你必须在这里下载预先训练的权重文件(237MB)。或者运行这个:

    wget https://pjreddie.com/media/files/yolov3.weights

    将看到如下输出:

    layer     filters    size              input                output

        0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32  0.299 BFLOPs

        1 conv     64  3 x 3 / 2   416 x 416 x  32   ->   208 x 208 x  64  1.595 BFLOPs

        .......

      105 conv    255  1 x 1 / 1    52 x  52 x 256   ->    52 x  52 x 255  0.353 BFLOPs

      106 detection

    truth_thresh: Using default '1.000000'

    Loading weights from yolov3.weights...Done!

    data/dog.jpg: Predicted in 0.029329 seconds.

    dog: 99%

    truck: 93%

    bicycle: 99%

     Darknet打印出它检测到的物体,它的可信度,以及找到它们所花的时间。我们没有用OpenCV编译Darknet,因此它不能直接显示检测结果。相反,它将它们保存在predictions.png中。您可以打开它来查看检测到的对象。因为我们在CPU上使用Darknet,所以每张图像大约需要6-12秒。如果我们使用GPU版本,速度会快得多。              已经包括了一些例子图片,以防你需要灵感。尝试

    data/eagle.jpg, data/dog.jpg, data/person.jpg, or data/horses.jpg!

    detect命令是命令的更通用版本的简写。它相当于命令:

    ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg

    如果您只想在一个图像上运行检测,则不需要知道这一点,但知道是否要执行其他操作(如在网络摄像头上运行)(稍后将看到)会很有用。             

    多帧图像             

    不要在命令行上提供图像,您可以将其留空以尝试一行中的多个图像。相反,当配置和权重完成加载时,您将看到一个提示:

    ./darknet detect cfg/yolov3.cfg yolov3.weights

    layer     filters    size              input                output

        0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32  0.299 BFLOPs

        1 conv     64  3 x 3 / 2   416 x 416 x  32   ->   208 x 208 x  64  1.595 BFLOPs

        .......

      104 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256  1.595 BFLOPs

      105 conv    255  1 x 1 / 1    52 x  52 x 256   ->    52 x  52 x 255  0.353 BFLOPs

      106 detection

    Loading weights from yolov3.weights...Done!

    Enter Image Path:

    输入像data/horses.jpg这样的图像路径,让它为该图像预测框。

     完成后,它将提示您输入更多路径以尝试不同的图像。完成后,使用Ctrl-C退出程序。             

    更改检测阈值             

    默认情况下,YOLO只显示置信度为.25或更高的对象。可以通过将-thresh<val>标志传递给yolo命令来更改此值。例如,要显示所有检测,可以将阈值设置为0:

    ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0

    产生:             

    ![[全部]             

    所以这显然不是非常有用,但是可以将其设置为不同的值来控制模型设置的阈值。              Tiny YOLOv3             

    我们有一个非常小的模型,也适用于约束环境,yolov3 tiny。要使用此模型,请首先下载权重:

    wget https://pjreddie.com/media/files/yolov3-tiny.weights

    然后使用Tiny配置文件和权重运行检测:

    ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

    网络摄像头的实时检测             

    如果看不到结果,在测试数据上运行YOLO就不是很有趣了。与其在一堆图片上运行,不如在网络摄像头的输入上运行!              

    要运行这个演示,您需要使用CUDA和OpenCV编译Darknet。然后运行命令:

    ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

    YOLO将显示当前FPS和预测类,以及在其上绘制边界框的图像。             

    你需要一个网络摄像头连接到OpenCV可以连接到的计算机,否则它将无法工作。如果您连接了多个网络摄像头,并且希望选择要使用的摄像头,则可以通过-c<num>标志进行选择(OpenCV默认使用网络摄像头0)。             

    如果OpenCV可以读取视频,也可以在视频文件上运行它:

    ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>

    这就是我们制作上述YouTube视频的方式。             

    VOC上训练YOLO          

    如果你想使用不同的训练模式、超参数或数据集,你可以从头开始训练YOLO。下面是如何让它在Pascal VOC数据集上工作。             

    获取Pascal VOC数据             

    要训练YOLO,您需要2007年至2012年的所有VOC数据。你可以在这里找到数据的链接。要获取所有数据,请创建一个目录来存储所有数据,然后从该目录运行:

    wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar

    wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar

    wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar

    tar xf VOCtrainval_11-May-2012.tar

    tar xf VOCtrainval_06-Nov-2007.tar

    tar xf VOCtest_06-Nov-2007.tar

    现在将有一个VOCdevkit/子目录,其中包含所有VOC训练数据。             

    VOC生成标签             

    现在我们需要生成Darknet使用的标签文件。Darknet希望为每个图像创建一个.txt文件,并为图像中的每个真实值对象创建一条线,如下所示:

    <object-class> <x> <y> <width> <height>

    其中x、y、宽度和高度与图像的宽度和高度相关。要生成这些文件,我们将在Darknet的script s/目录中运行voc_label.py脚本。我们再下载一次吧,因为我们很懒。

    wget https://pjreddie.com/media/files/voc_label.py

    python voc_label.py

    几分钟后,此脚本将生成所有必需的文件。它主要在VOCdevkit/VOC2007/labels/和VOCdevkit/VOC2012/labels/中生成大量标签文件。在您的目录中,您应该看到:

    ls

    2007_test.txt   VOCdevkit

    2007_train.txt  voc_label.py

    2007_val.txt    VOCtest_06-Nov-2007.tar

    2012_train.txt  VOCtrainval_06-Nov-2007.tar

    2012_val.txt    VOCtrainval_11-May-2012.tar

    文本文件如2007_train.txt列出了当年的图像文件和图像集。Darknet需要一个文本文件,其中包含所有要训练的图像。在这个例子中,让我们训练除了2007测试集之外的所有东西,以便我们可以测试我们的模型。运行:

    cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

    现在我们把2007年的trainval和2012年的trainval都列在一个大名单上。这就是我们要做的数据设置!              

    修改Pascal数据的Cfg             

    现在找到的darknet目录。我们必须更改cfg/voc.data配置文件以指向您的数据:

      1 classes= 20

      2 train  = <path-to-voc>/train.txt

      3 valid  = <path-to-voc>2007_test.txt

      4 names = data/voc.names

      5 backup = backup

    您应该将<path to voc>替换为放置voc数据的目录。              

    下载预训练卷积权重             

    对于训练,我们使用在Imagenet上预先训练的卷积权重。我们使用darknet53模型的权重。你可以在这里下载卷积层的权重(76MB)。

    wget https://pjreddie.com/media/files/darknet53.conv.74

    训练模型             

    现在我们可以训练了!运行命令:

    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

     

    COCO上训练YOLO             

    如果你想使用不同的训练模式、超参数或数据集,你可以从头开始训练YOLO。下面是如何让它在COCO数据集上工作。             

    获取COCO数据             

    为了训练YOLO,你需要所有的COCO数据和标签。脚本scripts/get_coco_dataset.sh将为您执行此操作。找出要将COCO数据放在哪里并下载它,例如:

    cp scripts/get_coco_dataset.sh data

    cd data

    bash get_coco_dataset.sh

    现在您应该拥有为Darknet生成的所有数据和标签。             

    修改COCO的cfg             

    现在找到darknet目录。我们必须更改cfg/coco.data配置文件以指向您的数据:

    1 classes= 80

      2 train  = <path-to-coco>/trainvalno5k.txt

      3 valid  = <path-to-coco>/5k.txt

      4 names = data/coco.names

      5 backup = backup

    您应该用放置coco数据的目录替换<path to coco>。             

    您还应该修改模型cfg以进行训练,而不是测试。cfg/yolo.cfg应该如下所示:

    [net]

    # Testing

    # batch=1

    # subdivisions=1

    # Training

    batch=64

    subdivisions=8

    ....

    训练模型             

    现在我们可以训练了!运行命令:

    ./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74

    如果要使用多个GPU运行:

    ./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74 -gpus 0,1,2,3

    如果要从检查点停止并重新开始训练:

    ./darknet detector train cfg/coco.data cfg/yolov3.cfg backup/yolov3.backup -gpus 0,1,2,3

    开放图像数据集上的YOLOv3

    wget https://pjreddie.com/media/files/yolov3-openimages.weights

    ./darknet detector test cfg/openimages.data cfg/yolov3-openimages.cfg yolov3-openimages.weights

    yolo地址怎么了?             

    如果您使用的是YOLO版本2,您仍然可以在此处找到该网站:

    https://pjreddie.com/darknet/yolov2/

    引用             

    如果你在工作中使用YOLOv3,请引用我们的论文!

    @article{yolov3,

      title={YOLOv3: An Incremental Improvement},

      author={Redmon, Joseph and Farhadi, Ali},

      journal = {arXiv},

      year={2018}

    }

     

     

  • 相关阅读:
    中文分词技术
    布隆过滤器(Bloom Filter)详解
    真正理解Mysql的四种隔离级别
    从内核文件系统看文件读写过程
    如何评价腾讯开源的消息中间件TubeMQ?
    零拷贝(Zero-copy)及其应用详解
    深入了解RabbitMQ
    (四)下载利器aria2
    (三)轻量级文件服务器filebrowser
    log4j 2整理
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/12817478.html
Copyright © 2011-2022 走看看