YOLOv3:Darknet代码解析(一)安装Darknet

版权声明:转载注明出处:邢翔瑞的技术博客https://blog.csdn.net/weixin_36474809 https://blog.csdn.net/weixin_36474809/article/details/80881043

背景:github源码地址 https://github.com/pjreddie/darknet

网站地址:https://pjreddie.com/darknet/

目的:安装并运行Darknet

目录

1.安装Darknet

1.1 下载与make

1.1.1 知识:make指令

1.2 验证安装完成

1.3 运用GUDA

1.3.1 知识:nvidia-smi指令

1.4 运用OpenCV

2. YOLO_v3 实时的目标检测

2.1 关于YOLO_v3

2.2 安装与运行

2.2.3 多图像处理

2.2.4 更改检测阈值

2.3 Tiny YOLOv3

2.3.1 下载权重

2.3.2 运行与测试

2.4 训练模型


1.安装Darknet

1.1 下载与make

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

系统会出现下面这些输出:

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm....

1.1.1 知识:make指令

无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。

而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。

编译:把高级语言所书写的代码转换成机器可识别的指令,此时还不能够被执行,编译器通过检查高级语言的语法,函数和变量的声明是否正确!如果正确则产生中间目标文件(目标文件在Liunx中默认后缀为“.o”)

链接:将多.o 文件,或者.o 文件和库文件链接成为可被操作系统执行的可执行程序

静态库:又称为文档文件(Archive File) 。它是多个.o文件的集合。Linux中静态库文件的后缀为“.a”

共享库:也是多个.o 文件的集合,但是这些.o 文件时有编译器按照一种特殊的方式生成(共享库已经具备了可执行条件)

1.2 验证安装完成

输入  ./darknet

系统会输出  usage: ./darknet <function>

下面1.3与1.4为可选项。1.3为运用GUDA进行GPU加速,1.4为运用OpenCV

1.3 运用GUDA

在makefile中把第一行改为 GPU=1,然后make

通过输入nvidia-smi指令可以查看显卡使用情况。

然后可以选择 i <index>选择Darknet使用的显卡。例如:

./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights

也可使用nogpu指令不使用GPU

./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights

1.3.1 知识:nvidia-smi指令

指令中间连着的不加空格。

第一栏的Fan:风扇转速,从0到100%之间变动,这个速度是计算机期望的风扇转速不是实际转速。有的设备不会返回转速,因为它不依赖风扇冷却。

第二栏的Temp:是温度。
第三栏的Perf:是性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能。
第四栏下方的Pwr:是能耗,上方的Persistence-M:是持续模式的状态,持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少,这里显示的是off的状态。
第五栏的Bus-Id是涉及GPU总线的东西,domain:bus:device.function
第六栏的Disp.A是Display Active,表示GPU的显示是否初始化。
第五第六栏下方的Memory Usage是显存使用率。
第七栏是浮动的GPU利用率。
第八栏上方是关于ECC的东西。
第八栏下方Compute M是计算模式。

1.4 运用OpenCV

通常模式下,Darknet用stb_image.h用于图片加载。如果想用更多格式的图片加载,可以使用OpenCV。需要在makefile中把第二行改为OPENCV=1,然后make。

可以直接输入下列指令验证。

 

./darknet imtest data/eagle.jpg

输出为一个鹰的图片代表使用成功。

 

2. YOLO_v3 实时的目标检测

2.1 关于YOLO_v3

YOLOv3非常快速与准确,在IoU设为0.5时测定mAP,相比Focal Loss有4x的速度。并且,在速度与准确率之间tradeoff时,不用重新训练模型。比R-CNN快1000倍,比faster-RCNN快100倍。

2.2 安装与运行

2.2.1 按上面安装好Darknet之后,下载相应的权重

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

2.2.2 运行相应的detector

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

然后回出现类似下面的内容

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%

用OpenCV编译会显示相应的图片,没有用OpenCV不会弹出但是会将图片存成predictions.png.运用CPU会有6-12秒运行一副图像,如果用GPU会快很多。

2.2.3 多图像处理

./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:

2.2.4 更改检测阈值

通常情况下YOLO的检测置信概率阈值为0.25或者更高,我们可以更改,输入-thresh <val>,例如:我们通过下面这行指令把阈值设为0

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

结果会输出:![][all]

2.3 Tiny YOLOv3

是一个非常小的模型,用于受限运算资源和存储资源的情况,yolov3-tiny.我们FPGA上需要用到这个模型。

2.3.1 下载权重

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

2.3.2 运行与测试

运用相应的cfg文件和weights运行

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

运行结果

2.4 训练模型

见  https://pjreddie.com/darknet/yolo/

  YOLOv3:Darknet代码解析(四)结构更改与训练 

https://blog.csdn.net/weixin_36474809/article/details/81326286

没有更多推荐了,返回首页