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标志传递给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标志进行选择(OpenCV默认使用网络摄像头0)。
如果OpenCV可以读取视频,也可以在视频文件上运行它:
./darknet
detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
这就是我们制作上述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文件,并为图像中的每个真实值对象创建一条线,如下所示:
其中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 = /train.txt
3 valid = 2007_test.txt
4 names =
data/voc.names
5 backup =
backup
您应该将替换为放置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 = /trainvalno5k.txt
3 valid = /5k.txt
4 names =
data/coco.names
5 backup =
backup
您应该用放置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}
}
AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)相关推荐
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(六)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(六) Tiny Darknet 听过很多人谈论SqueezeNet. SqueezeNet很酷,但它只是优化参数计数.当大多数高质量的 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(五) RNNs in Darknet 递归神经网络是表示随时间变化的数据的强大模型.为了更好地介绍RNNs,我强烈推荐Andrej K ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(四)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(四) Nightmare 从前,在一所大学的大楼里,西蒙尼亚.维达第和齐瑟曼有一个很好的主意,几乎和你现在坐的大楼完全不同.他们想,嘿 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(三) ImageNet分类 您可以使用Darknet为1000级ImageNet挑战赛分类图像.如果你还没有安装Darknet,你应该 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(一)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(一) Darknet: C语言中的开源神经网络 Darknet是一个用C和CUDA编写的开源神经网络框架.它速度快,易于安装,支持CP ...
- alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)
原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...
- yolov3(三:算法框架解析)
应用见: https://blog.csdn.net/Darlingqiang/article/details/103889245 https://blog.csdn.net/Darlingqiang ...
- 蚂蚁集团网络通信框架 SOFABolt 功能介绍及协议框架解析 | 开源
简介:开源网络通信框架 SOFABolt 首次线上直播文字回顾. ,有趣实用的分布式架构频道. 回顾视频以及 PPT 查看地址见文末.欢迎加入直播互动钉钉群 : 30315793,不错过每场直播. 大 ...
- 1、RPC框架解析:开篇-什么是RPC?
1.1.简介 从客户端转后台开发已经快三年了,决定沉淀一些系统性的东西,想了很多题目,最终决定写一篇关于RPC框架相关的吧. 准备从概念,应用,到实践总结出一个系列. 1.2.涉及知识 以gRPC为示 ...
最新文章
- 慕课网Flask高级编程实战-10.鱼书业务处理
- 运动目标检测_单高斯背景建模
- 在Spring Boot中使用内存数据库
- du 查看使用 linux命令,如何正确使用Linux命令–du
- python 用户的画像可视化呈现技术_一人一车一面:解读汽车大数据用户画像背后的AI技术...
- poj Muddy Fields
- android libbfaac.so,Android中Json数据读取与创建
- canvas 边界模糊_Canvas绘制线条模糊的解决方案
- html 在线打开pdf文件,Html打开pdf、word、xls等文件
- mysql mpm_mysql监控工具:zabbix+MPM(Performance Monitor for MySQL)
- 读《卧底经济学》有感
- 酷炫网页按钮,炫酷变色效果(附源码)
- b365老掉线 h3c路由器_H3C路由器频繁断线的原因及解决方法
- Mysql数据库——高阶语句(上)
- 关于数据库系统的查询处理
- NVivo 2018 Essential Training NVivo 2018基础教程 Lynda课程中文字幕
- 字节架构师发布“绝版”Java并发实现原理剖析JDK源码
- 树莓派从入门到放弃之Docker上安装Jellyfin视频服务器
- js实现局部刷新数据
- 读取Excel数据到集合中