当前位置: 代码迷 >> 综合 >> tiny-yolo win10 vs2015 opencv3.1 训练自己的模型 测试数据
  详细解决方案

tiny-yolo win10 vs2015 opencv3.1 训练自己的模型 测试数据

热度:12   发布时间:2024-01-04 08:43:48.0

1.数据准备

a.labelImage.exe

此处笔者下载的是已经做好的xml等文件。如果是原始图片数据,需要自己标注和按照voc的模式创建对应的文件夹和文件。

数据组织结构:

文件夹Annotations

文件夹ImageSets - 文件夹Main(test.txt, train.txt,trainval.txt,val.txt里面的文件非必须完整)

文件夹JPEGImages

文件 valid_label.py

链接:download

b.voc_label.py

链接:在后面下载的的darknet里面会有这个文件。

(1)下载原始的voc_label.py后,复制了一个

(2) 修改,笔者按照如下的的###处

备注:voc_label.py中低29处,open('xxx', 'rb'),解决了unicode报错的问题。

 (3) 使用

 切换到voc_label.py目录后,python voc_label.py,会生成2028_train.txt,2028_train.txt,里面都是图片的绝对路径。

c.obj.names

如下改成你自己的类别名称即可。

d.voc.data

原始截图:

classes = 20 ### 自己需要分几类

train = data/train_voc.txt ### 执行voc_label.py后生成的2028_train.txt的路径

valid = data/val_voc.txt ### 执行voc_label.py后生成的2028_val.txt的路径
names = data/voc.names ### 自己的obj.names文件的路径

backup = backup/ ### 后面执行darknet训练后,保存权重weights文件的路径

修改完后,保存即可。

e.cfg 模型文件

基于tiny-yolo-voc.cfg进行修改,复制一个进行修改如下:

此外,learning_rate和max_batches也可以修改。

备注:

yolov3或者tiny-yolov3中,filter = (classes + 4 + 1)*3

例如:mask =1,2,3 classes = 80 num = 9 filter = 3*(80+4+1) = 255

yolov3 从下往上三个yolo层,classes,filters,randam = 1开启多尺度训练 0关闭多尺度训练,最近的filters = 3*(5+classes)

tiny-yolov3中从下往上二个yolo层,classes,filters,randam = 1开启多尺度训练 0关闭多尺度训练,最近的filters = 3*(5+classes)

Training #训练模式,每次前向的图片数目batch/subvisionvisions

batch = 64 #每个迭代训练的图片数

subvisionvisions = 8 #将每个迭代分成subvisionvisions次训练

darknet win 下载

更多参考:https://blog.csdn.net/a417197457/article/details/80225001

2.初始参数准备(非必须)

链接:download

此处使用darknet19_448.conv.23进行参数初始化

3.网络准备

 (1)下载cuda8.0+cudnn7.0.5,下载opencv3.1(win下的exe),并安装好。

 (2)下载好win下的darknet。

链接:download

 (3.1) 编译darknet(使用gpu)

 a.配置cuda相关的路径。

详细参考:https://www.cnblogs.com/lyx2018/p/7905856.html

 b.管理员身份启动vs2015,打开build文件夹下面的darknet.sln,切换到Release x64模式。

 c.用的cuda10的话貌似不需要这一步,没有尝试过。笔者使用的是cuda8.0+cudnn7.0.5,需要以下的配置。

 (3.2) 编译darknet_no_gpu(使用cpu)

 a.管理员身份启动vs2015,下载好的darknet,打开build文件夹下面的darknet_no_gpu.sln,切换到Release x64模式。

 b.配置opencv

c.编译此项目即可在x64下生成darknet_no_gpu.exe。

4.训练

 a.管理员模式命令行,切换到darknet生成的exe目录下

 b1.使用gpu训练,执行以下命令(二选一):

 darknet detector train data/voc_my.data cfg/tiny-yolo-voc_my2obj.cfg wiehts/darknet19_448.conv.23(使用初始化参数)

 darknet detector train data/voc_my.data cfg/tiny-yolo-voc_my2obj.cfg(不使用初始化参数)

 b2. 使用cpu训练,执行以下命令(二选一):

 darknet_no_gpu detector train data/voc_my.data cfg/tiny-yolo-voc_my2obj.cfg wiehts/darknet19_448.conv.23(使用初始化参数)

 darknet_no_gpu detector train data/voc_my.data cfg/tiny-yolo-voc_my2obj.cfg(不使用初始化参数)

笔者此处使用的gpu训练,学习率0.001,迭代40200次,在gpu1060上运行约10小时。

训练完成结束截图:

5.测试

 a.管理员模式命令行,切换到darknet生成的exe目录下

 b1.如果使用gpu训练,执行以下命令:

darknet.exe detector detect test data/voc.data cfg/tiny-yolo-voc_my2obj.cfg backup/tiny-yolo-voc_my2obj_final.weights gr.jpg

 b2.如果使用cpu训练,执行以下命令:

darknet_no_gpu.exe detect test data/voc.data cfg/tiny-yolo-voc_my2obj.cfg backup/tiny-yolo-voc_my2obj_final.weights gr.jpg

测试结果截图:

  相关解决方案