【注】:本文地址:【3D】姿态检测网络PoseCNN复现过程记录.时光清浅,岁月嫣然

若转载请于明显处标明出处。

最近在研究室内6D姿态检测相关问题,计划在PoseCNN网络基础上进行改进实现。但是在第一步的复现过程中踩了无数的坑,最终成功运行了demo,目前网络训练完毕,test结果照原文要差一点。

有问题欢迎一起交流进步!

本文重点讲解网络代码复现过程,对于原文的讲解可以阅读这篇文章,满满干货!《论文笔记——PoseCNN》

本人系统环境:

  • Ubuntu 16.04
  • Tensorflow 1.8(from source)
  • Python 2.7
  • Cuda 10.0 & cuddn 7.3.1

1.搭建虚拟环境

第一步,创建专属于PoseCNN的虚拟环境,之后install的包都在此虚拟环境中。

虚拟环境的好处不用多说了吧,反正对Ubuntu系统的折腾越少越好!!!

我用 conda 创建的环境:

  • conda create -n posecnn python=2.7

    激活环境:
  • conda activate posecnn

    如果不用这个环境,记得deactivate:
  • conda deactivate posecnn

2.pip install

  • pip install opencv-python

如果不行试一下: sudo apt-get install libopencv-dev

  • pip install mock enum34
  • pip install matplotlib numpy keras Cython Pillow easydict transforms3d
  • pip install OpenEXR
  • sudo apt-get install libsuitesparse-dev libopenexr-dev metis libmetis-dev

3.TensorFlow

注意一定要从源码安装,虽然很繁琐,但是经过实践证明,pip install安装出来的TensorFlow不好用。。

此外,使用gcc 4.8和g++ 4.8对后续的依赖包进行编译。

  • sudo apt-get install gcc-4.8

  • sudo apt-get install g++-4.8

  • sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10

  • sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 30

  • sudo update-alternatives --config gcc 输入选择 1

  • sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10

  • sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 30

  • sudo update-alternatives --config g++ 输入选择 1

测试一下gcc和g++的版本,显示4.8就更换完毕了:

  • gcc --version

  • g++ --version

接下来安装bazel,并选择0.10.0版本,本文选择下载sh文件进行安装,

下载地址:https://github.com/bazelbuild/bazel/releases/download/0.10.0/bazel-0.10.0-installer-linux-x86_64.sh

下载好之后,安装:

  • chmod +x bazel-0.10.0-installer-linux-x86_64.sh 修改文件权限
  • ./bazel-0.10.0-installer-linux-x86_64.sh --user 进行安装

    接着添加环境变量:
  • gedit ~/.bashrc
  • export PATH="\(PATH:\)HOME/bin"

下面下载安装TensorFlow:

  • git clone https://github.com/tensorflow/tensorflow.git
  • cd tensorflow
  • git checkout r1.8
  • ./configure

    这一步,配置文件会问很多问题,对应回答y/n即可:

注意 Python 及其sitepackage的路径要与你之后环境路径相对应

比如我在posecnn虚拟环境中运行的话,我的python路径就是 .../.conda/env/posecnn/bin/python

大部分都选择n,但是询问cuda时,要根据你的电脑实际选择

然后编译源文件:

  • bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

    生成安装包:
  • bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/software/tensorflow

    最后安装:
  • pip install /tmp/tensorflow_pkg/tensorflow-1.8.0-cp27-cp27mu-linux_x86_64.whl

    至此,TensorFlow的源码安装大功告成,可以import测试一下。

4.Eigen

  1. wget https://bitbucket.org/eigen/eigen/get/3.3.0.zip
  2. # 提取解压压缩包
  3. # 重命名文件夹为eigen
  4. cd eigen
  5. mkdir build && cd build
  6. cmake ..
  7. make
  8. sudo make install

5.Nanoflann

  1. wget https://github.com/jlblancoc/nanoflann/archive/ad7547f4e6beb1cdb3e360912fd2e352ef959465.zip
  2. # 提取解压压缩包
  3. # 重命名文件夹为nanoflann
  4. sudo apt-get install build-essential cmake libgtest-dev
  5. cd nanoflann
  6. mkdir build && cd build && cmake ..
  7. make && make test
  8. sudo make install

6.Pangolin

  1. wget https://github.com/stevenlovegrove/Pangolin/archive/1ec721d59ff6b799b9c24b8817f3b7ad2c929b83.zip
  2. # 提取解压压缩包
  3. # 重命名文件夹为Pangolin
  4. cd Pangolin
  5. # Add folowing line to the CMakeLists.txt:
  6. # add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
  7. mkdir build
  8. cd build
  9. cmake ..
  10. cmake --build .

7.Boost

  1. wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2
  2. # 提取解压压缩包
  3. # 重命名文件夹为boost
  4. cd boost
  5. ./bootstrap.sh
  6. sudo ./b2
  7. sudo ./b2 install

8.Sophus

  1. wget https://github.com/strasdat/Sophus/archive/ceb6380a1584b300e687feeeea8799353d48859f.zip
  2. # 提取解压压缩包
  3. # 重命名文件夹为Sophus
  4. cd Sophus
  5. mkdir build && cd build
  6. cmake ..
  7. make
  8. sudo make install

9.NLOPT

  1. wget https://github.com/stevengj/nlopt/archive/74e647b667f7c4500cdb4f37653e59c29deb9ee2.zip
  2. # 提取解压压缩包
  3. # 重命名文件夹为nlopt
  4. cd nlopt
  5. mkdir build
  6. cd build
  7. cmake ..
  8. make
  9. sudo make install

至此,所有依赖包配置完毕,下面针对源代码进行编译运行。


10.Compile lib/kinect_fusion

先注释掉/usr/local/cuda/include/crt/common_functions.h的第75行

#define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported. Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."

因为这个issue

要是只读权限无法修改,就用sudo chmod 777 /usr/local/cuda/include/crt/common_functions.h修改一下权限。

  1. cd kinect_fusion
  2. mkdir build
  3. cd build
  4. cmake ..
  5. make

编译完记得取消注释刚刚的common_functions.h第75行


11.Compile lib/synthesize

  1. cd ..
  2. cd ..
  3. cd synthesize
  4. mkdir build
  5. cd build
  6. cmake ..
  7. make

至此,环境配置完毕。更多可以看下面的参考链接,很详细。


参考:

【3D】PoseCNN姿态检测网络复现过程记录的更多相关文章

  1. 升级Windows 10 正式版过程记录与经验

    升级Windows 10 正式版过程记录与经验 [多图预警]共50张,约4.6MB 系统概要: 预装Windows 8.1中文版 64位 C盘Users 文件夹已经挪动到D盘,并在原处建立了符号链接. ...

  2. iOS开发——网络篇——数据安全(MD5),HTTPS,检测网络状态

    一.数据安全 1.提交用户的隐私数据一定要使用POST请求提交用户的隐私数据GET请求的所有参数都直接暴露在URL中请求的URL一般会记录在服务器的访问日志中服务器的访问日志是黑客攻击的重点对象之一 ...

  3. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  4. 目标检测网络之 YOLOv3

    本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...

  5. android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

      android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...

  6. 第44章 MPU6050传感器—姿态检测—零死角玩转STM32-F429系列

    第44章     MPU6050传感器—姿态检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  7. 3D车道线检测:Gen-LaneNet

    3D车道线检测:Gen-LaneNet Gen-LaneNet: A Generalized and Scalable Approach for 3D Lane Detection 论文链接:http ...

  8. iOS开发网络篇—Reachability检测网络状态

    前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...

  9. 升级到 ExtJS 5的过程记录

    升级到 ExtJS 5的过程记录   最近为公司的一个项目创建了一个 ExtJS 5 的分支,顺便记录一下升级到 ExtJS 5 所遇到的问题以及填掉的坑.由于 Sencha Cmd 的 sencha ...

随机推荐

  1. vue組件自学

    Vue组件 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添 ...

  2. 用canvas实现简单的下雪效果

    首先新建一个html文件,将body的背景设置为天空的那种深蓝色,并创建一个canvas,canvas的操作逻辑都放在snow.js中: <!DOCTYPE html> <head& ...

  3. removeAttribute getAttribute setAttribute

    1.removeAttribute() 方法删除指定的属性. 注:removeAttributeNode() 方法从元素中删除指定的属性节点.简单的来讲,removeAttribute() 移除元素内 ...

  4. 用CSS3实现钟表效果

    背景:最近在学习CSS3,看到了一个小案例,通过自己的学习,动手实现了它,现在把它分享出来. 效果图 实现过程 1.首先我们需要在页面中写出一个静态的钟表效果.首先我们需要一个表盘div wrap 对 ...

  5. 前端H5,点击选择图片控件,图片直接在页面上展示~

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 关于使用fastjson出现的问题:com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 1, fastjson-version 1.2.44

    先说下需求:是从redis中根据keys批量获取数据集合,再通过fastjson转为对象集合 代码如下: 在postman测试后,出现错误如下: 刚开始以为是使用fstjson方法不对,后面先通过打断 ...

  7. Asp.Net Core 中IdentityServer4 授权中心之应用实战

    一.前言 查阅了大多数相关资料,查阅到的IdentityServer4 的相关文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...

  8. MyBatis 源码分析-项目总览

    MyBatis 源码分析-项目总览 1.概述 本文主要大致介绍一下MyBatis的项目结构.引用参考资料<MyBatis技术内幕> 此外,https://mybatis.org/mybat ...

  9. EF多租户实例:如何快速实现和同时支持多个DbContext

    前言 上一篇随笔我们谈到了多租户模式,通过多租户模式的演化的例子.大致归纳和总结了几种模式的表现形式. 并且顺带提到了读写分离. 通过好几次的代码调整,使得这个库更加通用.今天我们聊聊怎么通过该类库快 ...

  10. Mac OS X 10.13上 安装odoo 11.0开发环境

    0.准备假设homebrew已经安装好没安装的需要先安装,见下面链接http://brew.sh/ 1.安装PostgreSQL$ brew tap homebrew/services$ brew i ...