YOLO训练自己数据集配置文件修改.md

数据命名

  1. VOC2016 最早1093张person
  2. VOC2017 刘尧792张person
  3. VOC2018 恩德792张person_hand
  4. VOC2019 person_head_hand(hand/hand1) 但是可以不生成hand1的label
  5. VOC2020 person_head_hand size=224*224
  6. 2021_train.txt head and hand
  7. VOC2000 toys
  8. VOC2001 刘尧张恩德 1:3 404张
  9. VOC2002 刘尧 1:4 849张 白天,亮度两种
  10. VOV2003 罗定 1:4 699张 隧道
  11. VOC2004 白天,隧道组合 699+849=1548

问题提示

  1. 配置文件:
    • cfg/yolo.cfg 或者 cfg/yolo-voc.cfg,定义网络结构 test阶段batch=1train阶段batch=64/128 出现CUDA out of memory错误
    • cfg/voc.data 或者 cfg/coco.data 定义类别,训练数据,测试数据的路径 出现bounding box正确,但是图片的标注与实际不符合
  2. 问题:数据标注,有些时候没有覆盖手,小物体检测效果不好

训练技巧

  1. random=1 多尺度训练
  2. anchor机制:数量(num),长宽比(根据最后一层输出map尺寸)
  3. batch大小
  4. passthrough layer(route)细粒度特征
  5. 模型大小压缩

配置文件修改

  1. cfg文件夹,将xxx.cfgvoc.data复制修改
    • .cfg说明网络结构,[region]小节的classes=20,改为你的类别数,'num'改为anchors数目,最后一个convolutional小节的filters改为(5+classes)×num
    • .data说明训练数据索引位置train=,训练过程权重保存位置backup=,训练和测试过程类别数classes,各类别名称names
  2. data文件夹中建立.data文件中的names列表,里面一行一个类别标签

labe数据的准备

  1. VOC数据集中,将自己的图片复制到JPEGImages,标注复制到Annotations,在ImageSets/Main/make_text.py修改1path,执行之后生成train.txt`
  2. voc_label.py文件修改
    • sets=[('2020', 'train')]
    • classes = ["person","head","hand"]
    • 执行voc_label.py,在labels文件夹下生成label,同时在同一目录下生成./2020_train.txt,其中包含训练数据路径

数据训练起点生成(basemodel)

./darknet partial cfg/darknet19.cfg darknet19.weights darknet19.conv.19 19

执行训练命令

./darknet detector train cfg/voc.data cfg/darknet19.cfg darknet19.conv.19 -gpus 0

模型对比分析

  1. ./darknet_test/param_size.py执行结果显示参数大小和计算量
  2. cfg/tiny-yolo-voc-person-head-hand-decrease-anchor.cfg
    • 大小(KKM*N): 3.6M
    • 计算量(KKSSM*N):
    • 帧率(pc-cpu)
./darknet detector demo  cfg/voc-tiny-person-head-hand.data cfg/tiny-yolo-voc-person-head-hand-decrease-anchor.cfg  weights_anchor_2020/tiny-yolo-voc-person-head-hand-decrease-anchor_16500.weights   data/2.avi

你可能感兴趣的:(YOLO训练自己数据集配置文件修改.md)