手把手教你用yolov3模型实现目标检测教程(一) - 环境配置
手把手教你用yolov3模型实现目标检测(一)
写在前面:
由于项目需要,使用yolov3模型做了各种现实场景物体的目标检测。做完了过了好长时间,感觉有些遗忘,还是该留下点东西,方便自己查找,也希望能惠及他人。
同时,为了督促自己补充理论体系,尽量做到知其然知其所以然
1、环境配置
首先,本教程是完全在ubuntu 18.04下进行的,你能找到的成熟框架不外乎以下三个:
https://github.com/qqwweee/keras-yolo3 ,基于keras编写https://github.com/pjreddie/darknet ,基于c++编写https://github.com/AlexeyAB/darknet , 基于c++编写
其中,第一个keras-yolo3需要搭建tensorflow-gpu,keras等很多环境。比较麻烦,有时间学习可以用这个。
推荐使用第二个官方框架pjreddie/darknet,官网(教程)如下:https://pjreddie.com/darknet/yolo/
第三个AlexeyAB/darknet项目近期一直在维护,而且文档特别详细。但个人感觉第二个官方框架实践起来更简单。
建议训练和检测过程中有任何问题,先到第二第三个仓库的issues中查找,也许会找到你想要的。
好,那我们开始:
先下载该项目:https://github.com/pjreddie/darknet
CPU/GPU编译:
编译过程中,检查环境:
我的环境:cmake version 3.10.2; 别的版本应该也可
Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct 13 2017, 12:02:49)
教程也很清楚哦:https://pjreddie.com/darknet/install/
注意:darknet不支持gcc和g++6以上的版本,而ubuntu18.04默认安装的gcc-7
因此,需要将gcc和g++分别降级:
(1) gcc/g++降级为4.8版本
(1)在Ubuntu 16.04上安装老版gcc十分简单,直接用apt-get命令下载即可.
sudo apt-get install gcc-4.8
(2)安装完成后输入命令gcc --verison查看gcc的版本,此时还是高版本
(3)查看版本gcc-4.8版本是否安装成功
ls /usr/bin/gcc*
(4)输入命令设置默认版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
(5)查看默认结果(非必须)
sudo update-alternatives --config gcc
(6)最终gcc --version 发现变成4.8版本了g++的降级,只需把上面gcc改称g++。gcc和g++的版本应该必须一致。
CPU:
cd darknet-master
make
就完事了,一般不会有问题。
GPU:
yolov3是十分高效快速的!这点不用过多介绍,虽然CPU版本以及很快,但GPU号称快了500倍!
修改根目录下的makefile文件的GPU和CUDNN为1即可:
GPU=1
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0
改完然后同样的,根目录 -> make就ok了
我的环境:
ubuntu18.04+CUDA9.0+CUDNN7+nvidia1050 4G显存
安装教程:(很多链接)
https://blog.csdn.net/Hu_helloworld/article/details/102614562
CPU和GPU实测yolov3检测同一张图片,cpu到7、8s,GPU就是0.几s的量级
如果对于精确度要求不是特别高,而机器配置低对速度要求更高,建议使用yolov3-tiny版本(轻量,速度也可)
2、下载与训练模型
yolov3.weights
模型文件包括**.cfg配置文件和.weights**权重文件
.cfg文件在项目中 /cfg目录
下载权重文件:
https://pjreddie.com/media/files/yolov3.weights
或者
https://pjreddie.com/media/files/yolov3-tiny.weights
3、使用预训练模型测试目标检测
最简单的检测命令,在根目录下执行
./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 output0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BFLOPs1 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 BFLOPs106 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%
其中data文件夹中提供了一些示例图像,以备不时之需。尝试data/eagle.jpg,data/dog.jpg,data/person.jpg,或data/horses.jpg!
以下是我训练tiny模型的检测结果
到此位置我们可以使用官方提供的预训练模型进行目标检测,后面想在我们自己的场景下使用还需要自己训练样本,调整参数,调用自己的模型进行检测。
下篇介绍,标注自己的PASCAL VOC图片数据集,训练自己的yolov3-tiny模型。
手把手教你用yolov3模型实现目标检测教程(一) - 环境配置相关推荐
- mmrotate旋转目标检测框架从环境配置到训练自己的数据集
mmrotate旋转目标检测框架从环境配置到训练自己的数据集 最近有旋转目标检测的需求了,在寻找旋转目标检测算法的过程中,发现已经有人提前测评了各类旋转目标检测框架了,结果是mmrorate效果最好. ...
- 英伟达公开课 | 手把手教你部署一辆高速目标检测Jetbot智能小车
主讲人 | 何琨 英伟达 量子位编辑 | 公众号 QbitAI 3月26日,英伟达图像处理系列公开课第三期线上开播,来自NVIDIA开发者社区的何琨老师,与数百位开发者共同探讨了: 利用NVIDIA迁 ...
- 目标检测FCOS网络环境配置、训练自己的数据集
文章:FCOS: Fully Convolutional One-Stage Object Detection 项目源码:https://github.com/tianzhi0549/FCOS 目录 ...
- 手把手教你用深度学习做物体检测(四):模型使用
上一篇<手把手教你用深度学习做物体检测(三):模型训练>中介绍了如何使用yolov3训练我们自己的物体检测模型,本篇文章将重点介绍如何使用我们训练好的模型来检测图片或视频中的物体. 如 ...
- 手把手教你用深度学习做物体检测(三):模型训练
本篇文章旨在快速试验使用yolov3算法训练出自己的物体检测模型,所以会重过程而轻原理,当然,原理是非常重要的,只是原理会安排在后续文章中专门进行介绍.所以如果本文中有些地方你有原理方面的疑惑,也没关 ...
- 手把手教你用深度学习做物体检测(二):数据标注
"本篇文章将开始我们训练自己的物体检测模型之旅的第一步-- 数据标注." 上篇文章介绍了如何基于训练好的模型检测图片和视频中的物体,若你也想先感受一下物体检测,可以看看上篇 ...
- 计算机视觉:基于YOLO-V3林业病虫害目标检测
计算机视觉:基于YOLO-V3林业病虫害目标检测 卷积神经网络提取特征 根据输出特征图计算预测框位置和类别 建立输出特征图与预测框之间的关联 计算预测框是否包含物体的概率 计算预测框位置坐标 计算物体 ...
- 树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测
树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测 本文将实现树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测,我们会先实现树莓派对视频文件的逐帧检测来验证算法流程, ...
- 基于yolov3的行人目标检测算法在图像和视频中识别检测
资源下载地址:https://download.csdn.net/download/sheziqiong/85772186 资源下载地址:https://download.csdn.net/downl ...
最新文章
- 自然语言处理常用数据集
- Microbiome:植物发育和氮肥共同作用下的小麦根系微生物组
- 【扩展推荐】Intervention/image 图片处理
- 认证登录时代来临,主流验证登录方式盘点
- java文件上传下载服务并发超时,先收藏了
- 开发自己的区块链基础功能篇
- ASP.NET 常用验证
- c++ 或者 vc++中判断程序实例是否运行
- 如何保证电子邮件的安全
- java输出一些内容到日志文件
- Centos 6编译安装apachePHPmysql
- asp.net关于倒出excel文件
- 一刀两断划分子网例子
- Ubuntu16.04安装后开发环境配置和常用软件安装
- 215.数组中的第K个最大元素
- 身份证归属地查询接口
- 为何甲骨文裁员,偏偏要选中国人?
- Windows2000下IE5升级到IE6
- 如何学习计算机网络——学习方法
- goproxy代理软件 v10.3 轻量级高性能代理软件+链式代理+正向代理+反向代理
热门文章
- js 系统教程-01-JavaScript 的历史,JavaScript 与 Java 的关系,JavaScript 与 ECMAScript 的关系,JavaScript的版本
- 英语六级考600分以上是一种怎样的体验?
- 排队论的计算机模拟,排队论模型(八):Matlab 生成随机数、排队模型的计算机模拟...
- 使用Promise.all实现限制并发请求函数
- Lemur的disk index
- 局部渐近稳定,全局渐进稳定,一致有界,一致最终有界
- 浮点数的表示及相关知识详解
- 记录一道流量分析的题——攻防世界:流量分析1
- 普中科技手把手教你学ESP32--基于MicroPython-01
- python求一元二次方程的解法_python进行二次方程式计算的实例讲解