ZhouJankin / MultiMap3D

Use ORB-SLAM2 to build a metricmap and localization, fcaf3d to detect 3D objects, and build a tracker database to manage the objects detected.
37 stars 6 forks source link

检测端:AssertionError: Expect points have color attribute #6

Open rookierobot opened 8 months ago

rookierobot commented 8 months ago

您好!我只剩下最后一点点就可以部署完成了,麻烦您有时间帮我看看错误原因~

  1. python fcaf3d_sort_demo.py load checkpoint from local path: /home/river/3d/checkpoints/fcaf3d_8x2_scannet-3d-18class_20220805_084956.pth start

  2. roslaunch orb_slam_dense tum_pioneers.launch

至此,slam端正常运行,但是在检测端出现以下报错: load checkpoint from local path: /home/river/3d/checkpoints/fcaf3d_8x2_scannet-3d-18class_20220805_084956.pth start [ERROR] [1705323430.408357, 12.569359]: bad callback: <function callback at 0x7ff9bdb3f550> Traceback (most recent call last): File "/opt/ros/noetic/lib/python3/dist-packages/rospy/topics.py", line 750, in _invoke_callback cb(msg) File "fcaf3d_river.py", line 83, in callback result, data = inference_detector(model, points_mmdet3d) File "/home/river/anaconda3/envs/3d3/lib/python3.8/site-packages/mmdet3d-1.0.0rc6-py3.8.egg/mmdet3d/apis/inference.py", line 140, in inference_detector data = test_pipeline(data) File "/home/river/anaconda3/envs/3d3/lib/python3.8/site-packages/mmdet3d-1.0.0rc6-py3.8.egg/mmdet3d/datasets/pipelines/compose.py", line 49, in call data = t(data) File "/home/river/anaconda3/envs/3d3/lib/python3.8/site-packages/mmdet3d-1.0.0rc6-py3.8.egg/mmdet3d/datasets/pipelines/test_time_aug.py", line 213, in call data = self.transforms(_results) File "/home/river/anaconda3/envs/3d3/lib/python3.8/site-packages/mmdet3d-1.0.0rc6-py3.8.egg/mmdet3d/datasets/pipelines/compose.py", line 49, in call data = t(data) File "/home/river/anaconda3/envs/3d3/lib/python3.8/site-packages/mmdet3d-1.0.0rc6-py3.8.egg/mmdet3d/datasets/pipelines/loading.py", line 328, in call assert points.attribute_dims is not None and \ AssertionError: Expect points have color attribute

最后这行报错信息是和点云的颜色有关吗?感谢您的回复~

ZhouJankin commented 8 months ago

这个报错看不太出来,可以debug一下t()这个函数看一下各个变量的格式,具体在哪行报错了

rookierobot commented 8 months ago

这个报错看不太出来,可以debug一下t()这个函数看一下各个变量的格式,具体在哪行报错了

是这里

图片

class NormalizePointsColor(object): """Normalize color of points.

Args:
    color_mean (list[float]): Mean color of the point cloud.
"""

def __init__(self, color_mean):
    self.color_mean = color_mean

def __call__(self, results):
    """Call function to normalize color of points.

    Args:
        results (dict): Result dict containing point clouds data.

    Returns:
        dict: The result dict containing the normalized points.
            Updated key and value are described below.

            - points (:obj:`BasePoints`): Points after color normalization.
    """
    points = results['points']
    assert points.attribute_dims is not None and \
        'color' in points.attribute_dims.keys(), \
        'Expect points have color attribute'
    if self.color_mean is not None:
        points.color = points.color - \
            points.color.new_tensor(self.color_mean)
    points.color = points.color / 255.0
    results['points'] = points
    return results
ZhouJankin commented 5 months ago

这里就是把电云的颜色做了下正则化处理 从0-255分布变为0-1分布。你的assert里提示了points的atribute_dims有问题,可以检查一下输入的points的格式。