• ESANet语义分割与realsense D455的结合


    paper:Efficient RGB-D Semantic Segmentation for Indoor Scene Analysis

    网络结构如下,相比于基于RGB图像的语义分割,该网络用了RGB与深度图结合。
    在这里插入图片描述
    既然是RGBD,就可以用RGBD相机来测试了,选择realsense d455相机。

    用ROS接口读入RGB图像与深度图。

    这里要注意图像需要经过预处理,通过ESANet的源码,得知在validate阶段需要做以下预处理。

    transform_list = [Rescale(height=height, width=width)]
    transform_list.extend([
        ToTensor(),
        Normalize(depth_mean=depth_mean,
                  depth_std=depth_std,
                  depth_mode=depth_mode)
    ])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    包含了Rescale, toTensor和normalize,
    Rescale如下:

    image = cv2.resize(image, (self.width, self.height),
                               interpolation=cv2.INTER_LINEAR)
    depth = cv2.resize(depth, (self.width, self.height),
                       interpolation=cv2.INTER_NEAREST)
    
    • 1
    • 2
    • 3
    • 4

    toTensor就是把RGB和深度图变为torch.tensor

    image = image.transpose((2, 0, 1))
    depth = np.expand_dims(depth, 0).astype('float32')
    
    image = torch.from_numpy(image).float()
    depth = torch.from_numpy(depth).float()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后是Normalize,RGB图要做归一化处理,均值方差可能是根据训练集图像来的,可以根据自己的数据进行修改,
    深度图的mean, std要根据自己的数据计算,直接用代码里面的效果不好。
    有时候深度图会有nan值的情况,需要用到np.nan_to_num函数,d455相机没有nan值。
    normalize之后一定要把之前0处的值置为0。

    image = image / 255
    image = torchvision.transforms.Normalize(
        mean=根据数据, std=根据数据)(image)
    if self._depth_mode == 'raw':
        depth_0 = depth == 0
    
        depth = torchvision.transforms.Normalize(
            mean=根据数据, std=根据数据)(depth)
    
        # set invalid values back to zero again
        depth[depth_0] = 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    剩下就是过模型,input size可以选的,这里选的是(640, 480)

    # Do inference
    outputs = self.model(img, depth) #N,C,W,H
    
    • 1
    • 2

    对于不复杂的场景,效果还是不错的,尤其是轮廓比较整齐,
    下图场景中墙上的画,椅子,台灯轮廓都很清楚
    在这里插入图片描述
    但是对于复杂的场景(ex.桌子上乱七八糟的小零碎),移动的相机效果不是很好。
    一来跟训练数据集有关,这里用的是sun-rgbd数据集训练的权重。
    移动中的相机分割不是很稳,类别频繁变动,可能跟场景比较复杂有关,或者参数还需要进一步调整。
    下面这个场景就有点乱了
    在这里插入图片描述
    这是对一个房间的分割建图在这里插入图片描述

  • 相关阅读:
    MySQL创建数据表(CREATE TABLE语句)
    在Linux上开启文件服务,需要安装并配置Samba
    字节跳动基础架构编排调度团队论文入选云计算领域顶会 SoCC 2023
    盘点 10 个 GitHub 上的前端高仿项目
    02-JVM学习记录-运行时数据区
    2022 第四周全球 AI 模型周报
    Kotlin笔记(七):协程
    小程序常见故障解决方法分享|微信小程序平台常见拒绝情形
    .NET 8 RC 2 发布,将在11月14日发布正式版
    数据结构实验
  • 原文地址:https://blog.csdn.net/level_code/article/details/126362232