【yolofastest上手】

一、前言

yolofastest网上资料比较少,也没有视频教学,所以想要使用参考了很多资料,只能说各资料都不尽全,让刚接触的小白无从下手。

参考资料:
github地址
yolo-fastest 快速上手
修改参数遇到的问题
能在ARM-CPU上实时识别图像的深度学习算法之yolo-fastest
手把手教你在服务器上用YOLOv4训练和测试数据集(保姆级)最好的一集
VOC2007数据集详细分析
训练的时候遇到的问题

二、准备工作

环境首先要配置好,否则一行代码也运行不了,而且遇到各种错误还是那种无法解决的,忙活一天结果发现是环境的问题,全是无用功了是,我研一同学都这么说,明明忙乎一天,但实际没什么进度,真是要功劳有苦劳,但除你自己外都是唯结果论,还好师兄很耐心容忍我的菜。本人环境如下:

1.linux

2.cuda11.8+cudnn

3.opencv

4.vscode

三、测试

1、克隆代码

git clone https://github.com/dog-qiuqiu/Yolo-Fastest

然后你就获得到名为Yolo-Fastest的文件夹,文件目录结构如下

2、编辑makefile文件并make

切换到Yolo-Fastest文件目录下,编辑makefile文件(重点)

python 复制代码
GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=1
OPENMP=0
LIBSO=0
ZED_CAMERA=0
ZED_CAMERA_v2_8=0

# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
# set ZED_CAMERA=1 to enable ZED SDK 3.0 and above
# set ZED_CAMERA_v2_8=1 to enable ZED SDK 2.X

USE_CPP=0
DEBUG=0

# ARCH= -gencode arch=compute_35,code=sm_35 \
#       -gencode arch=compute_50,code=[sm_50,compute_50] \
#       -gencode arch=compute_52,code=[sm_52,compute_52] \
# 	    -gencode arch=compute_61,code=[sm_61,compute_61]

OS := $(shell uname)

# GeForce RTX 3070, 3080, 3090
ARCH= -gencode arch=compute_86,code=[sm_86,compute_86]

#后面的内容我就不写了

我修改的地方如下,别的地方都没动

1、ARCH参数,makefile文件里都有自己显卡相对应的参数,找到自己显卡型号然后把相应的注释去掉就行,然后把上面的ARCH注释掉,只保留自己显卡对应的ARCH,比如我的RTX3090就是上面。

2、NVCC=/usr/local/cuda-11.8/bin/nvcc nvcc修改成自己的cuda相对应版本

3、全局搜索,makefile文件中的cuda修改成cuda-11.8,例如CFLAGS+= -DCUDNN -I/usr/local/cuda-11.8/include

修改完成之后,执行make -j,这时候可能会遇到一些错误,报什么错误就搜索一下,我之前遇到的错误就是显卡驱动未更新、ARCH未修改、opencv没安装之类的错误,总之就是环境错误,一定要把环境先配置好。执行完之后会出现darknet文件,这时候就可以进行测试了。

3、进行测试

官方文档上写bash image_yolov4.sh,那看一下这个文件里写了什么内容:

bash 复制代码
./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights data/dog.jpg -i 0 -thresh 0.25

在看一下啊,但是咱没有yolov4.weights这个权重文件呀,这个文件还是我之前上网搜索然后下载粘贴到文件下的,官方文档也不怎么靠谱。这个权重文件也放下面吧。

链接:https://pan.baidu.com/s/1xzsaSzV7jLoBTZA-JLXXfA

提取码:s5zw

测试没什么问题就可以训练自己的数据了,在这里只写图片。

训练数据

1、获取预训练权重文件

文档上是这么写的:
./darknet partial yolo-fastest.cfg yolo-fastest.weights yolo-fastest.conv.109 109

但是欸,看一下咱们的文件目录结构,这个什么yolo-fastest.cfg、yolo-fastest.weights,没有这俩文件啊!报错就是cant open file,你说说这怎么办,文档写的个啥,cfg文件里也没有这俩啊,我就找了挺久,以为这俩文件也能上网跟yolov4.weights一样能搜到下载呢,但是搜不到,寄。后来查看文件夹,找到了。

藏得挺深,在这个文件夹里,好了,咱们把上面的权重文件和cfg放到Yolo-Fastest的目录下并重命名在执行代码。

这样就获取到yolo-fastest.conv.109文件了,也不知道为啥一定要这样命名。

2、准备数据集

要准备哪些?步骤省略,我是师兄给我的,我也不知道怎么制作数据集。最终需要的文件如下(红色框框):

其中重要的是obj.data文件

准备好之后,把这些文件都放入data文件夹中。

3、修改cfg文件

在进行训练之前,要修改cfg中的参数
cfg文件中的参数注释

我在这里修改了通道数以及classes,注意修改了classes之后还需要修改filters参数,我之前就没修改filters参数,就会报错Error: l.outputs == params.inputs filters= in the [convolutional]-layer doesn't correspond to classes= or mask= in [yolo]-layer

以下是解决方案,参考一下触类旁通举一反三。filters=(classes+5)×3。

吐槽一下, 还vip收费文章被恶心到了gdx

但是我在cfg文件里,看到有非常多的filters怎么办,另外classes有两处,都需要修改的,filters就是在两个classes上面,这两处。

好了准备工作都完成了。

4、训练

文档上是这么写的
./darknet detector train voc.data ./Yolo-fastest/VOC/yolo-fastest.cfg yolo-fastest.conv.109

但是,咱们的data和cfg文件不是上面写的,需要改成自己的。
./darknet detector train data/obj.data yolo-fastest.cfg yolo-fastest.conv.109

运行,结果报错了!

它说了,If error occurs- run training with flag: -dont show好,那么就加上这句
./darknet detector -dont_show train data/obj.data yolo-fastest.cfg yolo-fastest.conv.109

好了没有错误了,训练好的模型文件将会保存在backup文件夹下面。训练的差不多了,打开backup文件夹看一下。

感觉差不多了就ctrl+c停止训练,然后看一下成果。

5、检验成果

获取mAP指标
./darknet detector map data/obj.da ta ModelZoo/yolo-fastest-1.1_coco/yolo-fastest-1.1.cfg backup/yolo-fastest-1_10000.weights -points 11

./darknet detector map data/obj.data yolo-fastest.cfg backup/yolo-fastest_1000.weights -points 11

坏了,他这个怎么显示,mAP是0呢,中间肯定出错了。

从头梳理一遍,我生成darknet,进行小狗图片测试成功,darknet文件是没错的;

其次是获取预训练权重文件、准备数据集和修改cfg文件。好,我就直接说之前错误的原因吧:

1、没有准备test.txt(一开始只有train.txt),obj.data中没有valid这一行。

2、我先修改了cfg再获取的预训练权重文件。

这两个错误以后要避免!另外不一定要等到训练很久之后检验mAP的时候才发现错误。出现如下错误就要及时停止:

1、Yolo-Fastest/chart_yolo-fastest.png这个文件的图像不正常,正常的如下,否则停止修改错误再训练

2、控制台出现以下错误

重新修改好错误重新训练,获取mAP数据如下,效果不错。
./darknet detector map data/obj.data yolo-fastest.cfg backup/yolo-fastest_last.weights -points 11

相关推荐
最爱番茄味1 分钟前
Python实例之函数基础打卡篇
开发语言·python
程序猿000001号22 分钟前
探索Python的pytest库:简化单元测试的艺术
python·单元测试·pytest
engchina1 小时前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
Dream_Snowar2 小时前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶2 小时前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
汪洪墩2 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
KeepThinking!3 小时前
YOLO-World:Real-Time Open-Vocabulary Object Detection
人工智能·yolo·目标检测·多模态
程序员shen1616114 小时前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
人人人人一样一样4 小时前
作业Python
python