PaddleDetection整体结构概述

2021SC@SDUSC

本文为PaddleDetection整体结构概述

结构图:

核心思想是通过yaml文件通过将主体模块和可拔插的模块组成完整的pipline,用于train、eval、infer、export_model. yaml文件就相当于设计图纸,程序会按照我们的图纸来设计我们想要的结构。

每个文件夹存放文件的主要作用:


'''
tree -f#显示显示完整路径
tree -d#显示所有文件夹
└── PaddleDetection #主目录
    ├── configs  #存放配置文件
    │    ├──_base_ 各个模块配置
    ├── dataset  #存放数据集,数据集下载脚本,对应各数据集文件夹
    │   ├── coco #80类 #物体
    │   ├── fddb #1类  #人脸 通常用来评估人脸检测算法
    │   ├── mot # 多目标跟踪
    │   ├── roadsign_voc #车道线数据 4类
    │   ├── voc #20类 #物体
    │   └── wider_face #1类 人脸
    ├── deploy  #部署相关
    │   ├── cpp #C++部署
    │   │   ├── cmake #cmake文件
    │   │   ├── docs #部署文档
    │   │   ├── include #库头文件
    │   │   ├── scripts #依赖库配置脚本,build脚本
    │   │   └── src #源码
    │   └── python #python部署
    ├── ppdet   #飞桨物体检测套件
    │   ├── core #核心部分
    │   │   └── config #实例、注册类的配置
    │   ├── data #数据处理
    │   │   ├── shared_queue #共享队列(数据多线程)
    │   │   ├── source #各种数据集类
    │   │   ├── tests #测试
    │   │   ├── tools #工具(转coco数据格式)
    │   │   └── transform #数据增强模块
    │   ├── ext_op  #增加op
    │   │   ├── src #op实现源码
    │   │   └── test #op测试
    │   ├── modeling #模型结构
    │   │   ├── architectures #网络结构
    │   │   ├── backbones #主干网络
    │   │   ├── heads #头(RPN、loss)
    │   │   ├── losses #头(loss)
    │   │   ├── mot #多目标跟踪(tracking)
    │   │   ├── necks #颈(FPN)
    │   │   ├── proposal_generator #建议框生成(anchor、rpnhead)
    │   │   ├── reid #重识别
    │   │   └── tests #测试
    │   ├── py_op #一些前后处理
    │   └── utils #实用工具
    └── tools #训练,测试,验证,将来还有模型导出
'''

 tools/train.py 模型训练

train执行实例:

!python tools/train.py -c configs/yolov3_darknet53_270e_coco.yml --eval -o use_gpu=true

train.py流程解析:

  • 从程序入口开始(if name == 'main':)
  • 1.直接进入main函数
    • 初始化训练参数:
    • ①.parser = ArgsParser() #读取命令行传递参数,加载yaml文件参数
    • ②.将参数整合在一起,检查参数配置是否正确
    • ③.是否使用GPU加速
    • ④.查看paddledet版本是否正确
    • ⑤.进入run()函数
      • 配置阶段
      • a.系统变量配置、初始化、得到使用GPU数量等
      • b.创建数据读取类
      • c.创建网络结构类
      • d.创建学习率类
      • e.创建优化器类
      • f.初始化模型权重,加载预训练模型、模型与优化器整合,
      • g.是否是多卡,实例多模型并行训练
    • 开启训练
      • g.遍历数据,开始循环训练,根据时间戳计算一系列时间(剩余时间,平均训练时间)
      • h.模型前向推理,反向传播,(多卡模型并行,loss合并)
      • j.每个iter结束后输出日志
      • k.定期打印log,定期保存模型和优化器参数,(eval开启:最优 and 定时)
  • 直到迭代结束

eval.py流程解析

  • 从程序入口开始(if name == 'main':)
  • 1.直接进入main函数
    • 初始化训练参数:
    • ①.parser = ArgsParser() #读取命令行传递参数,加载yaml文件参数
    • ②.将参数整合在一起,检查参数配置是否正确
    • ③.是否使用GPU加速
    • ④.查看paddledet版本是否正确
    • ⑤.进入run()函数
      • 配置阶段
      • a.创建网络结构类
      • b.初始化模型权重,加载预训练模型
      • c.创建数据读取类
    • 开启评估
      • d.遍历数据,开启前向推理,收集结果
      • e.选择Metric评估标准
      • f.输出日志
  • 直到迭代结束输出结果

 infer.py流程解析

  • 从程序入口开始(if name == 'main':)
  • 1.直接进入main函数
    • 初始化训练参数:
    • ①.parser = ArgsParser() #读取命令行传递参数,加载yaml文件参数
    • ②.将参数整合在一起,检查参数配置是否正确
    • ③.是否使用GPU加速
    • ④.查看paddledet版本是否正确
    • ⑤.进入run()函数
      • 配置阶段
      • a.创建网络结构类
      • b.初始化模型权重,加载预训练模型
      • c.创建数据读取类
      • d.选择推理标准
    • 开启推理
      • e.遍历数据,开启前向推理,收集结果
      • f.保存推理结果(box or mask)
      • g.使用VisualDL保存图片结果
  • 直到迭代结束输出结果

export_model.py流程解析

  • 从程序入口开始(if name == 'main':)
  • 1.直接进入main函数
    • 初始化训练参数:
    • ①.设置cpu环境执行,parser = ArgsParser() #读取命令行传递参数,加载yaml文件参数
    • ②.BN中的参数转换为推理参数,将参数整合在一起,检查参数配置是否正确
    • ③.是否使用GPU加速
    • ④.查看paddledet版本是否正确
    • ⑤.进入run()函数
      • 配置阶段
      • a.创建网络结构类
      • b.初始化模型权重
      • g.转为静态图,保存模型
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值