FUTR3D论文实验环境配置及运行

项目地址:https://github.com/Tsinghua-MARS-Lab/futr3d
论文地址:https://arxiv.org/abs/2203.10642
环境:Linux、cuda 11.1、python 3.8
1.创建虚拟环境futr

conda create -n futr python=3.8 -y
conda activate futr

2.安装pytorch的GPU版本,在这里我选择了离线安装,直接下载whl文件,然后pip安装。whl官方的地址是whl传送门,或者另一个传送门。

pip install torch-1.9.0+cu111-cp38-cp38-linux_x86_64.whl  torchvision-0.10.0+cu111-cp38-cp38-linux_x86_64.whl torchaudio-0.9.0-cp38-cp38-linux_x86_64.whl

也可以用官方命令安装(你连了外网的情况下)

pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

3.准备mmcv-full 1.6.0、mmdet、mmsegmentation、nuscenes-devkit

pip install mmcv-full==1.6.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html
pip install mmdet==2.24.0 mmsegmentation==0.29.1 nuscenes-devkit

4.clone项目并完成项目安装。

git clone https://github.com/Tsinghua-MARS-Lab/futr3d.git
cd futr3d
pip3 install -v -e .

下一步是准备数据集。
5.获取Nuscenes数据集,代码学习可以下载mini版本。下载地址:https://www.nuscenes.org/download(需要登录,没账号就注册一个),下载解压后放到data目录下,改名为nuscenes,这里用mini版本。
再次之前需要一点改动,xxx/futr3d/tools/create_data.py 第90行的部分修改为

#原代码为:create_groundtruth_database(dataset_name, root_path, info_prefix,
#                             'data/nusc_new/nuscenes_infos_train.pkl')
create_groundtruth_database(dataset_name, root_path, info_prefix,'data/nuscenes/nuscenes_infos_train.pkl')

运行

python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini

获取pkl文件后,这里想要进行Lidar+cam的训练,需要先运行lidar only和camera only获取两种模型,用tools/fuse_model.py合并后作为预训练模型再去训练lidar、camera融合的方法。
先训练Lidar:
修改几个地方:

  • plugin/futr3d/configs/lidar_only/lidar_0075v_900q.py中_base_中,为_base_中三个路径在前面多加一个…/
  • plugin/futr3d/models/detectors/futr3d.py、plugin/futr3d/models/head/futr3d_head.py、plugin/futr3d/datasets/loading.py中,依次把import部分的from plugin.fudet.models.utils.grid_mask import GridMask改为from plugin.futr3d.models.utils.grid_mask import GridMask(我也不懂为什么官方给的代码还有BUG)
  • 如果你显存够大,忽略这步(比如24G或者是80G显存),在/futr3d/plugin/futr3d/configs/lidar_only/lidar_0075v_900q.py中,为data的构造添加batch限制,具体如下(添加注释掉的部分代码,这里只是为了方便展示添加的代码所以故意注释掉了,batchsize根据个人情况改):
data = dict(# samples_per_gpu=1,# batch size# workers_per_gpu=0,train=dict(type='CBGSDataset',dataset=dict(type=dataset_type,data_root=data_root,ann_file=data_root + 'nuscenes_infos_train.pkl',pipeline=train_pipeline,classes=class_names,test_mode=False,use_valid_flag=True,# we use box_type_3d='LiDAR' in kitti and nuscenes dataset# and box_type_3d='Depth' in sunrgbd and scannet dataset.box_type_3d='LiDAR')),val=dict(pipeline=test_pipeline, classes=class_names, ann_file=data_root + 'nuscenes_infos_val.pkl'),test=dict(pipeline=test_pipeline, classes=class_names, ann_file=data_root + 'nuscenes_infos_val.pkl'))

运行下面代码开始训练(dist_train.sh也有问题。。。)

python tools/train.py plugin/futr3d/configs/lidar_only/lidar_0075v_900q.py --gpu-id 1 --autoscale-lr

如果报错TypeError: FormatCode() got an unexpected keyword argument ‘verify‘,yapf包的版本降低为yapf==0.40.1(pip install就行,不单独列个命令了)。我这里指定了用显卡1训练,只是为了测试项目是否能跑通。

上面这个是仅用lidar训练,现在,利用lidar预训练模型和image预训练模型经过合并后进行lidar+image的融合训练。具体在图像预训练,Lidar预训练两个地方下载模型(如果你想直接跟着我的代码运行,下载两个文件到:/futr3d/lidar-cam-pretrain/目录下),然后修改tools/fuse_model.py这个文件如下(把两个模型文件的路径换成你自己的):

import torchimg_ckpt = torch.load('./lidar-cam-pretrain/detr3d_vovnet_trainval.pth')
state_dict1 = img_ckpt['state_dict']pts_ckpt = torch.load('./lidar-cam-pretrain/lidar_0075_900q.pth')
state_dict2 = pts_ckpt['state_dict']
# pts_head in camera checkpoint will be overwrite by lidar checkpoint
state_dict1.update(state_dict2)merged_state_dict = state_dict1save_checkpoint = {'state_dict':merged_state_dict }torch.save(save_checkpoint, './checkpoint/lidar_vov_trainval.pth')

在futr3d创建checkpoint目录,然后执行该文件:

python tools/fuse_model.py

这下你的主目录下checkpoint里会多出一个权重文件,这就是融合模型训练需要的预训练模型。修改xxx/futr3d/plugin/futr3d/configs/lidar_cam/lidar_0075v_cam_vov.py模型里workers_per_gpu=0,samples_per_gpu=1,显存够大也可以把samples_per_gpu改高点,再将最后一行load_from改为’checkpoint/lidar_vov_trainval.pth’。接下来运行

python tools/train.py plugin/futr3d/configs/lidar_cam/lidar_0075v_cam_vov.py --gpu-id 2 --autoscale-lr

其中gpu-id表示gpu序号,这里指定了第2张GPU训练。注意了,这个项目代码里有.cuda()的操作,这个操作默认会在第一张显卡进行,所以最好是空出第一块显卡,要不然代码跑到这会因为张量在不同显卡上报错(心累,还得找到有BUG的地方,把tensor移到统一显卡上,还好,我只发现了一个这样的问题),训练时batch设成了1,大概占用10G显存。

推理的部分等有时间能把full数据集跑了再来更新吧,麻了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue中nextTick一文详解

什么是 nextTick? 在 Vue 中,当我们修改数据时,Vue 会自动更新视图。但是,由于 JavaScript 的事件循环机制,我们无法立即得知视图更新完成的时机。这时候,我们就需要使用 nextTick 来获取视图更新完成后的…

Spring Boot(六十八):SpringBoot 整合Apache tika 实现文档内容解析

1 Apache Tika 介绍 Apache Tika 是一个开源的内容检测和分析框架,由Apache软件基金会开发和维护的顶级项目。它可以从各种格式的文件中提取元数据和文本内容。Tika非常适合处理全文搜索、内容分析、翻译、内容提取等需要大量处理和分析文档内容的任务。Apache Tika提供了多种…

Airtest-Selenium升级兼容Selenium 4.0,给你全新体验!

一、前言 在上期更新推文中提到,我们Airtest-Selenium更新到了1.0.6版本,新增支持Selenium4.0的语法,那么我们来看一下Airtest-Selenium更新后有什么新的内容吧~ 二、selenium 4.0有什么新功能 selenium4.0最主要的还是定位元素方法的更新…

力扣--最小覆盖子串--双端队列+滑动窗口

滑动窗口思路(双端队列实现): 可以参考一下:力扣hot8---滑动窗口-CSDN博客以及力扣hot9---滑动窗口-CSDN博客。 使用滑动窗口有以下几个步骤:初始化双端队列(将s的前t_len个元素入队,此时检验是…

spring源码分析-事务的底层源码-1

这里写自定义目录标题 spring事务的源码分析阅读spring事务源码的前置知识JDBC的事务spring当中和事务相关的对象spring应用程序编码spring事务的源码如何开始研究spring源码当中如何代理bean spring事务的源码分析 最近在研究seata;看了一下spring当中的事务有一点…

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…

Hypermesh碰撞安全之安全带缠绕建模

进入安全带建模(Analysis→safety→belt routing) ①肩带的创建 注:end types: 表示2D和1D单元的过渡方式 ②腰带的创建 ③修改接触系数

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

【老旧小区用电安全谁能管?】安科瑞智慧用电安全管理系统解决方案

行业背景 电气火灾指由电气故障引发的火灾。每年以30%的比例高居各类火灾原因之首。以50%到80%的比例高居重特大火灾之首。已成为业界重点关注的对象并为此进行着孜孜不倦的努力。 国务院安委会也于2017年5月至2020年4月年开展了为期3年的电气火灾综合治理工作。在各界努力的…

HJ212协议C#代码解析实现

HJ212协议C#代码解析实现 HJ212协议是环保中一个非常重要的标准协议(字符串协议),之前写了两篇C HJ212协议解析的相关博文: 环保 HJ212协议解析基于Qt5.14.2的HJ212 TCP服务端接收解析入库程序 最近在学习C#,所以打算…

Liunx系统部署服务应用常用的命令操作

根目录下文件夹的用途 在 Linux 系统中,各个文件夹有着明确的目的和用途。基于您提供的列表,以下是这些文件夹的基本解释: bin: 存放二进制可执行文件,这些是普通用户和系统管理员常用的基本命令和应用程序。 boot: 包含启动 Li…

人工智能的发展与未来

人工智能(Artificial Intelligence,简称 AI)是一门极富挑战性的科学,它涉及计算机科学、控制论、信息论、语言学、神经生理学、心理学、数学、哲学等多种学科的相互渗透。人工智能的研究课题广泛,旨在让机器学会思考&a…

开启clas小猫咪后hosts解析失效不起作用

问题描述 开发网站时经常将域名某个域名,如abc.com写入hosts文件将域名解析劫持到127.0.0.1,方便本地测试用。 但在开启小猫咪clas后,hosts失效,访问了域名指向的真实ip。这种情况是引文dns解析被接管,导致hosts不能使…

蓝桥杯刷题|01普及-真题

目录 [蓝桥杯 2013 省 B] 翻硬币 题解 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2015 省 B] 移动距离 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2021 国 BC] 大写 题目描述 输入格式 输…

接口幂等性问题和常见解决方案

接口幂等性问题和常见解决方案 1.什么是接口幂等性问题1.1 会产生接口幂等性的问题1.2 解决思路 2.接口幂等性的解决方案2.1 唯一索引解决方案2.2 乐观锁解决方案2.3 分布式锁解决方案2.4 Token解决方案(最优方案) 3 Token解决方案落地3.1 token获取、token校验3.2 自定义注解,…

小蓝的漆房——算法思路

题目链接:1.小蓝的漆房 - 蓝桥云课 (lanqiao.cn) 本题只要是通过枚举的方法,算出涂成每一种颜色所需的天数,最后在所有天数中找出最小值(由题可知,最多只有60种颜色,所以可以尝试算出每种颜色所需的时间&am…

如何降低云计算成本?

降低云计算成本的方法有很多,以下是一些关键的策略和建议: 优化资源使用: 自动缩放:根据工作负载的需求自动调整计算资源的大小。对于不需要大量扩展的低优先级工作负载,可以设置性能限制,并在适当的情况下…

SpringBoot有哪些优缺点呢

1、SpringBoot优点 简化配置: Spring Boot 提供了自动配置功能,大大简化了项目的配置过程,开发者不再需要手动配置大量的 XML 文件或注解。 快速启动: Spring Boot 可以快速启动应用程序,减少了开发周期,…

LeetCode刷题小记 八、【回溯算法】

1.回溯算法 文章目录 1.回溯算法写在前面1.1回溯算法基本知识1.2组合问题1.3组合问题的剪枝操作1.4组合总和III1.5电话号码的字母组合1.6组合总和1.7组合总和II1.8分割回文串1.9复原IP地址1.10子集问题1.11子集II1.12非递减子序列1.13全排列1.14全排列II1.15N皇后1.16解数独 写…

react中hooks使用限制

只能在最顶层使用Hook 不要在循环、条件中调用hook,确保总是在React函数最顶层使用它们 只能React函数中调用Hook 不要在普通的js函数中调用 在React的函数组件中调用Hook 在自定义hook中调用其他hook 原因: 我们每次的状态值或者依赖项存在哪里&…