3DMV:融合2D-3D的3D语义场景分割新方法

0 下载量 177 浏览量 更新于2024-06-20 收藏 1.89MB PDF 举报
"3DMV: 用于3D语义场景分割的联合2D-3D架构" 3DMV是一种创新的3D语义场景分割方法,由Angela Dai和Matthias Nießner提出,它结合了2D和3D数据的优势,尤其适用于室内环境的RGB-D扫描重建。该方法通过构建一个联合3D多视图预测网络,有效地利用了几何和颜色特征的协同效应,从而提高了3D语义分割的准确性。 在传统的3D语义分割任务中,大多数方法要么依赖于几何数据(如深度信息),要么基于RGB图像进行处理。3DMV则突破了这一局限,将两者结合起来,形成一个端到端的网络架构。首先,从RGB图像中提取特征图,随后借助可区分的反投影层将这些特征映射到3D网络的体积特征网格中。考虑到实际场景可能包含多个RGB输入视图,3DMV采用了多视图池化技术来处理不同数量的视图,确保对复杂场景的适应性。 3DMV的核心在于其联合2D-3D架构,该架构能够处理来自RGB-D扫描的数据,其中3D几何信息和RGB颜色信息被同时考虑。这种方法的优势在于它能够在3D空间中保持更多的细节,避免了将颜色数据简单投影到体积网格中可能导致的信息损失。 在ScanNet 3D分割基准测试中,3DMV相比于传统的体积架构,表现出了显著的提升,准确率从52.8%提高到了75%,证明了这种方法的有效性。这个结果对于依赖3D场景理解的机器人应用尤其重要,因为它们需要知道物体在3D空间中的位置信息。 3D语义场景分割的应用广泛,包括但不限于机器人导航、自动驾驶、虚拟现实和建筑建模等。3DMV的出现为这些领域提供了更高效、更精确的解决方案。通过结合深度学习和多视图处理,3DMV展示了在3D环境理解中的强大潜力,并为未来的研究和开发奠定了基础。 项目代码已开源,可在GitHub(https://github.com/angeladai/3DMV)上获取,这为研究者和开发者提供了实现和改进3DMV算法的平台。通过这个工具,我们可以进一步探索如何优化3D语义分割,以及如何将这些技术应用于实际的自动化和智能化系统中。

static int pd_eval_src_caps(struct usbpd *pd) { int i; union power_supply_propval val; bool pps_found = false; u32 first_pdo = pd->received_pdos[0]; int pdo_select = -1; u32 mv_select = 0, ma_select = 0; if (PD_SRC_PDO_TYPE(first_pdo) != PD_SRC_PDO_TYPE_FIXED) { usbpd_err(&pd->dev, "First src_cap invalid! %08x\n", first_pdo); return -EINVAL; } pd->peer_usb_comm = PD_SRC_PDO_FIXED_USB_COMM(first_pdo); pd->peer_pr_swap = PD_SRC_PDO_FIXED_PR_SWAP(first_pdo); pd->peer_dr_swap = PD_SRC_PDO_FIXED_DR_SWAP(first_pdo); val.intval = PD_SRC_PDO_FIXED_USB_SUSP(first_pdo); power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_USB_SUSPEND_SUPPORTED, &val); /* Check for PPS APDOs */ if (pd->spec_rev == USBPD_REV_30) { for (i = 1; i < PD_MAX_DATA_OBJ; i++) { if ((PD_SRC_PDO_TYPE(pd->received_pdos[i]) == PD_SRC_PDO_TYPE_AUGMENTED) && !PD_APDO_PPS(pd->received_pdos[i])) { pps_found = true; break; } } } val.intval = pps_found ? POWER_SUPPLY_PD_PPS_ACTIVE : POWER_SUPPLY_PD_ACTIVE; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_ACTIVE, &val); /* First time connecting to a PD source and it supports USB data */ if (pd->peer_usb_comm && pd->current_dr == DR_UFP && !pd->pd_connected) start_usb_peripheral(pd); /* Select the first PDO (vSafe5V) immediately. */ pdo_select = select_match_pdo(pd,&mv_select,&ma_select); if (pdo_select == -1) { usbpd_dbg(&pd->dev, "%s, invaild pdo select\n",__func__); pd_select_pdo(pd, 1, 0, 0); } else { usbpd_dbg(&pd->dev, "%s, pdo_select = %d, mv= %dmV, ma = %dmA\n",__func__,pdo_select + 1,mv_select,ma_select); pd_select_pdo(pd, pdo_select + 1, mv_select * 1000, ma_select * 1000); } return 0; }代码分析

2023-06-09 上传