AVOD代码复现

article/2025/11/7 9:29:49

参考文献:
https://zhuanlan.zhihu.com/p/86340957
https://zhuanlan.zhihu.com/p/354842740
https://www.guyuehome.com/39798
https://zhuanlan.zhihu.com/p/40271319

1,配置环境

conda create -n avod python=3.5
conda install tensorflow-gpu=1.3.0
conda install matplotlib
conda install -c conda-forge opencv 
conda install pandas
conda install pillow
conda install scipy
pip3 install -U scikit-learn

1.1 解决conda install py-opencv 时出现 failed with initial frozen solve. Retrying with flexible solve 的问题

pip3 install --upgrade pippip install opencv-python

1.2 import tensorflow TypeError: init() got an unexpected keyword argument 'serialized_options

conda remove tensorflow-gpu
pip uninstall tensorflow
conda install tensorflow-gpu=1.3.0

重装tensorflow,版本冲突

2,下载代码编译代码

代码地址:https://github.com/Qin-xs/avod_Re

2.1 wavedata依赖库

它的目录在 wavedata/wavedata/tools/core/lib 中,在lib文件夹下按顺序执行下列指令

conda activate avod
cd src
cmake ..
make

2.2 protobuf文件

protobuf是google的一个开源的用来做数据通信的库,关于它的介绍大家有兴趣可以去网上查。在avod/protos文件中有很多.proto文件,这些文件定义了通信用的数据内容和格式,但是想在程序中使用他们,得使用protobuf对他们进行编译,给每个.proto文件生成一个python文件。编译也很简单,执行下面一条指令就行.

protoc avod/protos/*.proto --python_out=

执行中之后会提示你有语法错误,不用管他,看avod/protos文件中是否生成了python文件,只要生成了,这一步就可以结束了。

3 配置环境

工程是基于python编写的,定义了很多模块,这些模块之间需要互相调用,但各个模块又是相对独立的,所以需要把各个模块的路径添加到python的环境变量中,以方便他们之间互相调用。

在终端输入这条指令打开设置环境变量的文件

sudo vim ~/.bashrc

在文件的最后输入添加下面两行(注意,这里面的路径是绝对路径,这是我电脑里的路径,大家要根据自己电脑的存放路径来改)

export PYTHONPATH=$PYTHONPATH:'/home/siat/project/project_detect/avod_Re/wavedata'
export PYTHONPATH=$PYTHONPATH:'/home/siat/work/object_detection/avod_Re-master'

配置环境变量以后,为了让它生效,需要重新打开终端,然后再使用如下指令重新进入anaconda环境

source ~/.bashrc
conda activate avod

4, 准备数据集

4.1 下载数据集

https://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d
在这里插入图片描述

4.2 下载附加文件

这个附加数据文件包括两部分:

trainval.txt、train.txt、val.txt:这三个文件帮助程序把训练数据又重新分为训练集和验证集
planes:这个是作者自己生成的路面平面拟合参数,它的用处等我们后面讲详细代码时再讲
下载地址为:https://drive.google.com/drive/folders/1yjCwlSOfAZoPNNqoMtWfEjPCfhRfJB-Z

4.3 整理数据目录

程序读取文件是按照一定的目录结构读取的,它们的目录结构如下图:
在这里插入图片描述
要注意的是,testing和training中都有image_2、velodyne两个文件夹,但它们的内容是不同的,分别是测试集和训练集中的内容,而它们都有的calib、label_2两个文件夹中的内容是相同的。

object文件夹放在~/Kitti/文件夹中,这是程序默认的,如果不想放这个目录里,得修改程序,所以我们先不找这个麻烦了,就先放这了。

mkdir -p ~/Kitti/object/

5,生成Mini-batch

Mini-batch 是 RPN 所需要的东西,在终端中输入如下指令即可生成

python scripts/preprocessing/gen_mini_batches.py

执行过程需要几分钟,等一等吧。

如果成功,会在avod/data目录下生成label_clusters和mini_batches两个文件夹

终端会显示下面的图像
在这里插入图片描述

6,训练

一条指令启动训练

python avod/experiments/run_training.py --pipeline_config=avod/configs/pyramid_cars_with_aug_example.config  --device='0' --data_split='train'

终端会显示以下图像:

在这里插入图片描述

在我的电脑配置下需要执行十几个小时左右,跑一晚上就好了,我的电脑GPU型号是:GTX 3090

7,验证

执行如下命令:

python avod/experiments/run_evaluation.py --pipeline_config=avod/configs/pyramid_cars_with_aug_example.config --device='0' --data_split='val'

如果这时候会提示如下信息

在这里插入图片描述

INFO:tensorflow:No new checkpoints found in /home/avod/avod/data/outputs/pyramid_cars_with_aug_example/checkpoints. Will try again in 30 seconds
第一种解决方法:
在avod/configs/pyramid_cars_with_aug_example.config 里面将pyramid_cars_with_aug_example/改为pyramid_cars_with_aug_example/checkpoints/
失败
在这里插入图片描述
第二种解决方法:
将avod/core/evaluator.py #449 pyramid_cars_with_aug_example,然后把它改成你自己outputs下的真实文件夹名字就行

在这里插入图片描述
在我的电脑配置下需要执行30小时左右

接着等吧

执行完以后使用下面的指令调用tensorboard画出训练过程中的各个指标的变化趋势

conda install -c conda-forge tensorboard
cd avod/data/outputs/pyramid_cars_with_aug_example
tensorboard --logdir logs

7.2 TensorFlow错误:TypeError: init() got an unexpected keyword argument ‘serialized_options’

问题其实很简单,TensorFlow和protobuf的版本不匹配,

pip install -U protobuf

7.3 AttributeError: module ‘tensorflow.python.estimator.estimator_lib’ has no attribute ‘SessionRunHook’

问题其实很简单,TensorFlow和tensorboard的版本不匹配,

tensorboard 1.15.0
tensorflow 1.3.0

pip uninstall tensorboard 
pip install tensorboard==1.11.0

居然成功

注意,这只是调用了tensorboard,输入指令以后终端会给出如下提示

这告诉我们,如果想看变化趋势的曲线,需要在浏览器中打开终端提示的网址,我的曲线如下图所示
在这里插入图片描述
我们可以看到,里面有rpn_loss、avod_loss等指标的变化趋势(感觉跳动有点大)
在这里插入图片描述
在这里插入图片描述

8, Inference

执行run inference,执行这一步是干啥的,暂时还不清楚

python avod/experiments/run_inference.py --checkpoint_name='pyramid_cars_with_aug_example' --data_split='val' --ckpt_indices=120 --device='0'

在这里插入图片描述

9, 查看结果

这一步是生成带预测框的2d图片,输入指令

python demos/show_predictions_2d.py

会生成图片,自动存放在文件夹avod/data/outputs/pyramid_cars_with_aug_example/predictions/images_2d/predictions/val/120000/0.1中
这里放几张图片看下效果吧
在这里插入图片描述

到这里,就完成网络所有的训练和使用流程了。


http://chatgpt.dhexx.cn/article/XfXP8D10.shtml

相关文章

三十三.智能驾驶之多传感器融合技术: AVOD融合方法

AVOD(Aggregate View Object Detection)和MV3D类似,是一种融合3维点云和相机RGB图像的三维目标检测算法. 不同的是: MV3D中融合了相机RGB图像,点云BEV映射和FrontView映射,而AVOD则只融合相机RGB图像和点云BEV映射. 从网络结果来看,AVOD采用了基于两阶的…

AVOD论文和代码解析

1.介绍 AVOD(Aggregate View Object Detection)算法和MV3D算法在思路上非常相似,甚至可以说,AVOD是MV3D的升级版本 总的来说,和MV3D相比,AVOD主要做了以下一些改进: (1&#xff0…

论文阅读笔记 | 三维目标检测——AVOD算法

如有错误,恳请指出。 文章目录 1. 背景2. 网络结构3. 实验结果 paper:《Joint 3D Proposal Generation and Object Detection from View Aggregation》 1. 背景 AVOD同样是一个two-stage(使用了RPN提取候选框)、anchor-based网络结构。获得较高的召回率…

IC授权卡和复制卡的区别_信用卡小知识【芯片卡磁条卡的区别】

各位老板,企业家大家好,我是小胡,您身边的金融专家。 今天呢跟大家说一下信用卡芯片卡和磁条卡的区别? 信用卡呢,现在普及率非常高的。几乎是人手一张或者是多张。那么大家知道芯片卡和磁条卡的区别到底在哪里&#xf…

IC卡清卡软件的使用

IC卡清卡软件,可以在知道卡片密码的情况下,把卡片恢复出厂密码,清除卡片数据和密码。 如下图 然后读取卡片文件,即卡片dump文件, 然后把卡片放读写器上,点清卡按钮,开始清卡,将清除…

门禁 IC卡 和 ID卡初步了解

目录 一、常用卡介绍 二、复制加密IC卡 1. 工具 2. 方法 3. 最简单的办法 三、IC卡种类介绍 1、接触型IC卡 2、非接触型IC卡 3、串行传输型IC卡 4、并行传输型IC卡 5、存储型IC卡(Memory Card) 6、加密存储型IC卡(Memory Card With Security Logic) 7、智能…

@芯片IC卡也能被复制?冒名卡/克隆卡分分钟复制完成【威 要器妖酒寺起舞酒久吧尔救】

去年底,广西贺州法院审理了一起未成年人盗刷校园IC卡案。被告廖某将已充值的校园IC卡信息复制到另一张空白卡上,在校园内的食堂、超市等进行刷卡消费。并将此方式传给另外4名同乡伙伴,5人共计非法盗刷2万多元。 网购工具 操作简单 据被告廖某…

ID卡复制教程(使用T5577卡复制4100卡)

1 ID卡的常见类型与区别 国内常见的普通ID卡多为EM 4100 或 EM 4102卡,其特点是不可修改ID号。为了复制普通ID卡,通常采用T5577 或 EM4305卡(俗称ID白卡),其特点是内部EEPROM可读可写,修改卡内EEPROM的内容…

教程:利用艾斯PM3GUI软件助手,帮你查IC卡漏洞

测试目的:检查身边的IC卡是否有技术漏洞(门禁卡,会员卡) 测试软件:艾斯PM3GUI软件助手2022版(IC卡信息安全专家)测试设备:PM3easy 优化增强版测试环境:Windows10 我们先拿…

华为手机NFC功能,教你一键复制各种卡

日常生活中,我们经常会携带各种卡,比如:公交卡、门禁卡、银行卡等,但是有时候忘记带了怎么办?或者带了却丢失了。 很多人都知道NFC功能支持充值公交卡,但是它的其他作用你还知道多少个,这期小编…

IC授权卡和复制卡的区别_北京居住证跟居住卡的区别

北京市居住证是小伙伴们在北京居住、作为常住人口享受基本公共服务和便利、通过积分申请登记常住户口的证明。持有居住证就是在京享受基本公共服务和便利的基础,居住登记卡是申领居住证的基础。按照北京市相关规定,在到达北京3日内,小伙伴应主动申报暂住登记,领取居住登记卡…

蓝牙卡复制html,车库蓝牙卡能复制吗

现在小区为了业主小车的安全会在车库上安装门禁系统。那么车库蓝牙卡能复制吗?车库蓝牙卡怎么复制呢?下面就跟着小编一起来看看吧! 车库蓝牙卡能复制吗: 车库蓝牙卡能复制,价格一般在30-60元左右,复制的蓝牙卡与原版外…

普通门禁卡及各类复制卡相关知识

转自: https://nfctool.cn/42 本文带你了解M1卡的数据结构,为以后的破解提供理论基础。同时带你了解各种IC卡,让你对破解和复制有更清晰的目标。请注意,ID卡没有密码,一读一写即可复制,手机手环不能模拟ID卡…

IC卡与ID卡

IC卡与ID卡定义 IC卡全称集成电路卡(Integrated Circuit Card),又称智能卡(Smart Card)它是将一个微电子芯片嵌入符合ISO 7816标准的卡基中,做成卡片形式,芯片含的存储器(ROM、EEPR…

IC授权卡和复制卡的区别_一起来了解苹果礼品卡的区别,解决你购买时的困惑...

要说到现在过节送什么,除了日常的烟、酒之外。Apple礼品卡也是不少年轻人的选择。但是,如果您去购买Apple礼品卡,您会很快发现事情变得有些混乱。因为有多种Apple礼品卡可供选择,它们的名称各不相同,作用也是不同,为了解决你的困惑,我们一起来了解一下Apple礼品卡的区别…

Python 读写IC卡、复制IC卡

本示例使用的发卡器:https://item.taobao.com/item.htm?spma1z10.5-c.w4002-17663462238.11.3614789e318TMs&id615391857885https://item.taobao.com/item.htm?spma1z10.5-c.w4002-17663462238.11.3614789e318TMs&id615391857885 #python通过缩进来表示代…

IC卡防批量复制破解 Mifare卡一卡一密方案说明 门禁卡校园卡水卡会员卡防破解方案

目前市面上大部分的IC卡(如门禁卡,门锁卡,水卡,校园卡,会员卡等)均属于Mifare1S50卡。该类卡片虽然在采购价格上较有优势,但同时也存在被批量破解、复制等安全性风险。如果更换为CPU卡&#xff…

php ic卡,IC卡的数据结构认识

讲解一下滚动码: 滚动码是一种防复制的技术,判断滚动码的方法非常的简单。 拿到物业发的原卡先解密,解密后数据保存。保存完成之后,拿着你的物业卡原卡去刷一下电梯或者门禁。然后再回来对比一下数据。看下刷电梯前的数据和刷电梯…

IC卡分类

M1 普通IC卡,0扇区不可以修改,其他扇区可反复擦写。我们日常碰到的单位食堂卡,小区门禁卡,单元的电梯卡都使用的是M1卡。 UID卡 所有区块可被重复读写 卡片ID可改写且使用后门指令更改ID 卡片ID可重复修改 相应后门指令&#xff…

使用ACR122U和Proxmark3复制IC卡

常见IC卡片介绍及使用ACR122U和Proxmark3复制卡方法 一、常见IC卡片介绍 1.1 ID卡和IC卡 ID卡:全称身份识别卡(Identification Card),多为低频(125Khz),是一种不可写入的感应卡,含固定的编号,主要有台湾SYRIS的EM格…