0
点赞
收藏
分享

微信扫一扫

YOLOV3训练环境的搭建


YOLOV3推理环境搭建参考文章:

建立darknet的环境

参考上面的文章,搭建darknet环境,这里需要注意的是darknet使用如下的源

https://github.com/AlexeyAB/darknet

本文使用的就是如上的源,便以前记得把CUDA和OPENCV的支持打开,按照上面博客的方法安装OPENCV依赖包:

YOLOV3训练环境的搭建_权重

之后编译darknet项目,并验证YOLOV3推理是否可以成功进行。

下载COCO数据集:

首先将darkent/scripts/get_cocodataset.sh拷贝到darknet/data目录: 

YOLOV3训练环境的搭建_目标检测_02

之后,在darknet/data目录执行bash get_coco_dataset.sh,开始下载COCO数据集。

YOLOV3训练环境的搭建_权重_03

COCO数据集非常的大,有18G左右,所以不但要求你的磁盘有足够的空间,也要求你有足够的耐心。

下载完成后,脚本会对数据进行解压,最终脚本执行结束之后,在darknet/data目录中,新增加了一个COCO目录,所下载的数据集以及数据及解压后的目录都在这里:

YOLOV3训练环境的搭建_深度学习_04

至于数据集的化,则在darknet/data/coco/images目录:

YOLOV3训练环境的搭建_目标检测_05

修改darknet/cfg/coco.data,将训练数据集的路径和权重文件的目录设置为正确的路径。

YOLOV3训练环境的搭建_深度学习_06

下载预训练权重文件:

wget -c https://pjreddie.com/media/files/darknet53.conv.74

开始训练: 

在darknet目录下,执行训练命令:

./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74

开始训练,遇到如下的错误:

YOLOV3训练环境的搭建_人工智能_07

错误原因是我们需要把batch 和subdivisions设置为64,我们按照要求设置,之后再次执行,遇到新的错误:

YOLOV3训练环境的搭建_权重_08

这条错误怀疑是由于我PC的资源不足以训练yolov3.cfg这个相对复杂的模型,天无绝人之路,看到darknet/cfg目录下还有不少基于YOLOV3改进的模型,我们改用小模型yolov3-tiny.cfg来训练,训练前同样修改yolov3-tiny.cfg的batch 和subdivisions设置为64,此时,darknet目录的状态为:

(base) caozilong@caozilong-RedmiBook-14:~/darknet$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)

修改: Makefile
修改: cfg/coco.data
修改: cfg/yolov3-tiny.cfg

未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)

darknet53.conv.74
predictions.jpg

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
(base) caozilong@caozilong-RedmiBook-14:~/darknet$ git diff
diff --git a/Makefile b/Makefile
index 431933c..ba48185 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
-GPU=0
+GPU=1
CUDNN=0
CUDNN_HALF=0
-OPENCV=0
+OPENCV=1
AVX=0
OPENMP=0
LIBSO=0
@@ -119,7 +119,7 @@ CFLAGS+= -DGPU
ifeq ($(OS),Darwin) #MAC
LDFLAGS+= -L/usr/local/cuda/lib -lcuda -lcudart -lcublas -lcurand
else
-LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand
+LDFLAGS+= -L/usr/local/cuda/lib64 -L/usr/local/cuda-11.5/targets/x86_64-linux/lib/stubs -lcuda -lcudart -lcublas -lcurand
endif
endif

diff --git a/cfg/coco.data b/cfg/coco.data
index 3003841..8cadd38 100644
--- a/cfg/coco.data
+++ b/cfg/coco.data
@@ -1,8 +1,8 @@
classes= 80
-train = /home/pjreddie/data/coco/trainvalno5k.txt
+train = /home/caozilong/darknet/data/coco/trainvalno5k.txt
valid = coco_testdev
#valid = data/coco_val_5k.list
names = data/coco.names
-backup = /home/pjreddie/backup/
+backup = /home/caozilong/backup/
eval=coco

diff --git a/cfg/yolov3-tiny.cfg b/cfg/yolov3-tiny.cfg
index cfca3cf..ad9c505 100644
--- a/cfg/yolov3-tiny.cfg
+++ b/cfg/yolov3-tiny.cfg
@@ -1,7 +1,7 @@
[net]
# Testing
-batch=1
-subdivisions=1
+batch=64
+subdivisions=64
# Training
# batch=64
# subdivisions=2
(base) caozilong@caozilong-RedmiBook-14:~/darknet$

coco目录是一个独立仓库,文件内容无法从外部的仓库DIFF中查看出来,我们进去看一下:

YOLOV3训练环境的搭建_git_09

 除了上面提到的trainvalno5k.txt文件保存了指向测试图像数据集的照片之外,还有一个label文件目录,是对训练集照片里面的内容的标签描述,每张训练图片对应一个文本标签描述:

YOLOV3训练环境的搭建_权重_10

下载YOLOV3-Tiny预训练权重

wget -c https://github.com/WongKinYiu/PartialResidualNetworks/blob/master/model/yolov3-tiny-prn.weights

不过貌似yolov3-tiny-prn.weights文件是给cfg/yolov3-tiny-prn.cfg模型准备的,我们先用命令生成一个预训练模型,命令是:

./darknet partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15

YOLOV3训练环境的搭建_git_11

之后,用生成的预训练权重文件执行训练命令

./darknet detector train cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.conv.15

这次成功执行,训练过程会启动一张坐标图来记录LOSS随着训练迭代次数增加的变化情况,左边的窗口是检测显卡状态用的,这张图是在训练开始后4个小时后截的,可以看到剩余训练时间仍有974个小时,非常的恐怖,我们已经选择的小模型进行训练了,如果训练的是大模型,训练时常可想而知,这也是为什么老黄的N卡能够垄断机器学习的训练领域的原因,他考虑到了高性能计算,并提供了CUDA,CUDANN等工具用于开发高性能计算的产品。

YOLOV3训练环境的搭建_目标检测_12

训练过程的动态情况,可以看到训练曲线进行的非常慢,用蜗牛乌龟形容它已经构成对蜗牛和乌龟的诽谤了,非要拿它们哥俩儿作比喻的花,也只能说它们可能是蜗牛世界里的蜗牛里的世界。。。里的蜗牛了,隔着好基层世界呢。

YOLOV3训练环境的搭建_目标检测_13

跑15个小时后:

YOLOV3训练环境的搭建_深度学习_14

训练后的权重文件:

YOLOV3训练环境的搭建_目标检测_15

先不看结果,只看大小,产生的权重文件和广泛使用的yolov3-tiny.weights大小是相同的。

YOLOV3训练环境的搭建_权重_16

我们用训练后的yolov3-tiny_10000.weights和yolov3-tiny_last.weights来测试推理的情况。

./darknet detect cfg/yolov3-tiny.cfg ./backup/yolov3-tiny_10000.weights data/dog.jpg
./darknet detect cfg/yolov3-tiny.cfg ./backup/yolov3-tiny_last.weights data/dog.jpg

训练效果的变好是个逐渐变化的过程:

YOLOV3训练环境的搭建_人工智能_17

一个半小时后:

YOLOV3训练环境的搭建_人工智能_18

YOLOV3训练环境的搭建_深度学习_19

训练30小时候

YOLOV3训练环境的搭建_目标检测_20

YOLOV3训练环境的搭建_权重_21

YOLOV3训练环境的搭建_git_22

YOLOV3训练环境的搭建_git_23

YOLOV3训练环境的搭建_git_24

YOLOV3训练环境的搭建_人工智能_25

人形检测,可以看到准确度和召回率不是很高。

YOLOV3训练环境的搭建_git_26

注意:

训练曲线图只有在OPENCV打开的情况下才会出来,如果OPENCV关闭,默认只有训练时控制台的打印输出,不会呼出训练进度曲线图。

YOLOV3训练环境的搭建_git_27

backup目录中保存的是不同阶段训练出来的权重文件,训练从一个预训练权重开始初始化网络,之后随着训练进度不断前进,不断产生新的更好的权重数据替换backup目录中的之前的权重文件,通过下图对比可以看到权重文件更新情况:

YOLOV3训练环境的搭建_权重_28

训练几个小时候,NPU温度已经飙升到90度,笔记本键盘上方5CM内都感觉得到股股热浪袭来,冬天放在房间里活脱脱就是一台取暖器。

看来有必要买台游戏本嫖机器学习了。

训练cfg/yolov3-tiny-prn.cfg

从名字上看,前文下载的yolov3-tiny-prn.weights预训练权重和这个模型也是有些关系的,所以有理由怀疑,是否可以使用yolov3-tiny-prn.cfg文件的模型进行训练,训练处的权重也适用于yolov3-tiny.cfg文件,为了避免走错方向,先对比yolov3-tiny-prn.cfg和yolov3-tiny.cfg的差异。

YOLOV3训练环境的搭建_人工智能_29

 差异不算大,先拿这个模型推理试试:

./darknet detect cfg/yolov3-tiny-prn.cfg yolov3-tiny-prn.weights beauty.jpeg

YOLOV3训练环境的搭建_git_30

./darknet detect cfg/yolov3-tiny-prn.cfg yolov3-tiny-prn.weights highway02_frame000010.jpg

YOLOV3训练环境的搭建_深度学习_31

生成预训练权重文件

./darknet partial cfg/yolov3-tiny-prn.cfg yolov3-tiny-prn.weights yolov3-tiny-prn.conv.15 15

YOLOV3训练环境的搭建_人工智能_32

训练跑完估计是不可能的了,电脑过了周末就要有它用,当前尽量跑完这个周末,让图像曲线多记录一些,分阶段更新训练曲线~, 就先写到这里。

结束! 

举报

相关推荐

0 条评论