当前位置:   article > 正文

yolov3预训练权重_水果识别-训练

yolov3预训练权重

f4059635ee41a52a17b9dc81ba2c3992.png

水果识别 | SDU.LIN

  • 水果识别-搭建框架 | SDU.LIN
  • 水果识别-数据集制作 | SDU.LIN
  • 水果识别-训练 | SDU.LIN
  • 水果识别-测试 | SDU.LIN
训练包括:
1. 更改voc_label.py生成label文件
2. 修改要训练的网络配置文件
3. 修改voc.names
4. 修改voc.data
5. 训练

1. 更改voc_label.py生成label文件

该文件在/darknet/scripts/目录下

  1. import xml.etree.ElementTree as ET
  2. import pickle
  3. import os
  4. from os import listdir, getcwd
  5. from os.path import join
  6. # sets=[('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]
  7. # classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
  8. sets=[('2007', 'train')] 这里只用到训练,数据集命名为VOC2017
  9. classes = ["apple", "pear", "banana"] 只用了三个类别作为展示
  10. def convert(size, box):
  11. dw = 1./(size[0])
  12. dh = 1./(size[1])
  13. x = (box[0] + box[1])/2.0 - 1
  14. y = (box[2] + box[3])/2.0 - 1
  15. w = box[1] - box[0]
  16. h = box[3] - box[2]
  17. x = x*dw
  18. w = w*dw
  19. y = y*dh
  20. h = h*dh
  21. return (x,y,w,h)
  22. def convert_annotation(year, image_id):
  23. in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
  24. out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')
  25. tree=ET.parse(in_file)
  26. root = tree.getroot()
  27. size = root.find('size')
  28. w = int(size.find('width').text)
  29. h = int(size.find('height').text)
  30. for obj in root.iter('object'):
  31. difficult = obj.find('difficult').text
  32. cls = obj.find('name').text
  33. if cls not in classes or int(difficult)==1:
  34. continue
  35. cls_id = classes.index(cls)
  36. xmlbox = obj.find('bndbox')
  37. b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))
  38. bb = convert((w,h), b)
  39. out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + 'n')
  40. wd = getcwd()
  41. for year, image_set in sets:
  42. if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):
  43. os.makedirs('VOCdevkit/VOC%s/labels/'%(year))
  44. image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
  45. list_file = open('%s_%s.txt'%(year, image_set), 'w')
  46. for image_id in image_ids:
  47. list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpgn'%(wd, year, image_id))
  48. convert_annotation(year, image_id)
  49. list_file.close()

修改好后执行python voc_label.py在scripts/VOCdevkit/VOC2007目录下生成了labels文件夹,文件夹里面长这个样子的:

861d2e915799a71a7ca739d6c8c40242.png

同时会在/darknet/scripts目录下生成2007_train.txt文件

2. 配置文件的修改

我用到的yolov3,所以就修改/cfg/yolove-voc.cfg

  1. [net]
  2. # Testing
  3. # batch=1
  4. # subdivisions=1
  5. # Training # 训练的时候把Testing的参数注释掉,把Training的参数取消注释
  6. batch=64
  7. subdivisions=16
  8. width=416
  9. height=416
  10. channels=3
  11. momentum=0.9
  12. decay=0.0005
  13. angle=0
  14. saturation = 1.5
  15. exposure = 1.5
  16. hue=.1
  17. learning_rate=0.001 # 根据需要修改学习率,就是梯度下降的速率,越大训练速度越快但会牺牲准确率
  18. burn_in=1000
  19. max_batches = 100000 # 训练的总次数
  20. policy=steps
  21. steps=100,10000,70000,80000,90000 # 训练到相应次数后学习率变化
  22. scales=10,10,.1,.1,.1 # 学习率变化情况,是累乘操作
  23. ......
  24. [convolutional]
  25. size=1
  26. stride=1
  27. pad=1
  28. filters=24 # filters = 3*(calsses + 5)
  29. activation=linear
  30. [yolo]
  31. mask = 0,1,2
  32. anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
  33. classes=3 # 修改类别数量
  34. num=9
  35. jitter=.3
  36. ignore_thresh = .5
  37. truth_thresh = 1
  38. random=1 # 为1时会启用Multi-Scale Training,随机使用不同尺寸的图片进行训练,显存小可以置为0

3. 修改voc.names

该文件在/darknet/data目录下

  1. apple
  2. pear
  3. banana

该文件下记录所有类别名称

4. 修改voc.data

该文件在/darknet/cfg目录下

  1. classes= 3 //类别数量
  2. train = /home/embedded/lm/darknet/scripts/2007_train.txt //指定训练样本
  3. // valid = /home/pjreddie/data/voc/2007_test.txt 指定测试数据,训练用不到
  4. names = /home/embedded/lm/darknet/data/voc.names //指向上一步修改的voc.names文件
  5. backup = /home/embedded/lm/darknet/backup/yolov3_voc_weights //指定训练后的权值放在哪儿

5. 训练

不要与训练权重直接训练:

./darknet detector train cfg/voc.data cfg/yolov3_voc.cfg

也可以下载预训练权重进行训练:

./darknet detector train cfg/voc.data cfg/yolov3_voc.cfg yolo.weights

训练过程中可以随时停止,停止以后可以在保存的权重处接着开始训练,保存的权重就当做预训练权重,yolov3开始没训练100次保存一次权重,过1000以后每训练10000次保存一次权重。然后就等待漫长的训练过程……

原文地址
水果识别-训练 | |​www.linmao.dev
f481d89822eb95b1a827ae07210cefbb.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/727994
推荐阅读
  

闽ICP备14008679号