semantic fusion中的Elastic Fusion 配置记录 Ubuntu16.04

本文详细记录了在Ubuntu16.04环境下,从安装依赖到编译ElasticFusion,再到解决编译错误及运行测试数据的全过程。特别关注了CUDA驱动、nvidia-prime的安装,以及Pangolin库的正确编译。

这篇是关于elasticfusion的编译说明,caffe的编译以及最终semanticfusion编译见下一篇博客:semantic fusion中的caffe 配置记录 Ubuntu16.04

环境说明:

ubuntu 16.04

CUDA 版本:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

Nvidia驱动版本:

| NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1  

这里直接用命令行安装的驱动:

 sudo apt remove --purge nvidia*
 sudo apt install nvidia-418 nvidia-prime nvidia-settings

nvidia-prime很重要,因为后面需要用到独立显卡跑代码

注意cuda 和nvidia驱动有约束关系:
在这里插入图片描述然后编译顺序什么的就很重要了

首先安装依赖:

sudo apt-get install -y cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev openjdk-8-jdk freeglut3-dev libglew-dev libsuitesparse-dev libeigen3-dev zlib1g-dev libjpeg-dev libpng12-dev

注意原github上面说的是openjdk-8-jdk,可是apt下载不到7了,还删除了命令行里面的cuda,因为已经装好了。

开始编译:

由于最终目标是semanticfusion,所以直接下载semanticfusion的代码:

git clone --recursive https://bitbucket.org/dysonroboticslab/semanticfusion

代码很大。。。所以我等了好久。。
进入路径 semanticfusion/elasticfusionpublic/
编译很容易出问题,所以我们严格按照该路径下的build.sh的编译顺序:


#Installing Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ../ -DAVFORMAT_INCLUDE_DIR="" -DCPP11_NO_BOOST=ON
make -j8
cd ../..

#Up to date OpenNI2
git clone https://github.com/occipital/OpenNI2.git
cd OpenNI2
make -j8
cd ..

#Actually build ElasticFusion
cd ../Core
mkdir build
cd build
cmake ../src
make -j8
cd ../../GPUTest
mkdir build
cd build
cmake ../src
make -j8
cd ../../GUI
mkdir build
cd build
cmake ../src
make -j8

make出现报错error: ‘glDrawFrustrum’ is not a member of ‘pangolin’
针对这个问题在Pangolin/include/pangolin/gl目录下的gldraw.h中发现没有glDrawFrustrum而是glDrawFrustum,所以将报错位置semanticfusion/elasticfusionpublic/GUI/src/Tools/GUI.h中的glDrawFrustrum改为glDrawFrustum(作者代码为什么会copy错不得而知。。。)

测试运行

  1. 下载测试数据:
    测试数据集
  2. 命令行运行:
cd semanticfusion/elasticfusionpublic/GUI/build
./ElasticFusion -l dyson_lab.klg

如果出现图形化界面说明编译成功!

过程中出现的问题:

GLSL 3.30 is not supported. Supported versions are 1.10, 1.20, 1.30, 1.00 ES and 3.00 ES

出现上述问题的原因是代码找不到独显,在intel核显上跑就会这样,所以之前需要下载nvidia-prime来控制是否使用独立显卡。
当然,驱动版本太高了(430)了系统也找不到显卡,所以会抱这个错,删除原来的驱动然后命令行安装418版本的就可以了

Your GPU "GeForce GTX 950M" isn't in the ICP Step performance database, please add it
Your GPU "GeForce GTX 950M" isn't in the RGB Step performance database, please add it
Your GPU "GeForce GTX 950M" isn't in the RGB Res performance database, please add it
Your GPU "GeForce GTX 950M" isn't in the SO3 Step performance database, please add it

这个原因是代码没有对我的显卡(GTX950M)做适配,需要手动将参数写到代码里面。代码文件去获取显卡参数的方法是运行GPUtest,具体参考:
点击这里

cd semanticfusion/elasticfusionpublic/GPUTest/build
./GPUtest ../

但是在运行GPUtest时我这里报错:

terminate called after throwing an instance of 'std::runtime_error'
  what():  Rebuild Pangolin for PNG support.
Aborted (core dumped)

网上能搜到的解决的方法很少,可以参考这个方法

更新:

可以运行了,显卡配置是1080Ti,对应的参数是:

icpStepMap["GeForce GTX 1080 Ti"] = std::pair<int, int>(384, 48);
rgbStepMap["GeForce GTX 1080 Ti"] = std::pair<int, int>(96, 160);
rgbResMap["GeForce GTX 1080 Ti"] = std::pair<int, int>(512, 432);
so3StepMap["GeForce GTX 1080 Ti"] = std::pair<int, int>(256, 48);

关于caffe的配置以及semanticfusion的编译,见下一篇博客:semantic fusion中的caffe 配置记录 Ubuntu16.04

### 语义分解与融合块的概念 在深度学习架构中,语义分解与融合块(Semantic Decomposition and Fusion Block, SDFB)是一种用于处理多模态数据的关键组件。SDFB 的主要功能是对输入的不同形式的数据进行解构和重构操作。 #### 解构过程 通过解构阶段,模型能够将复杂的原始特征映射到更简单的子空间表示,在这些子空间里可以更容易捕捉不同模式之间的关系[^1]。这一过程中通常会利用卷积神经网络或其他类型的编码器来提取局部特征并逐步构建高层次抽象概念。 #### 融合机制 对于来自多个源的信息,则采用特定设计好的策略来进行有效组合。这不仅限于简单拼接或加权求和的方式;现代方法往往倾向于探索更加灵活高效的交互方式,比如注意力机制、图结构化传播等技术手段。这种端到端训练框架使得整个系统的优化目标一致,从而提高了最终预测性能。 ```python import torch.nn as nn class SemanticDecompositionFusionBlock(nn.Module): def __init__(self, input_dim, hidden_dims, output_dim): super(SemanticDecompositionFusionBlock, self).__init__() # Define decomposition layers self.decomposition_layers = nn.Sequential( nn.Linear(input_dim, hidden_dims[0]), nn.ReLU(), nn.Dropout(0.5), *[nn.Sequential(nn.Linear(h_in, h_out), nn.ReLU(), nn.Dropout(0.5)) for h_in, h_out in zip(hidden_dims[:-1], hidden_dims[1:])] ) # Define fusion layer self.fusion_layer = nn.Linear(sum(hidden_dims), output_dim) def forward(self, x_modalities): decomposed_features = [] for modality_data in x_modalities: feature = self.decomposition_layers(modality_data) decomposed_features.append(feature) fused_representation = torch.cat(decomposed_features, dim=1) final_output = self.fusion_layer(fused_representation) return final_output ``` 上述代码展示了如何实现一个基本版本的语义分解与融合模块。该类接收多种模态的数据作为输入,并分别经过各自的线性变换层得到低维表征向量。之后再把这些向量连接起来送入全连接层完成最后一步的综合决策。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值