小肚巨肥
可以使用 Meshlab 中的 Cleaning and Repairing 功能来补全点云,操作步骤如下: 1. 打开 Meshlab,然后点击“File”菜单,选择打开要补全的点云文件。 2. 点击“Filter”菜单,在弹出的对话框中,依次选择“Cleaning and Repairing” -> “Remove Isolated Pieces”,再勾选“Unselect Isolated Pieces”,然后点击“Apply”按钮。 3. 再点击“Filter”菜单,依次选择“Selection” -> “Select Connected Comp.”,再勾选“Connected Components”,它会根据连接的部分来提取一整块拼图,然后点击“Apply”按钮。 4. 点击“Filter”菜单,依次选择“Smoothing” -> “Ball Pivoting”,勾选“Remesh selected pieces”,然后点击“Apply”按钮。 5. 此时,可以看到补全后的点云,如果还不满意,可以再重复上述步骤直至达到理想的补全效果。
小倩TINA
论文原文:
YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基于深度学习的检测中的痛点---速度问题。下图是各目标检测系统的检测性能对比:
如果说faster-RCNN是真正实现了完全基于深度学习的端到端的检测,那么yolo则是更进一步,将 目标区域预测 与 目标类别判断 整合到单个神经网络模型中。各检测算法结构见下图:
每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:
其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值。
每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。即SxS个网格,每个网格除了要预测B个bounding box外,还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。(注意:class信息是针对每个网格的,即一个网格只预测一组类别而不管里面有多少个bounding box,而confidence信息是针对每个bounding box的。)
举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:
在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。
得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS(非极大值抑制non-maximum suppresssion)处理,就得到最终的检测结果。
1、每个grid因为预测两个bounding box有30维(30=2*5+20),这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。其中坐标的x,y用bounding box相对grid的offset归一化到0-1之间,w,h除以图像的width和height也归一化到0-1之间。
2、对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。其实就是让算法对小box预测的偏移更加敏感。
3、一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。
4、损失函数公式见下图:
在实现中,最主要的就是怎么设计损失函数,坐标(x,y,w,h),confidence,classification 让这个三个方面得到很好的平衡。简单的全部采用sum-squared error loss来做这件事会有以下不足:
解决方法:
只有当某个网格中有object的时候才对classification error进行惩罚。只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。
作者采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用网络中的前20卷积层,外加average-pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为(ImageNet2012 validation set),与GoogleNet模型准确率相当。
然后,将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224->448×448)。顶层预测类别概率和bounding box协调值。bounding box的宽和高通过输入图像宽和高归一化到0-1区间。顶层采用linear activation,其它层使用 leaky rectified linear。
作者采用sum-squared error为目标函数来优化,增加bounding box loss权重,减少置信度权重,实验中,设定为\lambda _{coord} =5 and\lambda _{noobj}= 。
作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为,学习速率延迟为。Learning schedule为:第一轮,学习速率从缓慢增加到(因为如果初始为高学习速率,会导致模型发散);保持速率到75轮;然后在后30轮中,下降到;最后30轮,学习速率为。
作者还采用了dropout和 data augmentation来预防过拟合。dropout值为;data augmentation包括:random scaling,translation,adjust exposure和saturation。
YOLO模型相对于之前的物体检测方法有多个优点:
1、 YOLO检测物体非常快
因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。
2、 YOLO可以很好的避免背景错误,产生false positives
不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。
3、 YOLO可以学到物体的泛化特征
当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。
尽管YOLO有这些优点,它也有一些缺点:
1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。
2、YOLO容易产生物体的定位错误。
3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。
莫强求Jt
论文地址: 前置文章:10/16、10/17、10/18
本文提出了Point Fractal Network(PF-Net),旨在从不完整的点云数据中恢复点云,克服了之前方法修改现有数据点、引入噪声和产生几何损失的缺点。
由前置文章可知,之前的点云修复方法是输入不完整的点云,输出完整的点云,但这样会导致原有信息的缺失。这篇文章提出PF-Net,主要特点有三个:
网络的整体结构如下:
网络详细推理步骤如下:
损失函数使用完整性损失和对抗损失的加权平均,完整性损失使用L-GAN中提出的CD距离:
对抗损失使用GAN中常见的损失函数
感觉这篇文章对多尺度的运用非常极致,在编码器、解码器和CMLP中都应用了这种思想,最后的效果也非常不错,很值得借鉴。
论文地址:
PointNet提出一种基础的网络结构,可以用于点云分类、部分分割和语义分割等多种任务。在这篇文章之前,点云数据的处理方式是将点云数据转换为多个二维的视图或三维的体素形式,然后应用2D/3D CNN进行处理,但这样引入了多余的体积,效率不高。本文是第一个直接使用点云数据的神经网络。(其实可以这样类比,在二维图像处理中,假设图像是二值化的,传统方法是将这个图像直接丢到CNN里面,但如果背景特别多会比较浪费资源。直接使用点云数据相当于直接将前景像素的坐标输入到神经网络里面,对稀疏数据会有比较好的性能,但因为以下三个问题导致直接使用坐标信息比较困难) 由于点云的排列是无序的(可以想象,点云中任意一点排在前面对点云的表达都是相同的)、点云之间是有相互作用的(相邻的点云才能构成形状)、点云在某些变换下具有不变性(比如旋转不会改变点云的类别)这些特性,要求神经网络既能处理无序的数据,又能捕捉全局的结构特征,同时对刚性变换不敏感。基于这些条件,作者提出了如下的网络结构:
可以简要分析一下网络的工作流程,以点云分类问题为例:
感觉网络的结构虽然简单,但是却很好地满足了点云数据自身特性对神经网络的要求。而且我觉得在图像处理中,也有时候必须用到坐标信息或者一些标量特征,这篇文章的方法对于怎样将这些特征融合进CNN里面也有一定的启发意义。
论文地址:
这篇文章的主要工作是:
首先来看衡量两个点云相似程度的指标部分,作者首先给出了两个距离,EMD和CD:
在计算上,CD更为简便,而且EMD是不可导的。
基于这两种距离,作者引入了三种衡量两个点云相似程度的指标:JSD、Coverage和MMD:
定义了指标后,就可以实现自动编码器和生成模型了。作者提到了四种结构,分别是:
作者同时验证了AE的一些其他功能,比如如果给AE的编码器输入不完整的点云数据,即可训练得到点云复原的模型。使用SVM对低维表示进行分类,即可进行点云分类的任务,证明AE在点云数据形式中的潜在应用较为广泛。
论文地址:
PointNet++针对PointNet提取局部信息能力不强的弊端,提出了一种层次神经网络,可以更好地提取局部信息。其中心思想是将整个点云分割成若干个小部分来提取信息,然后将每个小部分整合成较大的部分,提取更高层次的信息。类似于CNN中卷积和下采样的思想。首先来看网络结构图:
网络大概可以分为两个部分,左边是层次的点云特征提取网络,右边是针对不同任务的解码网络。 特征提取分为若干个set abstraction模块,每个模块又分为采样层、分组层和特征提取层。
得到了较高层次的特征后,对不同的任务需要不同的解码网络。对分类网络来说比较简单,使用全连接即可。对分割网络来说,由于对每个点都需要输出数值,则需要类似上采样的操作。具体的实现作者使用了插值的方法,将较少的点插值到较多的点上去。首先找到插值的目标坐标,然后寻找K个距离最近的已知点,以距离的倒数作为权重,将K个点的特征做加权平均,作为这个点的特征。然后使用之前特征提取中得到的该点的特征与当前特征做一个拼接,即可得到最终特征(类似U-Net的skip connection)。公式如下:
感觉这篇文章和PF-Net的思想差不多,都是希望提取多尺度的特征。但是思路不一样,都值得借鉴。
论文名称:Rich feature hierarchies for accurate object detection and semantic segment
CVPR论文可以说是世界顶级水平论文。 图片来源于网络 CVPR是IEEE Conference on Computer Vision and Pattern
论文: EfficientDet: Scalable and Efficient Object Detection 目前目标检测领域,高精度的模型通常需要很大的
原文: Scalable Object Detection using Deep Neural Networks——学术范 最近,深度卷积神经网络在许多图
本文介绍了一种基于激光雷达数据的激光网络自动驾驶三维目标检测方法——LaserNet。高效的处理结果来自于在传感器的自然距离视图中处理激光雷达数据。在激光雷达视