Part1:下载并编译darknet(此部分是无CUDA,无OpenCV,如果想用OpenCV和CUDA,看完该部分后继续part1补充。否则跳过补充部分)。
1.在terminal执行git clone https://github.com/pjreddie/darknet.git。
2.然后切换到darknet目录下
3.编译
三步操作代码如下:
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
4.如果执行顺利的话,输入./darknet,将会得到如下结果。至此part1部分结束。
备注:到这没有问题就直接看part2,有问题在看这里。前两步基本不会出现问题,第三步可能因为编译所需的东西并未安装而出现问题,如我在安装时候,因为之前并未安装g++而报错,错误如下:
g++ -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/image_opencv.cpp -o obj/image_opencv.o
make: g++: Command not found
Makefile:86: recipe for target 'obj/image_opencv.o' failed
make: *** [obj/image_opencv.o] Error 127
解决办法:sudo apt-get install g++
Part1补充:
1.用CUDA:
打开darknet文件,然后找到makefile文件,把GPU=0 改成GPU=1.
完成之后在终端make一下
2.用OpenCV:
打开darknet文件,然后找到makefile文件,把OPENCV=0 改成OPENCV=1.
完成之后在终端make一下。(在2用OpenCV时,我make的时候出了bug:https://mp.csdn.net/console/editor/html/107285616,看对你是否有帮助。)
如果电脑配置可以,我觉得都可以改成1.改完如下
改完别忘了make一下。
3.可以用以下语句测试一下OpenCv是否安装好:
./darknet imtest data/eagle.jpg
是不是像下面一样停不下来,停不下来就说明你的OpenCV好用,Ctrl+C来结束他吧。
关于使用GPU的修改,YOLO官方网站上给的操作只有这些,但是我看很多博客上也在Makefile文件修改了一些其他,为了防止后期的错误发生,在此处最好修改一下。 加黑的是修改后的自己的路径,注释的是原来的路径。
NVCC=/usr/local/cuda-10.1/bin/nvcc # NVCC=nvcc 修改为自己的路径
ifeq ($(GPU), 1)
#COMMON+= -DGPU -I/usr/local/cuda/include/
COMMON+= -DGPU -I/usr/local/cuda-10.1/include
CFLAGS+= -DGPU
#LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand
LDFLAGS+= -L/usr/local/cuda-10.1/lib64 -lcuda -lcudart -lcublas -lcurand
endif
修改完后记得make clean一下,然后再make.
备注:查找NVCC的安装路径的方法:which nvcc
Part2:下载权重、测试事例
分别执行下面两行代码:
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
执行完你将看到如下结果:(如果没用CUDA,速度可能比较慢。),如果你未用OpenCV,那么第二张图片不会自动弹出来,它位于darknet文件夹下predictions.jpg里,打开就可以看到了。
Part3:在VOC上训练YOLOV3
在这部分,你将从头开始训练
1.得到Pascal VOC Data数据集:
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
按照这个操作下载速度可能有些慢,给个镜像源的链接,用迅雷下载超快https://pjreddie.com/projects/pascal-voc-dataset-mirror/
下载完成后在darknet里面新建一个VOC文件夹,把下载好的几个放进去,然后用上面的三个命令解压。
2.生成.txt文件:
txt文件格式如下。
<object-class> <x> <y> <width> <height>
为了生成这些文件,我们需要在VOC下运行voc_label.py这个文件,这个文件存在scripts文件夹下,或者我们从这个地址下载。
然后运行。
wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py
运行完会生成5个txt文件,如下:
那个train.txt是下一步生成的,这步假装没看见。我们把2007的test当测试集,其他的作为训练集,训练数据的时候需要一个txt文件,因此我们把上面的除了2007test,整合到一起,运行下面语句即可,然后会生成一个train.txt,如上图所示。
cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt
3.修改配置文件:
到darknet目录下找到cfg/voc.data,打开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
#将第23行的路径改成自己得路径
4.下载预训练权重:
运行下面语句即可,但是速度很慢,可以单独从https://pjreddie.com/media/files/darknet53.conv.74下载下来,然后再放到darknet文件夹下。
wget https://pjreddie.com/media/files/darknet53.conv.74
5.开始训练模型:
没有GPU很慢的,有就用第二个语句,-gpus根据实际情况自行修改。
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3
6.测试模型:
将训练好的权重拷贝到weights文件夹下,改一下权重名,然后运行
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg weights/yolov3.weights data/dog.jpg
即可。
整体参考:YOLO 官方教程:https://pjreddie.com/darknet/yolo/
训练VOC数据集参考:https://blog.csdn.net/qq_34806812/article/details/81292151