背景:github源码地址 https://github.com/pjreddie/darknet
网站地址:https://pjreddie.com/darknet/
目的:安装并运行Darknet
相关文章:
YOLOv3:Darknet代码解析(一)安装Darknet
YOLOv3:Darknet代码解析(二)代码初步
YOLOv3:Darknet代码解析(三)卷积操作
YOLOv3:Darknet代码解析(四)结构更改与训练
YOLOv3:Darknet代码解析(五)权重与特征存储
YOLOv3: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 训练模型
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....
无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。
而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。
编译:把高级语言所书写的代码转换成机器可识别的指令,此时还不能够被执行,编译器通过检查高级语言的语法,函数和变量的声明是否正确!如果正确则产生中间目标文件(目标文件在Liunx中默认后缀为“.o”)
链接:将多.o 文件,或者.o 文件和库文件链接成为可被操作系统执行的可执行程序
静态库:又称为文档文件(Archive File) 。它是多个.o文件的集合。Linux中静态库文件的后缀为“.a”
共享库:也是多个.o 文件的集合,但是这些.o 文件时有编译器按照一种特殊的方式生成(共享库已经具备了可执行条件)
输入 ./darknet
系统会输出 usage: ./darknet
下面1.3与1.4为可选项。1.3为运用GUDA进行GPU加速,1.4为运用OpenCV
在makefile中把第一行改为 GPU=1,然后make
通过输入nvidia-smi指令可以查看显卡使用情况。
然后可以选择 i
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
也可使用nogpu指令不使用GPU
./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights
指令中间连着的不加空格。
第一栏的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是计算模式。
通常模式下,Darknet用stb_image.h用于图片加载。如果想用更多格式的图片加载,可以使用OpenCV。需要在makefile中把第二行改为OPENCV=1,然后make。
可以直接输入下列指令验证。
./darknet imtest data/eagle.jpg
输出为一个鹰的图片代表使用成功。
YOLOv3非常快速与准确,在IoU设为0.5时测定mAP,相比Focal Loss有4x的速度。并且,在速度与准确率之间tradeoff时,不用重新训练模型。比R-CNN快1000倍,比faster-RCNN快100倍。
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会快很多。
./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:
通常情况下YOLO的检测置信概率阈值为0.25或者更高,我们可以更改,输入-thresh
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0
结果会输出:![][all]
是一个非常小的模型,用于受限运算资源和存储资源的情况,yolov3-tiny.我们FPGA上需要用到这个模型。
wget https://pjreddie.com/media/files/yolov3-tiny.weights
运用相应的cfg文件和weights运行
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
运行结果
见 https://pjreddie.com/darknet/yolo/
YOLOv3:Darknet代码解析(四)结构更改与训练
https://blog.csdn.net/weixin_36474809/article/details/81326286