/YOLOv6_pro

Make it easier for yolov6 to change the network structure

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

YOLOv6_pro

YOLOv6 更换网络结构更为便捷

基于官方 YOLOv6 的整体架构,使用 YOLOv5 的网络构建方式构建一个 YOLOv6 网络,包括 backboneneckeffidehead 结构

可以在 yaml 文件中任意修改或添加模块,并且每个修改的文件都是独立可运行的

预训练权重已经从官方权重转换,确保可以匹配

已经支持的模型:

  • YOLOV6l_yaml
  • YOLOV6m_yaml
  • YOLOV6s_yaml
  • YOLOV6t_yaml

  • 大尺寸模型,四个输出层:
  • YOLOV6l6_p2_yaml
  • YOLOV6l6_yaml
  • 数据集配置

    data/images/train 中放入你的训练集图片
    data/images/val 中放入你的验证集图片
    data/labels/train 中放入你的训练集标签(标签格式为yolo格式)
    data/labels/val 中放入你的验证集标签 
    

    数据集文件结构

    ├── data
    │   ├── images
    │   │   ├── train
    │   │   └── val
    │   ├── labels
    │   │   ├── train
    │   │   ├── val
    

    data.yaml 配置

    train: data/images/train # 训练集路径
    val: data/images/val # 验证集路径
    is_coco: False
    nc: 3  # 设置为你的类别数量
    names: ["car","person","bike"] #类别名称

    网络结构文件配置

    以yolov6l.yaml为例

    depth_multiple: 1.0  # model depth multiple
    width_multiple: 1.0  # layer channel multiple
    backbone:
      # [from, number, module, args]
      [[-1, 1, ConvWrapper, [64, 3, 2]],  # 0-P1/2
       [-1, 1, ConvWrapper, [128, 3, 2]],  # 1-P2/4
       [-1, 1, BepC3, [128, 6, "ConvWrapper"]],
       [-1, 1, ConvWrapper, [256, 3, 2]],  # 3-P3/8
       [-1, 1, BepC3, [256, 12, "ConvWrapper"]],
       [-1, 1, ConvWrapper, [512, 3, 2]],  # 5-P4/16
       [-1, 1, BepC3, [512, 18, "ConvWrapper"]],
       [-1, 1, ConvWrapper, [1024, 3, 2]],  # 7-P5/32
       [-1, 1, BepC3, [1024,6, "ConvWrapper"]],
       [-1, 1, SPPF, [1024, 5]]]  # 9
    neck:
       [[-1, 1, SimConv, [256, 1, 1]],
       [-1, 1, Transpose, [256]],
       [[-1, 6], 1, Concat, [1]],  #768
       [-1, 1, BepC3, [256, 12, "ConvWrapper"]],
    
       [-1, 1, SimConv, [128, 1, 1]],
       [-1, 1, Transpose, [128]],
       [[-1, 4], 1, Concat, [1]],  #384
       [-1, 1, BepC3, [128, 12, "ConvWrapper"]],   #17 (P3/8-small)
    
       [-1, 1, SimConv, [128, 3, 2]],
       [[-1, 14], 1, Concat, [1]],  
       [-1, 1, BepC3, [256, 12, "ConvWrapper"]],  # 20 (P4/16-medium)
    
       [-1, 1, SimConv, [256, 3, 2]],
       [[-1, 10], 1, Concat, [1]], 
       [-1, 1, BepC3, [512, 12, "ConvWrapper"]]]  # 23 (P5/32-large)
    effidehead:
      [[17, 1, Head_layers, [128]], 如果为m,l模型 并且使用dfl损失,该项设置为[通道数,16,你的类别数]
      [20, 1, Head_layers, [256]], 如果为s,t模型 并且不使用dfl损失,该项需要设置为[通道数,0,你的类别数]
      [23, 1, Head_layers, [512]],
      [[24, 25, 26], 1, Out, []]]
    

    预训练权重(官方权重转化而来)

    基本模型
    YOLOv6l_yaml.pt
    YOLOv6m_yaml.pt
    YOLOv6s_yaml.pt
    YOLOv6t_yaml.pt
    大尺寸模型
    YOLOv6l6_p2_yaml.pt
    YOLOv6l6_yaml.pt

    训练命令

    YOLOv6t

    python tools/train.py --conf-file configs/model_yaml/yolov6t_yaml.py --data data/data.yaml --device 0 --img 640

    YOLOv6s

    python tools/train.py --conf-file configs/model_yaml/yolov6s_yaml.py --data data/data.yaml --device 0 --img 640

    YOLOv6m

    python tools/train.py --conf-file configs/model_yaml/yolov6m_yaml.py --data data/data.yaml --device 0 --img 640

    YOLOv6l

    python tools/train.py --conf-file configs/model_yaml/yolov6l_yaml.py --data data/data.yaml --device 0 --img 640

    Acknowledgements