darknet19网络结构,darknet训练

  darknet19网络结构,darknet训练

  根据之前的博客内容成功收集了训练数据集并标记了数据,但现在正在尝试用自己的数据训练yolo v2模型。

  1.要处理的数据是你自己的pascal格式的数据,需要转换成darknet要求的格式。没必要恐慌。因为隶书给了,你自己稍微修改一下就可以了。(因为pascal格式应用广泛,所以即使在通用模型框架中不能立即使用pascal,也会给出pascal的转换脚本)。

  使用以下脚本生成train.txt:由于我的数据集不够,没有细分为训练集和验证集,而是全部成为训练集,所以没有生成val.txt。请根据需要更改代码)

  #!/usr/zjdj/env python2#-*编码:utf-8-* createdonwedjul 12173360503360262017 @ author:seven getcwdfromos . pathimportjoinif _ name _= _ main seven/darknet/infrared/train . txt # train . txt file _ list=OS . listdir(source _ folder)的地址#存储备用图像的文件夹的打开位置 a) # file for file_obj file_obj) file)访问file _ extend=OS . path . split ext(File _ obj)# # File _ name保存文件名,File _ extend保存文件n) train_file.close(#文件关闭生成的train.txt包含训练集中每个图像的文件名。 然后,下面的脚本将使用train.txt来生成(图像名)。每个图像对应的txt和infrared_train.txt文件:(图像名)。txt文件包含图像中目标的位置和类别标签,而infrared_train.txt文件包含每张图像的完整路径。

  #!/usr/zjdj/env python 2 # -*-编码:utf-8-*- createdonwedjul 12173360503360262017 @ author:seven import XML . etree . elementtreeasetimpickleimportos getcwdortos e ]# Categories是您需要发现的所有类别defconvert(size,box): dw=1。/size [0] dh=1。/Size[1]x=(box[0]box)dwy=y * dhh=h * DH return(x,y,W,h)def convert _ annotation(image _ id):in _ file=open(/home/seven/darknet/infrared/plate/XML/%)% s . txt %(image _ id),W) #这个XML对应的转换后的txt是,这个txt tree的保存完整路径=et . parse(in _ file)root=tree . getroot)(Size=root . find)访问中的数据cls=obj.find(name)因为读取数据没有难度T for obj root . ITER)object):)难度=obj)的高度ize标签。

  t)==1:continue cls _ ID=classes . index(CLS)xmlbox=obj . find( bnd box )#访问boundbox标签的数据并对其进行处理,都是根据yolo自己的代码,对b=(float (xmlbox.find (xmin )没有任何改动。text)、float (xmlbox.find (xmax )。text)、float (xmlbox.find (ymin )。text)、float(xmlbox.find(ymax )。text)) bb=convert((w,h),b) out_file.write(str(cls_id) 。join([str(a for a in bb]) n )image _ ids=open(/home/seven/darknet/infrared/train . txt )。阅读()。剥离()。split()list _ file=open(/home/seven/darknet/infrared/infrared_train.txt , w )for image _ ids:list _ file . Write(/home/seven/darknet/infrared/plate/image/% s . jpg N %(image _ id))#将用于训练或验证的每张图片的完整路径写入infrared _ train . txt这个文件将被voc.data yolo.c调用convert_annotation(image_id) #将图片的名称id传递给函数,用于list_file.close() #关闭文件。至此,我们已经成功生成了一个文件夹(图片名)。txt文件和infrared_train.txt文件。复制(图像名称)。txt文件复制到图像所在的文件夹中。对我来说就是/家/七/暗网/红外/板/像。

  2.修改文档和代码(1)修改。names将data文件夹中voc.names中的类别更改为您想要检测的类别,或者创建一个新的。命名文件,并在其中写入您自己的类别。例如,我创建了一个新文件plate.names,并在第一行写了plate。

  (2)修改voc.data打开cfg文件夹中的voc.data,将类修改为你想要识别的类别数。train是生成的infrared_train.txt的路径,valid是生成的infrared_val.txt(如果不使用test set进行测试,可以忽略)。名称被修改为刚刚修改的名称。命名为path,并将backup设置为darknet下的备份文件夹。我的设置如下:

  类别=1

  train=/home/seven/darknet/infrared/infrared _ train . txt

  valid=/home/seven/darknet/infrared/infrared _ val . txt

  名称=数据/板名

  backup=/home/seven/darknet/backup

  (3)修改cfg文件。由于我用的是tiny-yolo,所以修改tiny-yolo-voc.cfg(如果用了yolo,可以修改yolo-voc.2.0.cfg,修改方法相同)。批处理和子部分可以根据它们自己的内存大小进行修改。我使用默认的64和8。找到文件末尾的类,将其更改为classes=(您的类的数量),并修改[region]上面两行中的过滤器。计算公式是(classes coords 1)* (num)变量在[region]中定义,我的是(1 4 1)5=30。至于学习率之类的,你可以自己调整。

  (4)修改示例文件夹中的yolo.c。c文件:

  A.将开头的voc_names[]修改为自己的检测类别,如:char * VOC _ names[]={ plate };

  B.将train_yolo中的train_images和backup_directory更改为您自己的路径,例如:

  char * train _ images=/home/seven/darknet/infrared/infrared _ train . txt ;char * backup _ directory=/home/seven/darknet/backup ;c .修改validate_yolo和valadate_yolo_recall的base和plist,如下所示:

  char * base=/home/seven/darknet/results/com P4 _ det _ test _ ;list * plist=get _ paths(/home/seven/darknet/infrared/infrared _ val . txt );d .将315行的draw_detection函数参数中的20改为自己的类别号,比如draw _ detections (im,l.side * l.side * l.n,thresh,box,probs,voc _ names,alphabet,1);

  E.将348行演示函数的参数修改为自己的类别号:demo (CFG,weights,thresh,cam _ index,filename,VOC _ names,1,frame _ skip,prefix,avg, 5,0,0,0);

  在示例文件夹detector.c中:

  第51行的plist改为infrared_val.txt(如果不需要验证,可以不修改)

  (5)修改voc_label.py将scripts文件夹中的类改为自己的类别(感觉没用,以防修改)

  3.下载预训模式,进入https://pjreddie.com/darknet/yolo/,选择适合自己的预训模式。如图,我选tiny-yolo。

  训练好的模型放在darknet文件夹的根目录下。

  4.开始训练终端进入darknet的根目录,并输入以下命令。/darknet检测器训练CFG/VOC . data CFG/yolo _ VOC . CFG tiny-yolo-VOC . weights done!

  (如果选择使用opencv进行编译,可能会报错。终端在darknet的根目录下,输入make clean,然后在makefile中修改opencv=0,保存退出,重新make,然后输入上面的命令。

  5.功能扩展(1)测试:

  您可以使用命令行。/darknet检测器test CFG/VOC . data CFG/yolo _ VOC . CFG backup/(文件名)。权重图像路径(如data/dog.jpg) (2)评估:

  训练结束后,可以用测试机对模型进行评估(需要如上生成infrared_val.txt)。命令是:/darknet检测器调用CFG/VOC . data CFG/yolo _ VOC . CFG backup/(文件名)。权重选择。备份中生成的权重文件。

darknet19网络结构,darknet训练