深度估计自监督模型monodepth2在自己数据集的实战——单卡/多卡训练、推理、Onnx转换和量化指标评估

在这里插入图片描述
本文详细介绍monodepth2模型在自己数据集的实战方法,包括单卡/多卡训练、推理、Onnx转换和量化评估等,关于理论部分请参见另一篇博客:深度估计自监督模型monodepth2论文总结和源码分析

一、训练过程:

(一)训练过程:

1.数据集准备:一个是要有连续帧数据(前后帧图片编号相差1)1-3W张左右,相机内参矩阵,还有可选的左右视图数据和点云代表的深度真值。

2.按照源码KITTI数据集格式生成train_files.txt和val_files.txt

3.继承MonoDataset类编写自己的数据类,主要内容是设置内参、分辨率、数据读取等

4.把option.py的dataset和split参数设置为自己的数据类,然后在trainer.py中对应到自己数据集的地址

都准备好以后直接指定模型类型就可以训练了,命令为python train.py --model_name 训练开始时,会在trainer类中初始化所有网络、data_loader,然后调用train()函数分batch训练。

(二)多卡训练:

源码只有单卡训练代码,想要实现多卡训练可以用torch.nn.parallel.DistributedDataParallel(DDP)进行改造,但比较繁琐,一是因为整个模型由四个子网络拼接而成,需要一个个设置,二是源码中很多tensor的第一维都默认为batch_size,多卡情况下假如最后一个batch的数量不足一个batch_size,这个维度的大小会报错,需要手动改成可配置的大小。

步骤主要包括:

1.参数设置和初始化,可用torch.multiprocessing.spawn开启多进程,使用cuda号作为进程编号

dist.init_process_group("nccl", rank=rank, world_size=world_size)
if opts.ddp:
   world_size = opts.world_size
   torch.multiprocessing.spawn(main_worker,
                               args=(world_size,),
                               nprocs=world_size,
                               join=True)

2.把每个子网络都用DistributedDataParallel包装起来,

评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值