手把手教你用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.youkuaiyun.com/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                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%

其中data文件夹中提供了一些示例图像,以备不时之需。尝试data/eagle.jpg,data/dog.jpg,data/person.jpg,或data/horses.jpg!
以下是我训练tiny模型的检测结果
在这里插入图片描述
到此位置我们可以使用官方提供的预训练模型进行目标检测,后面想在我们自己的场景下使用还需要自己训练样本,调整参数,调用自己的模型进行检测。
下篇介绍,标注自己的PASCAL VOC图片数据集,训练自己的yolov3-tiny模型。

### 使用YOLOv5训练自定义目标检测模型 #### 安装必要依赖 为了确保可以顺利运行YOLOv5,需要先安装些必要的库和工具。这通常包括Python环境、PyTorch框架以及其他辅助包。具体操作可以通过官方文档中的指引完成[^1]。 #### 数据集准备 对于任何机器学习项目来说,高质量的数据都是成功的关键之。针对YOLOv5而言,数据应该被整理成特定格式——每张图片对应个`.txt`标签文件,其中包含了物体的位置信息(边界框坐标)及其类别编号。此外,还需要创建个包含所有图像路径列表的文本文件用于后续处理过程。 #### 创建配置文件 在开始之前,还需编写或修改几个重要的配置文件来指导整个流程: - **data.yaml**: 描述了数据集结构的信息,比如类别的名称、训练/验证集合目录位置等。 - **model.yaml**: 定义了神经网络架构细节,默认情况下可以直接沿用预设模板而无需改动太多参数设置除非有特殊需求想要优化性能表现。 #### 开始训练 当切准备工作就绪之后就可以启动实际的训练环节了。通过命令行界面执行如下所示语句即可调用默认超参设定下的标准训练模式: ```bash python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt ``` 上述代码片段中指定了输入分辨率大小(`--img`)、批次数量(`--batch`)、迭代次数上限(`--epochs`)、所使用的数据源描述符(`--data`)还有初始化权重加载地址(`--weights`)作为主要选项传递给程序入口函数来进行轮完整的周期性更新直至达到预期效果为止。 #### 测试与评估 旦完成了足够的轮次后便可以获得初步成果并对其进行简单的质量检验。利用测试子集中未见过的新样本做预测分析从而计算出各类指标得分如mAP(mean Average Precision),以此衡量当前版本的好坏程度以便决定是否继续改进或是直接部署上线投入使用。 #### 进步探索 除了基本功能之外,还可以深入研究更多高级特性例如迁移学习、分布式多GPU加速运算、量化感知微调等等以期获得更佳的结果回报。同时也可以关注社区动态随时掌握最新进展趋势及时跟进前沿技术发展步伐。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值