[发明专利]一种体素化3D网络voxel-encoder与VFE基于FPGA的实现算法有效

专利信息
申请号: 202010653891.6 申请日: 2020-07-08
公开(公告)号: CN111814679B 公开(公告)日: 2023-10-13
发明(设计)人: 卢亮;江承谦 申请(专利权)人: 上海雪湖科技有限公司
主分类号: G06V10/94 分类号: G06V10/94;G06V10/82;G06V20/56;G06V20/64;G06N3/063;G06N3/0464
代理公司: 上海浙晟知识产权代理事务所(普通合伙) 31345 代理人: 杨小双
地址: 200050 上海市*** 国省代码: 上海;31
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 体素化 网络 voxel encoder vfe 基于 fpga 实现 算法
【权利要求书】:

1.一种体素化3D网络voxel-encoder与VFE基于FPGA的实现算法,其特征在于,包括Voxel-encoder以及vfe在FPGA上的算法实现过程:

(1)输入数据和中间数据如下:

points:维度(n,4);

共n个点,每个点含有三维坐标和雷达反射强度信息(x,y,z,r);

point_cloud_range:[0,-20.0,-3,55.2,20.0,1];

数据说明:x轴前后检测范围[0,55.2],y轴左右检测范围[-20,20],z轴上下检测范围[-3,1];

雷达坐标系x轴向前为正,y轴向左为正,z轴向上为正;

voxel_size:[0.05,0.05,0.1];

体素格划分在x,y,z三个轴方向的分辨率;

max_number_of_points_per_voxel:T=5;

max_voxels:K=40000;

中间数据:

grid_size=(point_cloud_range[3:]-point_cloud_range[:3])/voxel_size=[1104,800,40];

(2)算法实现细节:

步骤1:初始化一个K×T×4维张量(命名为voxels),值为全0:用于存储所有的体素输入特征;

一个K×3维张量(命名为coors),值为全0:用于存储所有的体素格的坐标;

一个K维张量(命名为num_points_per_voxel),值为全0:用于存储每个体素格采样点数;

一个40×800×1104(grid_size)的张量(命名为coor_to_voxelidx),值为全-1:用于指示是否是有效体素;

步骤2:对于点云中的每个点(eg点坐标(x1,y1,z1,r1)),检查对应的体素是否已经存在;

检查方法:

1)首先是向体素格投影,获取体素格的坐标(coor_x,coor_y,coor_z):

coor_x=int((x1-point_cloud_range[0])/voxel_size[0])

coor_y=int((y1-point_cloud_range[1])/voxel_size[1])

coor_z=int((z1-point_cloud_range[2])/voxel_size[2])

2)判断坐标(coor_x,coor_y,coor_z)的三个元素是否在grid_size的范围内:

若0≤coor_xgrid_size[0]and 0≤coor_ygrid_size[1]and 0≤coor_zgrid_size[2]

则表明点落入体素格内,若单个体素格内的点数小于T,统计该体素格内的点数num加1,对该体素格进行编号(voxelidx),编号从0开始,最大达到max_voxels-1,落入同一体素格的编号相同,并将编号voxeidx赋值给

coor_to_voxelidx[coor_x,coor_y,coor_z],

同时将更新后的num赋值给num_points_per_voxel[voxeidx],将点的特征数据赋值给

voxels[coor_to_voxelidx[coor_x,coor_y,coor_z],num,:];

步骤3:遍历所有点后,或者voxelidx达到k-1且和所有体素格的点数统计num均达到T时,即完成对步骤1中前四个张量的更新;

(3)输入部分:步骤3获取的更新后的三个张量voxels,coors,num_points_per_voxel作为输入,算法实现细节:

步骤4:基于voxels,num_points_per_voxel计算每个有效体素格内的所有非特征全0点在特征的每个维度上的平均,得到K×4维度的张量,每一行存储了(x_bar,y_bar,z_bar,r_bar),表达了一个体素格的特征信息,计算方法:voxels(K×T×4)在第2个维度上求和的到维度(K×4)的张量,然后除以num_points_per_voxel,即得到上面的(x_bar,y_bar,z_bar,r_bar);

步骤5:将步骤4得到的更新后的voxels(维度K×4),针对其每一行计算(x_bar^2+y_bar^2)^(1/2);

步骤6:拼接特征,将步骤5计算的(x_bar^2+y_bar^2)^(1/2)与步骤4计算的z_bar,r_bar拼接为一个最终特征表达voxels(维度为K×3,每一行是((x_bar^2+y_bar^2)^(1/2),z_bar,r_bar)即一个有效体素格的特征;

步骤7:返回步骤6中获得的voxels以及步骤3获得的coors结束;

(4)Voxel-encoder以及vfe的FPGA实现:

Voxel-encoder以及vfe在FPGA的实现由ARM端和FPGA共同处理完成。

2.根据权利要求1所述的一种体素化3D网络voxel-encoder与VFE基于FPGA的实现算法,其特征在于,模块主框架,主要分为两个模块:

1)ARM端实现模块,主要用于处理encoder;

2)FPGA实现模块,主要用于实现vfe;

ARM端实现模块:

步骤1:ARM端在内存中为每个体素格建立一个缓存,将每个雷达点转化为体素格坐标,直接用地址坐标找到对应的体素格,更新该体素格的数据;

步骤2:在步骤1更新体素格数据的同时,ARM端对缓存中的体素格累加正在处理的雷达数据,并且记录下累加的数量,超过累加点数后不再进行累加;

步骤3:基于步骤2得到的结果,过滤掉没有雷达点的体素格,将剩下的体素格复制至FPGA的RAM区域,启动FPGA;

步骤4:FPGA启动后,会从RAM中获取累加后的体素格信息,进行求平均和平方和开平方计算,具体地基于单个体素格内的采样点的原始数据在x和y两个维度上的数值平均然后平方求和再开平方,即进行定点数运算;

步骤5:在进行步骤4的同时,对z和r进行同样的取平均的操作,即除以n的操作。根据设定的每个体素格内的最大采样累加点数max_number_of_points_per_voxel=5,所以n的取值为有限集合{1,2,3,4,5},为了避免在FPGA上做除法,这里把÷n转化成的乘法的值通过查表获得,表的深度就是累加上限,此模块全流水,不影响速度;

步骤6:将最终的每个体素格的特征进行uint16量化,此模块全流水,不影响速度;

步骤7:VFE运算完成之后,需要把运算结果写回RAM,以供cnn网络的3D卷积运算使用,FPGA与RAM的交互通常使用AXI协议完成,当3D卷积开始后,VFE模块可以处理下一帧的数据,形成多级流水,提高FPGA运行效率,由此提高帧率。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海雪湖科技有限公司,未经上海雪湖科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202010653891.6/1.html,转载请声明来源钻瓜专利网。

同类专利
专利分类
×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top