[环境配置]Ubuntu 16.04+CUDA 9.0+OpenCV 3.2.0下编译基于Caffe的MobileNet-SSD踩过的一些坑
SSD是Caffe的一个分支,源码在github上:https://github.com/weiliu89/caffe/tree/ssd
$ git clone https://github.com/weiliu89/caffe.git
$ cd caffe
$ git checkout ssd
然后编译SSD
$ cp Makefile.config.example Makefile.config
$ make -j8
$ make py
$ make test -j8
在这个过程中会遇到很多很多问题,特此记录
1、hdf5缺失
解决方案
官网下载hdf5:https://www.hdfgroup.org/downloads/hdf5/source-code/
解压后编译安装
$ cd hdf5-1.10.3
$ mkdir build
$ cd build
$ cmake ..
$ sudo make
$ sudo make install
对于新版本的hdf5需要较新版本的cmake,因此需要将cmake更新至3.10以后,此处选择3.12.0
$ cd /usr
$ sudo wget https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.tar.gz
$ sudo tar zxvf cmake-3.12.0-Linux-x86_64.tar.gz
$ sudo ln -s /usr/cmake-3.12.0-Linux-x86_64/bin/* /usr/bin/
如果提示有冲突,那么需要将原有的cmake相关可执行文件删除
$ sudo rm /usr/bin/cmake #以及其他如ccmake、ctest、cpack、cmake-gui
#然后重新关联
$ sudo ln -s /usr/cmake-3.12.0-Linux-x86_64/bin/* /usr/bin/
$ cmake --version #检查cmake版本,如果为3.12.0则说明安装成功
打开Makefile.config,找到
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
改为
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
然后链接hdf5库
$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libhdf5_serial.so.10.0.2 libhdf5.so
$ sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
如果还是有问题
$ sudo ln -sf libhdf5_serial.so libhdf5.so
$ sudo ln -sf libhdf5_serial_hl.so libhdf5_hl.so
github上有讨论帖https://github.com/BVLC/caffe/issues/4333
2、opencv3的问题
问题如下
.build_release/lib/libcaffe.so: undefined reference to 'cv::VideoCapture::set(int, double)'
...
解决方案
已安装opencv3及对应的contrib的同学们打开Makefile.config,找到
# OPENCV_VERSION := 3
将这句话前面的#去掉,然后打开Makefile找到
ifeq ($(USE_OPENCV), 1)
LIBRARIES += opencv_core opencv_highgui opencv_imgproc
这里空格然后加上
opencv_imgcodecs opencv_contrib opencv_videoio
3、架构architecture compute_20的问题
问题如下
nvcc fatal : Unsupported gpu architecture 'compute_20'
Makefile:596: recipe for target '.build_release/cuda/src/caffe/solvers/nesterov_solver.o' failed
解决方案
打开Makefile.config,找到
# CUDA architecture setting: going with all of them.
# For CUDA <.0, comment the lines after *_35 for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_61,code=sm_61
第三行和第四行中的结构部分前面加#,改为
# CUDA architecture setting: going with all of them.
# For CUDA <.0, comment the lines after *_35 for compatibility.
CUDA_ARCH := #-gencode arch=compute_20,code=sm_20 \
#-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_61,code=sm_61
至此基本解决安装编译SSD的问题,接下来从github上下载MobileNet到examples文件夹下:https://github.com/chuanqi305/MobileNet-SSD,运行demo.py,这时又会出现好几种问题,特做以下记录
4、没有安装pycaffe
问题如下
ImportError: No module named _caffe
这是没有配置好python与caffe的接口,需要安装pycaffe
解决方案
$ cd your_caffe_path
$ sudo make pycaffe
5、找不到skimage模块
问题如下
ImportError: No module named skimage.io
找不到skimage模块,那么我们安装此模块
解决方案
$ sudo pip install scikit-image
使用pip安装的过程中,如果pip版本过低,有些库是无法安装的,因此需要用以下的命令升级到最新版的pip
$ sudo pip install --upgrade pip
建议个人使用pip时安装都加上sudo,有些文件权限会有问题。
6、找不到protobuf模块
问题如下
ImportError: No module named google.protobuf.internal
找不到protobuf模块,解决方案类似于上一问题
解决方案
$ sudo pip install protobuf
[环境配置]Ubuntu 16.04+CUDA 9.0+OpenCV 3.2.0下编译基于Caffe的MobileNet-SSD踩过的一些坑的更多相关文章
- [环境配置]Ubuntu 16.04 源码编译安装OpenCV-3.2.0+OpenCV_contrib-3.2.0及产生的问题
1.OpenCV-3.2.0+OpenCV_contrib-3.2.0编译安装过程 1)下载官方要求的依赖包 GCC 4.4.x or later CMake 2.6 or higher Git GT ...
- Ubuntu 16.04 + CUDA 8.0 + cuDNN v5.1 + TensorFlow(GPU support)安装配置详解
随着图像识别和深度学习领域的迅猛发展,GPU时代即将来临.由于GPU处理深度学习算法的高效性,使得配置一台搭载有GPU的服务器变得尤为必要. 本文主要介绍在Ubuntu 16.04环境下如何配置Ten ...
- tensorflow 1.8, ubuntu 16.04, cuda 9.0, nvidia-390,安装踩坑指南。
被tensorflow 1.8, ubuntu 16.04, cuda 9.0, nvidia-390折磨了5天,终于上坑,留下指南,造福后人. 1.先把依赖搞清楚: tensorflow 1.8依赖 ...
- Ubuntu 16.04: How to install OpenCV
参考:https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/ 步骤# 1:安装opencv的依赖项 本 ...
- OpenCV - Linux(Ubuntu 16.04)中安装OpenCV + OpenCV_Contrib
近两个月来接触了Linux系统,在老板的建议下翻了Ubuntu的牌子,我安装的版本是16.04,用习惯之后感觉蛮好的,比Windows要强.好啦,废话不说啦,下面开始说在Ubuntu中安装OpemCV ...
- 如何配置Ubuntu 16.04 GRUB 2引导加载程序
正如你所知,GRUB 2 是大多数 Linux 操作系统的默认引导加载程序.GRUB 是 GRand Unified Bootloader 的缩写,它是 Linux 启动时首先要加载的一个程序,此后它 ...
- Ubuntu 16.04: How to resolve libqt5x11extras5 (>= 5.1.0) but it is not going to be installed
Issue: When you install Virtualbox 5.1 on Ubuntu 16.04, you may encounter following error: root@XIAY ...
- 配置ubuntu 16.04.1 LTS odoo 10.0开发环境
使用VMware Fusion 8.5.0创建ubuntu 64bit虚拟机:使用ubuntu-16.04.1-desktop-amd64.iso镜像缺省安装ubuntu,用户名odoo,密码1234 ...
- ubuntu16.04下安装配置深度学习环境(Ubuntu 16.04/16.10+ cuda7.5/8+cudnn4/5+caffe)
主要参照以下两篇博文:http://blog.csdn.net/g0m3e/article/details/51420565 http://blog.csdn.net/xuzhongxiong/a ...
随机推荐
- 原生 JS 的 Base64 转码
JavaScript 原生提供两个 Base64 相关的方法: btoa():任意值转为 Base64 编码 atob():Base64 编码转为原来的值 注意:这两个方法不适合非 ASCII 码的字 ...
- R函数-时间序列ETS参数说明
alpha\beta\gamma分别代表水平.趋势.季节分量的平滑参数α.β.γ.这三个参数我们希望接近于0,以便于更平滑,即越小越平滑.在乘法模型的情况下,参数需要非常低,否则模型会对噪声太敏感. ...
- 【转】iOS消息推送实现过程记录
客户端代码:链接地址 服务器代码:链接地址 链接地址 这里记录下iOS消息推送实现的全过程 首先,申请秘钥. 之后进入链接地址开发者,当然你得有啊!!!!! 点击这里 如图: 下面实现创建推送证书( ...
- Kafka设计解析(十四)Kafka producer介绍
转载自 huxihx,原文链接 Kafka producer介绍 Kafka 0.9版本正式使用Java版本的producer替换了原Scala版本的producer.本文着重讨论新版本produce ...
- Spring源码分析(三)容器核心类
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在上一篇文章中,我们熟悉了容器的基本用法.在这一篇,我们开始分析Spri ...
- PAT乙级1016
1016 部分A+B (15 分) 正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA.例如:给定 A=3862767,DA=6,则 ...
- 如何修改sharepoint中alert发送邮件模板
In my post last week I talked about customizing alert notifications and alert templates. Sometimes y ...
- Target Audiences在弹出的people picker中不显示Alias列有空的项目
[客户需求] 当编辑webpart时,Target Audiences在弹出的people picker搜索时候,Alias列有空的项目,客户要求不显示Alias列有空的项目. [分析] 首先这个“D ...
- Java类是如何默认继承Object的?
原:https://juejin.im/post/5ca1e8ade51d454e6a300048 前言 学过Java的人都知道,Object是所有类的父类.但是你有没有这样的疑问,我并没有写exte ...
- Spring第三天——AOP注解实现与事务管理
大致内容: aspectJ的aop操作(基于注解,对比day02配置操作)(会用) *jdbcTemplate操作(实现CRUD) *spring配置连接池 *spring事务管理 一.AspectJ ...