zoukankan      html  css  js  c++  java
  • avod论文理解与代码解读

    论文简析

    参考文章:
    csdn

    代码:
    代码
    文献:
    论文

    概述

    这篇论文的特点是多数据融合。自动驾驶领域对安全性的要求更加严格,这对检测的准确性要求很高。多数据的融合提供了更多的信息,相对的检测能力更好一些。avod网络以雷达点云数据生成BEV map和image作为输入,经过特征提取成两个相应的feature map,通过anchor的映射融合两个特征图,经过rpn网络产生non-oriented region proposals,(事实上rpn网络只对class和bounding box进行回归)
    将这些proposals送入子网络second stage detector network产生精确的有方向的3D bounding boxs,完成3D物体的检测。网络结构如下:
    avod 网络结构图

    网络结构

    BEV map

    将点云数据处理成6channel BEV map.在水平面上分辨率为0.1,选取[-40, 40]x[0, 70]范围的点处理成700x800的BEV map.在竖直方向上选取[0, 2.5]平分为五段,这样就将点云数据划分成700x800x5的体素。然后在每个体素中提取高度信息,在整体的700x800的图上提取整体密度信息。最终构成700x800x6的BEV map.但是感觉所提特征不明显,对结果有很大的影响。
    如图:
    BEV map

    特征提取

    avod 为了提高小目标物体的检测准确率,采用FPN的想法,得到全分辨的feature map送入rpn网络。如图:
    fpn 特征提取网络

    rpn 网络

    1.anchors以6参数形式表示。(tx, ty, tz)表示中心点,(dx, dy, dz)表示三个轴的尺寸。在BEV上以0.5米的间距采样(tx, ty), tz由传感器与地面间的距离等因素决定。anchors的大小由训练样本数据而得(怎么确定暂时没看,应该类似最近邻的方式统计出来的吧,也可以自己设定一个固定预设值,类似faster rcnn)。  
    2.rpn的loss计算分为两部分:
    类别loss: 采用交叉熵loss.
    box regression loss: 采用smooth L1 loss.
    3.在BEV上通过判定anchors与ground truth的IoU分辨object/background,在BEV上采用2D NMS将top k proposals 送入第二阶段检测网络。

    特征融合

    每个3D anchor投影到BEV以及image获得两个roi,每个roi进行resized to 3x3然后进行像素级别的特征融合。

    第二阶段检测网络

    全连接层得到类别,bounding box,方向的回归。

    box 编码

    本文采用4corner + 2 height offset方式编码,利用3D举行框顶点对齐的几何限制减少参数并利用物体与ground plane的偏移,得到更精确的定位。回归形式是( ∆x1…∆x4,∆y1…∆y4, ∆h1, ∆h2)。实现中的ground plane参数为4个系数,ax+by+cz+d=0确定的平面。box表示形式如图:box 表示方式

    方向确定

    avod采用regressed orientation vector以及计算(cos(ry),sin(ry)),可以由BEV平面的唯一单位向量表示。每个bounding box有四个可能的朝向,选取离regressed orientation vector最近的朝向。

    代码解读

    anchor 的产生

    根据得到的cluster的每个尺寸产生两个方向的anchor。最终的anchor数量计算为70x80/0.5/0.5x(num_cluster)*2.源码中num_cluster为2,这样anchor的总数量为89600个。即每幅图产生89600个anchor。
    在这里插入图片描述
    在这里插入图片描述

    mini batch的产生与作用

    gen_mini_batches.py 会利用生成的anchors与gt来生成最终输入网络的信息。开始生成的anchors总共有89600,去除掉空的anchors,大约在8k到15k之间。然后用剩下的这些anchors与gt计算iou,最终iou大于0的大约150(只有一个gt的大致结果)。这个结果与论文不符,不知道自己哪理解的有问题。附上论文介绍:
    在这里插入图片描述
    最终产生的文件在文件夹mini_batches中。具体信息为:
    shape:(N, 9)
    index:对应的每幁图片的name, 例如:000000 或是0(记不太清了)
    iou: anchors 与gt的iou.
    offset(6个): anchor与gt的共同结果,计算公式如下:
    t_x_gt = (x_gt - x_anch)/dim_x_anch
    t_y_gt = (y_gt - y_anch)/dim_y_anch
    t_z_gt = (z_gt - z_anch)/dim_z_anch
    t_dx_gt = log(dim_x_gt/dim_x_anch)
    t_dy_gt = log(dim_y_gt/dim_y_anch)
    t_dz_gt = log(dim_z_gt/dim_z_anch)
    class_index:每种object类别对应的数值,例如 car:1
    另外:这个过程中可以设置类别,难度等的设置。这样数据的好坏有个分类,这样比较更加细致一些。

    rpn model

    这个网络主要是利用数据预处理的anchors与label进行粗预测,检测出rois.这些rois很可能是需要检测的区域。这一块利用了anchor来进行点云与图像数据的融合。生成的rois用于下一阶段的融合与检测。

    avod model

    利用rpn_model生成的rois来进行数据融合与检测。

    loss

    包括定位,类别,方向预测。

    不足

    1.我觉得这篇论文对点云的处理不够细致,提取的特征不足。
    2.整体的网络也很平常,没有对与小物体的优化处理,网络结构可以更加丰富一些。
    3.loss可以更优化一些。

  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/o-v-o/p/9975374.html
Copyright © 2011-2022 走看看