小白教程:Ubuntu下使用Darknet/YOLOV3训练自己的数据集
YOLOV3官网教程:https://pjreddie.com/darknet/yolo/
使用预训练模型进行检测
git clone https://github.com/pjreddie/darknet(如果安装不了,先试试sudo apt-get install git)
cd darknet
make
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
我们没有使用OpenCV编译Darknet,因此无法直接显示检测。 相反,它将它们保存在predictions.png中。 您可以打开它以查看检测到的对象。
多个图像
./darknet detect cfg/yolov3.cfg yolov3.weights
输入图片路径:
data/horses.jpg
可以在darknet文件夹下看到prediction.jpg
它将提示您尝试更多路径来尝试不同的图像。完成后Ctrl-C用于退出程序。
更改检测阈值
默认情况下,YOLO仅显示检测到的置信度为.25或更高的对象。您可以通过将-thresh 标志传递给yolo命令来更改此设置。例如,要显示所有检测,您可以将阈值设置为0:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0
微小的YOLOv3
对于受限环境,我们有一个非常小的模型yolov3-tiny。要使用此模型,请先下载权重:
wget https://pjreddie.com/media/files/yolov3-tiny.weights
然后使用微小的配置文件和权重运行检测器:
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
网络摄像头上的实时检测
如果您看不到结果,则在测试数据上运行YOLO并不是很有趣。而不是在一堆图像上运行它让我们在网络摄像头的输入上运行它!
要运行此演示,您需要使用CUDA和OpenCV编译Darknet。然后运行命令:
使用CUDA编译(按照这个博客安装CUDAhttps://blog.csdn.net/jonms/article/details/79318566)
CPU上的Darknet速度很快,但它在GPU上的速度要快500倍!你必须有一个Nvidia GPU,你必须安装CUDA(
安装CUDA后,Makefile将基本目录中的第一行更改为:
GPU=1
现在您可以make启用项目和CUDA。默认情况下,它将在系统的第0个图形卡上运行网络(如果您正确安装了CUDA,则可以使用列出您的图形卡nvidia-smi)。如果你想更改Darknet使用的卡,你可以给它一个可选的命令行标志-i ,如:
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
如果您使用CUDA进行编译但想要进行CPU计算,无论出于何种原因您都可以使用-nogpuCPU来代替:
./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights
享受您新的超快速神经网络!
使用OpenCV进行编译
默认情况下,Darknet stb_image.h用于图像加载。如果你想要更多支持奇怪的格式,你可以使用OpenCV!OpenCV还允许您查看图像和检测,而无需将其保存到磁盘。
首先安装OpenCV。如果你从源代码执行此操作,它将是漫长而复杂的,因此请尝试让包管理器为您执行此操作。
接下来,将第二行更改为Makefile:
OPENCV=1
你完成了!要试一试,首先要重新开始make。
然后使用imtest例程来测试图像加载和显示:
./darknet imtest data/eagle.jpg
如果你有一堆老鹰的窗户,你就成功了!他们可能看起来像:
继续前面的网络摄像头上的实时检测
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
YOLO将显示当前的FPS和预测类以及在其上绘制边界框的图像。
您需要连接到OpenCV可以连接的计算机的网络摄像头,否则它将无法工作。如果您连接了多个网络摄像头并想要选择使用哪个网络摄像头,则可以传递标记-c 以进行选择(OpenCV 0默认使用网络摄像头)。
如果OpenCV可以读取视频,您也可以在视频文件上运行它:这就是我们制作YouTube视频的方式。
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
关于VOC的培训YOLO
如果您想要使用不同的训练方案,超参数或数据集,您可以从头开始训练YOLO。以下是如何使其在Pascal VOC数据集上运行。
获取Pascal VOC数据
要训练YOLO,您将需要2007年至2012年的所有VOC数据。您可以在此处找到数据的链接。要获取所有数据,在darknet下新建一个文件夹VOCdevkit,并从该目录运行:
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
为VOC生成标签
现在我们需要生成Darknet使用的标签文件。Darknet希望.txt每个图像都有一个文件,图像中的每个地面实况对象都有一行,如下所示:
<object-class> <x> <y> <width> <height>
其中x,y,width,和height相对于图像的宽度和高度。要生成这些文件,需要执行如下操作。
wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py
ls
cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt
将2007和2012所有训练文件放在一个一起。
修改Pascal数据的Cfg
现在转到Darknet目录。我们必须更改cfg/voc.data配置文件以指向您的数据:<