yolop源码train.py学习

因为要做一个可行驶区域和车道线的任务,所以选了yolop,看他的刷榜还可以。
yolop的算法解读后边找了链接再贴出来。
花花花大神的博客
我们先从 tools/train.py 开始debug

  • train.py 结构
    • import xxx
    • def parse_args()
    • main()
  • train.py 先执行 parse_args() 来赋值一些参数,然后再执行 main()
进入 main() 实例化 args 然后通过 updata_config() 来合并 cfg 、args 这俩配置文件
cfg 是import导进来的,通过 yacs 模块创建的配置文件,里面是训练、测试的参数,在 lib/config/default.py 中
通过yacs库创建的配置文件
合并配置文件
然后到 DDP 这里,是关于pytorch 分布式的东西,想学习自己百度吧
DDP 应用
DDP分布式训练
之后到生成 log 和 tensorboard logdir 文件
yolop源码train.py学习_第1张图片
之后到 cudnn 的参数赋值
cudnn参数赋值
之后到 选择 GPU 并输出GPU 一些信息
选择GPU
再往后,如果你是分布式训练,你会进入 if args.local_rank !=1: 来进行分布式配置
我这里没有分布式训练,所以直接进入 模型实例化
模型实例化
然后到 loss 和 优化器的选择
loss和优化器选择
这里是在划分网络结构,将主干、目标检测、可行驶区域、车道线检测头区分
在这里插入图片描述
这里是根据epoch调整学习率,用了 cosine 学习率和 LambdaLR 可以自行百度
在这里插入图片描述
之后进入一个 if rank in [-1,0] 这里面判断是否加载预训练模型、继续训练、不同检测任务分别训练等
if os.path.exists(cfg.MODEL.PRETRAINED):
if os.path.exists(cfg.MODEL.PRETRAINED_DET):
if cfg.AUTO_RESUME and os.path.exists(checkpoint_file):
if cfg.TRAIN.SEG_ONLY:
if cfg.TRAIN.DET_ONLY:
if cfg.TRAIN.ENC_SEG_ONLY:
if cfg.TRAIN.ENC_DET_ONLY or cfg.TRAIN.DET_ONLY:
if cfg.TRAIN.LANE_ONLY:
if cfg.TRAIN.DRIVABLE_ONLY:
下面是多GPU训练 DataParalle 和 分布式训练 DDP 的实例化
yolop源码train.py学习_第2张图片
下面是设置两个参数,gr 我还没看是啥
nc : number of classes
设置gr 和 nc
下面开始加载数据,创建train_dataset、train_loader、valid_dataset、vaild_loader
这里用了一个分布式数据加载 DistributedSampler()
yolop源码train.py学习_第3张图片
下面是关于anchors的配置
yolop源码train.py学习_第4张图片
下面开始训练、验证了,前两行用了预热训练 warmup 和 混合精度训练 amp
yolop源码train.py学习_第5张图片
最后是保存模型
yolop源码train.py学习_第6张图片

后边再写别的别的部分的代码学习,谢谢~

你可能感兴趣的:(yolop,学习,深度学习,计算机视觉)