2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练

基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练

时间:2020-10-02 13:40:02

相关推荐

基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练

数据集:DETRAC

UA-DETRAC数据集来自于北京和天津不同的24个区域道路的监控中的截图,且为车辆的俯拍角度,适用于城市的道路监控。

链接:/s/1HFasaCgogWZrNqPHEltIqg

提取码:6k0i

参考项目:

/AlexeyAB/darknet

/qqwweee/keras-yolo3 (使用该项目训练yolov3模型GPU)

/w5688414/article/details/78931910(制作VOC格式数据集)

环境:

win10,CUDA10.1,CUDNN7.6.0,vs,

python3.5. 4,tensorflow-gpu1.14.0,keras==2.1.5

需要注意的是最好在安装keras之前安装tensorflow-gpu.

GTX965(本地gpu)/2*2080(公司GPU服务器)

step1.windows10下CUDA和CUDNN的安装

更新显卡驱动(/Download/index.aspx?lang=en-us),一般来说,显卡驱动支持的cuda版本是向下兼容的,也就是说,安装低版本的cuda工具包都是可以使用GPU的。下面贴出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fai6Z5ZQ-1615951567306)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128100255227.png)]

在使用N卡的gpu进行模型训练的之前,必须安装cuda和cudnn。

首先可以进入终端输入nvcc -V或者nvcc --version查看是否安装cuda和cudnn

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hGqlhZY-1615951567310)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0127113810974.png)]

如果出现上图,则表明已经安装好cuda,版本为10.1。

如果安装可以看到对应的cuda版本,查看cudnn版本可通过打开C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include 目录下的cudnn.h文件查看,这里要注意的是cuda和cudnn对应的版本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9fwlguVR-1615951567312)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0127114157765.png)]

上图表明本地的cudnn版本为7.6.0。

主要要注意各个系统中tensorflow-gpu版本和python版本,cuda版本以及cudnn版本的对应,由下图tensorflow官网给出(其实不是说和下面不一致的就运行不了,注意到我的cuda版本和tensorflow-gpu版本也不是对应的,后面解释了tensorflow-gpu版本和cuda版本不一致的问题)

当然,如果你已经安装了python,tensorflow-gpu,cuda和cudnn,最好可以首先查看tensorflow能否使用gpu,如果可以大概率在你训练模型的时候也是可以的。

window

CPU

GPU

linux

CPU

GPU

安装项目所需的python工具包

pip install tensorflow-gpu==1.6.0

pip install keras==2.1.5

查看是否有GPU:返回GPU的参数

import tensorflow as tf

print(tf.test.gpu_device_name())

查看GPU是否可用:返回true/false

tf.test.is_gpu_available()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r58aadTi-1615951567315)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128091045330.png)]

GPU型号:GTX965,设备编号:0,GPU是否可用:true

我的电脑同时安装cuda10.0(cudnn7.4),cuda10.1(cudnn7.6),cuda11.1三个版本

存在的一个问题:

查看正在使用的cuda版本为10.1,但是由上图可以看出,在终端使用GPU时,却使用的是cuda10.0。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JiWIC6Iw-1615951567318)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128092129777.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nmvvWvXZ-1615951567321)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128092729988.png)]

个人给出的一个解释:

由于tensorflow-gpu安装的版本是1.14.0,根据tensorflow-gpu的版本找到对应的cuda版本(10.0)。

贴出cuda10.0和cudnn7.4的链接:

链接:/s/1Dy7JDy7v6px6XiMcCOYVvQ

提取码:x3e1

step2.制作VOC格式数据集:

将UA-DETRAC数据集下载并解压,得到以下文件:

DETRAC-Train-Images (5.22GB, 60 sequences)

DETRAC-Test-Images (3.94GB, 40 sequences)

DETRAC-Train-Annotations-XML

将项目文件git clone下来:git clone /qqwweee/keras-yolo3

制作voc数据集格式项目:get clone /w5688414/article/details/78931910

该数据集中train文件夹下的图片有几万张,为了减少模型训练时间,我只选取了路径UA-DETRAC(车辆检测数据集8250车辆)\DETRAC-train-data\Insight-MVT_Annotation_Train\MVI_20011下的六百多张图片。所以我只保留了DETRAC-Train-Annotations-XML文件夹下MVI_20011.xml以及Insight-MVT_Annotation_Train\MVI_20011下的照片。

1,在文件夹下创建VOCdevkit文件夹,然后创建VOC文件夹

VOC文件夹下有五个文件夹

├── Annotations # 存放xml文件,主要是记录标记框位置信息

├── ImageSets # 存放的都是txt文件,txt文件中每一行包含一个图片的名称

├── Layout

├── Main

└── Segmentation

├── JPEGImages # 存放源图片

├── labels

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAjXzOt4-1615951567323)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128112927297.png)]

2,DETRAC数据集为每个文件夹中的图片提供了一个.xml文件,不需要自己再进行手动标识,但是需要将.xml文件分成对应每个图片的.xml。

将DETRAC_xmlParser.py文件与xml文件夹放在同一路径下,运行后会在同一目录下生成xml_test文件夹,里面存放的是每个图片对应的.xml文件,将xml_test文件夹下的.xml文件复制到VOCdevkit\VOC\Annotations下(注意修改一下.py文件中最后一行可视化视频帧的地址)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AzXcvIsL-1615951567324)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128130610436.png)]

这里不能直接把路径DETRAC-train-data\Insight-MVT_Annotation_Train\MVI_20011下的所有图片放入JPEGImages文件中。需要批量重命名文件夹中图片文件。

3,将voc_data_migrate.py放到与文件夹Insight-MVT_Annotation_Train同一路径下。同样,py文件与Insight-MVT_Annotation_Train文件夹在同一目录下,最终生成picture_test文件夹,里面含有六百多张图片,其实,图片还是Insight-MVT_Annotation_Train\MVI_20011文件夹下的图片,只是图片的名字改了下,然后该picture_test文件夹下的所有照片复制到JPEGImages文件夹下。(注意修改.py中的地址)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NgWnMNBD-1615951567326)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128130645597.png)]

4,利用mageSets_Convert.py, 产生trainval.txt,test.txt,train.txt,val.txt文件,保存在ImageSets\Main文件夹下,这样VOC格式的数据集就生成好了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frvD40Y6-1615951567328)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128131737103.png)]

step3.训练模型

1,生成keras-yolo3所需的train.txt,val.txt,test.txt。

step2中制作的数据集不能直接供keras-yolov3直接使用。需要运行voc_annotation.py ,记得修改classes为数据集中的类别,这里classses = ["car"]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zP96BKgD-1615951567329)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128132853525.png)]

2,将model_data/voc_classes.txt文件中的类别修改为自己的类别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0zOE46P-1615951567331)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128140156438.png)]

3,修改文件yolov3.cfg中的参数

搜索yolo,一共出现三次,每处修改三个地方,

filter:18 #3 *(5+len(classes)),注意不要在18后加#否则可能在读取网络文件配置时,出现识别错误,在我删掉#及其后面的注释就顺利生成.h5文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drZ1SUJa-1615951567333)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128143737454.png)]

classes:1 #要训练的类别数

random:0 #原来是1,显存小改为0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7YFR6RVY-1615951567335)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128143356990.png)]

在修改yolov3.cfg文件后,执行python convert.py yolov3.cfg yolov3.weights model_data/yolocar.h5

这时在model_data文件夹下便生成yolocar.h5文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4zWojHl-1615951567337)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128145444633.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2GJs1Wiw-1615951567339)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128145455708.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxp6YYHV-1615951567341)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128145505432.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3nrlSW4i-1615951567343)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128145514565.png)]

4,修改anchor的坐标值

yolo是利用9个anchor来检测目标的位置,因此这9个anchor设置的好坏,会直接影响到训练与检测效果。

我们使用kmeans方法来聚类得到与我们数据集接近的anchors,在keras-yolov3下边有一个kmeans.py文件,打开后将filename改为_train.txt(2处),保存运行该脚本,会得到9个anchors的坐标值以及准确率。记下这9个坐标值,然后打开model_data中的yolo_anchors.txt,按照文本中的格式,将9个anchors值依次写入即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ugRcmW5R-1615951567344)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0128151215911.png)]

5,修改train.py,训练模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Yst1d8b-1615951567345)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0129085608422.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u0Xcaj3j-1615951567346)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0129085636213.png)]

根据保存文件名修改相应位置的.txt以及.h5文件。

如果训练过程中出现显存不足(OOM),解决方面有二:

1)调整输入的尺寸:(input_shape)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1aFy7NO-1615951567348)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0129085911523.png)]

2)改变batch_size大小32调整为16,8,4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G0n2bP0E-1615951567349)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0129085953674.png)]

6,训练权重文件保存

最后训练出模型,即train_weights_final.h5文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w5OvuP1P-1615951567353)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0129092434389.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r4zQX8gH-1615951567354)(C:\Users\jinchen\AppData\Roaming\Typora\typora-user-images\image-0129092114364.png)]

总结:

训练模型注意事项:

在下载权重的时候需要注意,看看 GPU RAM 要求,比如,我的显存 2G 是用不了yolov3.weights模型的它的要求 4G,只能用yolov3-tiny.weights

如果显存大于 4G ,那直接用yolov3.weights预训练模型就可以了。

CUDA,tensorflow出现OOM

解释:服务器的GPU大小为M,tensorflow只能申请N(N<M),也就是tensorflow告诉你 不能申请到GPU的全部资源 然后就不干了

解决方法(本例中没找到session,所以没有尝试):

找到代码中Session,在session定义前 增加

config = tf.ConfigProto(allow_soft_placement=True)

\#最多占gpu资源的70%

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)

\#开始不会给tensorflow全部gpu资源 而是按需增加

config.gpu_options.allow_growth = True

sess = tf.Session(config=config)

在使用服务器GPU训练时出现OOM的情况:

tensorflow 会在就算用device_id指定gpu 也会占用别的GPU的显存资源,所以 必须在执行程序前

执行export CUDA_VISIBLE_DEVICES=n

只让1个或者个别GPU可见 其他GPU看不见 就行了

需要的文件链接:(百度网盘永久有效)

yolov3-tiny.weights

链接:/s/1TIfF6-ZtP6F_u_dwIyEU_Q

提取码:inip

复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

darknet53.conv.74

链接:/s/1pXADiPBIqUTiSIFHAM6Wpw

提取码:08g3

复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

常用链接:

/darknet/yolo/

U可见 其他GPU看不见 就行了

需要的文件链接:(百度网盘永久有效)

yolov3-tiny.weights

链接:/s/1TIfF6-ZtP6F_u_dwIyEU_Q

提取码:inip

复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

darknet53.conv.74

链接:/s/1pXADiPBIqUTiSIFHAM6Wpw

提取码:08g3

复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

常用链接:

/darknet/yolo/

/u012746060/article/details/81183006

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。