Large Object 检测流程高级配置
==================================================================

本章会详细介绍如何优化 Large Object 检测流程,以及它所提供的高级检测配置。


如何优化
--------------

当您使用Large Object 检测流程无法正确 **检测** 物体时,您可以检查以下几点


1. 检查DL模型
    检查您的深度模型模型是否能够正确的检测到物体以及关键点
    
    使用快速检测功能,观察关键点是否检测准确: 关键点的位置是否准确,关键点的顺序是否准确。如果深度学习检测失败,请参考 :ref:`深度学习优化`

    .. image:: images/qd_kp.png
        :scale: 50%

2. 检查您的点云质量
    检查是否有点云缺失,是否有点云噪声,导致对齐点云时出现严重偏差, 使用快速检测功能,观察点云是否有缺失,或者噪点。如果点云质量偏差,请参考 :ref:`相机配置优化`
    
    .. image:: images/qd_kp2.png
        :scale: 80%


3. 调试高级参数

    可以适当的调低 **空间下采样** 和 **3D精确度** ,调低以后,会增加少许检测时间,但是会获得更好的检测效果。


高级检测配置
------------------

拍照
~~~~~~

自适应相机:
    可以设置最多4个不同的相机参数以预设的方式进行切换,这个功能通常在环境光有很大的变化时为了保持相对固定的成像亮度而使用,比如白天光源比较多,那么就可以使用一个较暗的相机参数。晚上光源变少,那么就可以使用一个较亮的相机参数。

    - 根据时间表加载相机参数:通过时间表,在指定时间范围内,使用指定的相机配置。

        .. image:: images/cfg_by_time.png
            :scale: 100%

    - 根据机器人命令加载相机参数:通过调用函数,daoai_cam_config(id) 来进行切换。

        .. image:: images/cfg_by_robot.png
            :scale: 100%

按高度过滤物体
    这个功能会保留最上方的一层点云 并过滤掉指定距离以外的点云。例如,当场景中有堆放有几层的箱子,那么使用这个功能就可以只保留最上面一层箱子的点云。

        .. image:: images/dynamic_box.png
            :scale: 100%
            
    - 相机与点云中最高点的距离(毫米):设定了一层的高度,以参考系为准, z轴最高的一个点开始,往下保留多少毫米内的点云。
    - 去除一些点/噪声:场景中有噪声时,该功能会被高出的噪点影响,以至于保留错误的层位置。那么移除一些噪声,就可以避免这个问题。

3D匹配
~~~~~~~

匹配方法:
    匹配方法指的时点云的对齐方式, 通常,在使用点云模型进行匹配时,就选择点对点;在使用CAD模型进行匹配时,就选择点对面。

        .. image:: images/align_setting.png
            :scale: 70%
            
    - 点对点:匹配时使用模型的每个点匹对场景中的点。
    - 点对面:匹配时,仅使用模型的表面点云来匹配场景中的点。

3D 搜索范围:
        .. image:: images/search_reg.png
            :scale: 100%

    - 小:仅使用初步匹配的小范围空间进行点云对齐匹配。优点是会节约匹配时间,缺点是会在初步匹配误差过大时,无法对齐物体。
    - 大:不限制点云对齐时的对齐范围。优点是更可能产生到高质量的结果,缺点是会增加计算量和对齐时间。

3D 精确度:
        .. image:: images/error_tol.png
            :scale: 100%
            
    - 这里的精度指的时3D对齐时的,需要多少精度误差,才可以接受并算作成功的物体匹配。通常选择低,会得到更好的匹配结果,但是可能会增加匹配时间。

空间下采样:
        .. image:: images/downsample.png
            :scale: 100%
            
    - 该设置会使点云的密度降低,以加速匹配时间。通常下采样更低,匹配结果越好,匹配时间也就越久。

物体位姿过滤
        .. image:: images/obj_filter.png
            :scale: 100%
            
    这个功能会过滤设定范围以外的物体检测结果。以参考物体为准,平移或者旋转超出了设定范围的物体匹配结果会被过滤掉。

    - 点最小值,当匹配到的物体,相对与定义物体时的位置坐标的任意(x,y,z)值小于所设定的值,那么改物体检测结果会被移除。
    - 点最大值,当匹配到的物体,相对与定义物体时的位置坐标的任意(x,y,z)值大于所设定的值,那么改物体检测结果会被移除。
    - 平移范围,当匹配到的物体,相对与定义物体时的位置坐标的任意(x,y)值超出所设定的范围,那么改物体检测结果会被移除。
    - 倾斜范围,当匹配到的物体,相对与定义物体时的位置坐标的任意(rx,rt)值超出所设定的范围,那么改物体检测结果会被移除。

深度学习
~~~~~~~~~~

    深度学习设置可以用来过滤结果,或者对深度学习结果进行后处理。

        .. image:: images/dl_setting.png
            :scale: 100%
            
    - 特征值x:
        特征值会过滤横向大小超出设定范围的掩码。因为错误的掩码的大小通常会也有错误。那么就可以使用这个范围来过滤错误的掩码。

腐蚀卷积核的大小/像素
`````````````````````

    - 腐蚀卷积核的大小/像素
        腐蚀操作的卷积核大小,通常的大小为,3,5,7,9。卷积核越大,腐蚀后的掩码图就越小。

    - 腐蚀迭代/次数
        腐蚀操作的应用次数,次数更多,腐蚀后的掩码图就越小

膨胀卷积核的大小
`````````````````

    - 膨胀卷积核的大小
        膨胀操作的卷积核大小,通常的大小为,3,5,7,9。卷积核越大,膨胀后的掩码图就越大。

    - 膨胀迭代/次数
        膨胀操作的应用次数,次数更多,膨胀后的掩码图就越大

    .. image:: images/erode_dilate.png
        :scale: 100%

    原图(左),腐蚀操作后的图(中),膨胀操作后的图(右)

验证
~~~~~~~~~~

    验证功能会对检测到的物体与检测模型进行比对验证,如果验证失败,那么该物体检测结果会被移除。

    - 验证:开启/关闭验证功能。
    - 置信度:调整验证的置信度,置信度越高,验证结果越严格。