【三维目标检测】FCAF3D(一)

        FCAF3D是一种anchor-free的全卷积室内三维目标检测算法,由三星公司发表在ECCV 2022 《FCAF3D: Fully Convolutional Anchor-Free 3D Object Detection》,论文地址为“https://arxiv.org/abs/2112.00322”。现有的 3D 物体检测方法使得对物体几何形状的先验假设,作者认为它限制了模型的泛化能力。FCAF3D采用anchor-free的方式避免这种提前假设,是一种纯粹数据驱动的方法。目前,该方法发布时在ScanNet V2 (+4.5)、SUN RGB-D (+3.5)和S3DIS (+20.5) 数据集上均取得了最好的结果。下图所示排名数据和图片来源于paperwithcode官网(2022.12.12),目前FCAF3D仍然排名比较靠前,地址为“https://paperswithcode.com/sota/3d-object-detection-on-sun-rgbd-val”。

【三维目标检测】FCAF3D(一)_第1张图片

1 源码与数据输入

        FCAF3D官方源码地址为“https://github.com/samsunglabs/fcaf3d”。这里主要介绍mmdetection3d中实现的版本。mmdetection3d安装和调试验证可参考本专栏之前的博客:【mmdetection3d】mmdetection3d安装详细步骤_Coding的叶子的博客-CSDN博客_mmdetection3d,里面有详细介绍。

        Mmdetection3d FCAF3D支持ScanNet V2、SUN RGB-D和S3DIS三种室内数据集,这里重点介绍S3DIS数据集。S3DIS数据集详细介绍请参考:mmdetection3d S3DIS (持续更新)_Coding的叶子的博客-CSDN博客。

2 mmdetection3d 上s3dis数据处理与模型训练

        Mmdetection3d s3dis数据集处理过程请参考:mmdetection3d S3DIS (持续更新)_Coding的叶子的博客-CSDN博客。

        数据集处理命令为:

cd data/s3dis
python collect_indoor3d_data.py
cd ../..
python tools/create_data.py s3dis --root-path ./data/s3dis --out-dir ./data/s3dis --extra-tag s3dis

3 源码运行调试

        mmdetection3d s3dis数据集预处理完成之后,运行下述命令即可开始FCAF3D训练。

python tools/train.py configs/ssn/hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d.py

3.1 MinkowskiEngine

        程序运行依赖于MinkowskiEngine库,如果未安装该库则会报错误提示“NameError: MinkSingleStage3DDetector: MinkResNet: name 'ME' is not defined”。MinkowskiEngine是一个用于稀疏张量的自动微分库,支持所有标准神经网络层,例如卷积、池化等操作。FCAF3D主要用其来进行三维稀疏卷积操作。

        直接使用“pip install MinkowskiEngine”进行安装时,可能会报错误提示“BLAS not found from numpy.distutils.system_info.get_info.”。可通过下面步骤成功安装:

apt-get update
apt install build-essential  libopenblas-dev
git clone https://gitee.com/mirrors_NVIDIA/MinkowskiEngine.git
cd MinkowskiEngine
python setup.py install --blas_include_dirs=${CONDA_PREFIX}/include --blas=openblas

4 FCAF3D简介

        FCAF3D模型的整体结构如下图所示。该模型属于anchor-free目标检测算法。FCAF3D主干网络采用的是典型的ResNet34 FPN结构。该结构采用了三维稀疏卷积进行计算,计算过程中得到的非稀疏点作为Head预测的种子点。FPN层实现了四种不同特征尺度下的预测,各种尺度下的特征维度分别为64、128、256和512。

【三维目标检测】FCAF3D(一)_第2张图片

 4.1 bbox编码

        模型直接预测结果通常是目标和种子点之间的偏差。例如:

d1 = x + w/2 - px
d2 = px - x + w/2
d3 = y + l/2 - py
d4 = py - y + l/2
d5 = z + h/2 - pz
d6 = pz - z + h/2

        其中,x、y、z、w、l、h分别为目标中心点坐标和尺寸,px、py、pz为种子点坐标,d1~d6为预测偏差。那么,我们可以得到:

w = d1 + d2
h = d3 + d4
z = d5 + d6

        因而,由种子点及其预测偏差即可得到预测目标的三维坐标和尺寸,从而实现对模型直接预测结果的解码。

        三维目标中的另一个关键位置参数时偏转角度θ,而这个角度选择通常与物体的正面相关。但是,对于类似于圆形或方形目标一般难以选取正面,或者说前后左右四个面都可以作为正面。这给损失函数计算时带来了难度。因此,针对这种情况,作者希望设计一种偏移,使得物体尺寸固定时任意一面作为正面时取值是相同的。

        假设偏移角度为θ,宽高比w/l为q,尺寸s为宽高之和(w+l),在x、y、z、w+l、h保持不变时,作者利用莫比乌斯带原理证明了四种朝向下ln(q)sin(2θ)、ln(q)cos(2θ)、sin(4θ)和lsin(4θ)是相同的,并使用前两个结果作为近似,进而得到角度偏差如下:

d7 = ln(w/l)sin(2θ)
d8 = ln(w/l)cons(2θ)

        预测结果与目标尺寸、方向之间的位置关系如下:

【三维目标检测】FCAF3D(一)_第3张图片

4.2 损失函数

        模型预测结果主要包含三部分:目标类别、中心度、位置。输入数据包含5个类别,且目标类别的损失函数为FocalLoss。目标中心度和bbox位置的损失函数分别为CrossEntropyLoss和AxisAlignedIoULoss。

5 模型结构与代码详解

        模型详细结构及推理过程请参考下一篇博客:预计本周内更新。

【python三维深度学习】python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_python 数学形态 点云从三维点云基础知识到深度学习,将按照以下目录持续进行更新。更新完成的部分可以在三维点云专栏中查看。含数据与python源码。https://blog.csdn.net/suiyingy/article/details/124017716

你可能感兴趣的:(三维点云,深度学习,python,FCAF3D,三维目标检测,深度学习,人工智能,3d)