[发明专利]一种体素化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运行效率,由此提高帧率。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海雪湖科技有限公司,未经上海雪湖科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010653891.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:常压节能油气两用采暖加热器
- 下一篇:一种基于低能耗的配网加密系统及加密方法





