如有错误,恳请指出。
对一些经典论文进行快速思路整理,以下内容主要关注的是3d点云的backbone设计,包括transformer的应用,卷积核的设计,PointNet++网络的改进。
文章目录

1)提出Offset Atention,在原本的self-attention中的LBR(Fa)改为LBR(Fin-Fa),同时魔改了norm方法。其中这里的Fin是原始点特征,Fa是进行self-attention变换之后的特征
2)提出Neighbor Embedding,利用attention可以捕获全局特征但是缺少局部特征,所以用PointNet++来提取一些局部特征,作为transformer的输入

1)改进了attention的表达式,不过本质上还是有MLP构成,这里也注意到点之间的相对位置信息。整体跟PointNet++与RS-CNN类似

1)提出ARPE模块,将每个点表示为绝对位置与相对位置的(每个点相对于临近k个点的相对位置)集合
2)提出GSA(Group Shuffle Attention),这是新的特征转换方法。利用自注意力机制对点特征进行变换,与MLP作用一致
3)提出GSS(Gumbel Subset Sampling),这是新的点采样方法。将Pointnet++中的FPS换成了使用Gumbel Softmax进行计算每个点的重要程度,然后根据这个概率选取down sampling的点。

1)将网络的输入由点的坐标(x,y,z)增加到 ( x , y , z , x 2 , y 2 , z 2 , x y , x z , y z ) (x,y,z,x^2,y^2,z^2,xy, xz, yz) (x,y,z,x2,y2,z2,xy,xz,yz) 9维,理解原始特征的构造。同时对每个点构造其k个邻域的相对位置(3维),加上所构造的特特征,每个点都包含了其k个邻域的12维特征,后续进行编码聚合。其余结构与PointNet类似。
对于Convolution来说,输入点的顺序发生变化,输出也会变化。点云里面的点的输入顺序,是阻碍Convolution操作的主要问题。为了处理以上问题,论文定义了一个X变换矩阵,该矩阵能对某个特定顺序的输入进行处理,得到一个与顺序无关的feature。

这个问题,其实在PointNet中也有体现到,也就是那个T-Net,直接预测一个变换矩阵实现旋转不变性。这里是利用k邻域来构造相对位置编码信息来获取X


1)利用MLP编码点与邻域的相对位置信息获取到权重向量wij,权重向量的编码长度与点xj的特征长度一致,可以实现点乘(Conv)操作。对于conv之后的特征再进行MLP编码处理。

1)Rigid KP-Conv:对每一个点特征进行k个卷积核卷积处理,由Din维度编码为Dout维度输出,再将这k个卷积核的编码处理结果进行element-wise add操作,得到最后的编码特征。(和2D的卷积已经非常类似了)
2)Deformable KP-Conv:借鉴图像中可变性卷积的思路,可以引入offset的概念,将kernel中的点的位置做偏移,相当于改变了权重域的采样的位置进行卷积处理。

众所周知,Voxel-based的方法在量化过程中存在信息丢失,如果分辨率设置得过小又得提高3d卷积的计算量(Large Memory Footprint);Point-based的方法需要聚集某一个点领域的信息导致不规则的内存消耗,不这样做又难以提取点云的局部信息(Irregular Memory Access and Dynamic Kernel Overhead)。两种方法均不完美,各有优缺点。所以这里PVCNN的动机就是提取这两种方法的优势:利用point-based的小内存占用以及voxel-based的局部特征提取。
PVConv包含两个部分:利用voxel粗粒度信息,利用Point提取细粒度信息,最后将两则融合
1. Voxel-Based Feature Aggregation
首先将点云数据进行归一化地特征表示(包括平移到以重心为原点的局部坐标系中,进行最大值归一化,再缩放到0-1区间),利用归一化后的点进行voxel化(voxel内的点特征进行平均),随后利用一系列的3d卷积提取局部信息(包含BN层+激活函数),最后将每个voxel特征插值获取原来的点特征中(最直接的方法是利用最邻近插值,但是会导致一个voxel中的点相同,所以这里使用三线性插值trilinear interpolation),因为需要与point-baswd的方法提取出来的特征进融合。
2. Point-Based Feature Transformation
利用MLP对点特征进行编码,获取细粒度的信息表示,随后与来至基于体素的特征聚集分支的粗粒度信息进行简单的相加融合(element-wise add)
讨论:相比pointnet++中需要进行group的操作提取K个neighbor信息,这就需要进行O(kn)存储器访问,PVConv只需要O(n)。通过使用PVConv来替换PointNet中的MLP获得PVCNN,同时使用PVConv扩展PointNet++构建PVCNN++,两者都获得不错的性能(说明3d卷积提取局部特征可能要比pointnet++的方式要好,卷积归纳偏置的有效性)。不过这里作者并没有贴上PVCNN与PVCNN++的结构图,由于PointNet涉及多层MLP结构,具体替换细节还需要查看代码。
ps:这里贴上另外一个大佬的见解:Point-Voxel CNN for Efficient 3D Deep Learning
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
希望我没有误解“ducktyping”的含义,但从我读到的内容来看,这意味着我应该根据对象如何响应方法而不是它是什么类型/类来编写代码。代码如下:defconvert_hash(hash)ifhash.keys.all?{|k|k.is_a?(Integer)}returnhashelsifhash.keys.all?{|k|k.is_a?(Property)}new_hash={}hash.each_pair{|k,v|new_hash[k.id]=v}returnnew_hashelseraise"CustomattributekeysshouldbeID'sorPropertyo
我使用irb。下面是我写的代码。“斧头”..“bc”我期待"ax""ay""az""ba"bb""bc"但结果只是“斧头”..“bc”我该如何纠正?谢谢。 最佳答案 >puts("ax".."bc").to_aaxayazbabbbc 关于ruby-从结束值创建一系列字符串,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7617092/
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
使用RubyonRails,我使用给定的增量(例如每30分钟)用时间填充“选择”。目前我正在YAML文件中写出所有的可能性,但我觉得有一种更巧妙的方法。我想我想提供一个开始时间、一个结束时间、一个增量,并且目前只提供一个名为“关闭”的选项(想想“business_hours”)。所以,我的选择可能会显示:'Closed'5:00am5:30am6:00am...[allthewayto]...11:30pm谁能想出更好的方法,或者只是将它们全部“拼写”出来的最佳方法? 最佳答案 此答案基于@emh的答案。defcreate_hour
有道无术,术尚可求,有术无道,止于术。本系列SpringBoot版本3.0.4本系列SpringSecurity版本6.0.2本系列SpringAuthorizationServer版本1.0.2源码地址:https://gitee.com/pearl-organization/study-spring-security-demo文章目录前言1.OAuth2AuthorizationServerMetadataEndpointFilter2.OAuth2AuthorizationEndpointFilter3.OidcProviderConfigurationEndpointFilter4.N