detectron安装+caffe2安装

因为想跑一下facebook最近开源的detectron物体检测平台,所以安装caffe2+detectron

总结:

一定要好好看官方安装教程:https://github.com/facebookresearch/Detectron/blob/master/INSTALL.md

caffe2教程,caffe2与caffe区别:https://www.jianshu.com/p/5c0fd1c9fef9?from=timeline

detectron是基于caffe2框架,使用mask-rcnn模型实现的物体检测平台

github链接:https://github.com/facebookresearch/Detectron

detectron demo:

1、使用detectron进行识别:使用tools/infer_simple.py,调用一个已经训练好的模型model_final.pkl,对图片进行物体检测

2、使用detectron进行训练:使用tools/train_net.py

https://github.com/facebookresearch/Detectron/blob/master/GETTING_STARTED.md

detectron的依赖:

因为detectron基于caffe2,而且暂时支持GPU计算,所以我们需要安装caffe2,cuda(cudnn)

caffe2安装:

上caffe2官网看安装教程:https://caffe2.ai/docs/getting-started.html?platform=windows&configuration=compile

发现可以有conda安装、github源码编译安装等多种方式。

1、使用conda安装:

安装caffe2需要先安装好cuda(cudnn),且已有的cuda版本不同,安装的caffe2版本也不同:

For Caffe2 with CUDA 9 and cuDNN 7 support:

1

conda install -c caffe2 caffe2-cuda9.0-cudnn7

For Caffe2 with CUDA 8 and cuDNN 7 support:

1

conda install -c caffe2 caffe2-cuda8.0-cudnn7

cuda 版本 
cat /usr/local/cuda/version.txt

cudnn 版本 
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

则需查看本机cuda版本:http://blog.csdn.net/zhangjunhit/article/details/76532196

查看cudnn版本:https://zhidao.baidu.com/question/330920288150862405.html

这里注意在sample中虽然在/usr/local/cuda/include/下找不到cudnn.h文件,但实际上cudnn已经安装好了,只不过cudnn.h文件在/usr/include/下

关于cuda和cudnn各自的作用及相互的关系:http://blog.csdn.net/fangjin_kl/article/details/53906874   http://blog.csdn.net/yangdashi888/article/details/73694446

查看后,本机为cuda 8.0

conda安装caffe2完成。

但是,启动detectron的时候,显示缺少core包

这个core包是什么??pip和conda直接安装core都显示不存在这样的包,百度和google了之后并没有发现有可用的包。

最后发现,conda安装的caffe2中没有detectron模块,缺少了core包。因为detectron太新了,需要用最新的caffe2来支持,因此不能使用conda安装caffe2,应该在官网下载caffe2源码安装caffe2,以保证安装的caffe2中有detectron模块

2、使用源码安装:安装依赖(cuda8.0+cudnn6+...)+cmake+sudo make install

首先需要安装一些依赖:

创建一个.sh脚本:

sudo apt-get updatesudo apt-get install -y --no-install-recommends \

build-essential \

cmake \

git \

libgoogle-glog-dev \

libgtest-dev \

libiomp-dev \

libleveldb-dev \

liblmdb-dev \

libopencv-dev \

libopenmpi-dev \

libsnappy-dev \

libprotobuf-dev \

openmpi-bin \

openmpi-doc \

protobuf-compiler \

python-dev \

python-pip                          sudo pip install \

future \

numpy \

protobuf

修改权限 ,bash运行。成功。

然后:

sudo apt-get install -y --no-install-recommends libgflags2

错误1:缺少多个相互依赖的包

提示缺包,再写个sh脚本,格式同上,将缺的包都写进去,执行脚本,又缺包,再把缺的包加到脚本里。。。直到安装成功

注意,安装依赖需要一次安装完成,切勿单个安装,主要是由于包之间彼此会有一定的依赖关系,这个是你无法准确定位的,故在 一次安装动作中做完,看这篇http://blog.csdn.net/blueheart20/article/details/51901867

make过程

接下来就可以把caffe2源码下下来make编译了

一开始,没有仔细读caffe2官网上源码安装的教程,官网上给出的下载时的git命令是这样的:

我觉得不就是下载吗,也就没有看官网上的这句,下载命令直接用的 git clone https://github.com/caffe2/caffe2.git

漏掉了–recursive选项,这个选项有什么用呢?git项目代码使用xx.git的方法引用了其他子模块的代码,--recursive选项指定递归下载所有子模块的代码

下面我就因为这个导致了难以发现的错误

错误1:cmake2.7需要升级到cmake3.2

下载下来之后,进入文件夹,按照官网上的步骤,cmake编译,这是,程序提示说我的cmake版本过低,需要cmake3.2及以上的,而我是2.7,所以又去安装cmake3,见这篇编译安装cmake3

安装完cmake后,cmake编译,提示缺少头文件numa.h:

numa.h:No such file or directory

上网试了多种办法,最后发现安装一个库就可以了$ apt-get install libnuma-dev,见这篇http://www.cnblogs.com/qq952693358/p/8032956.html

错误2:undefined reference to `pthread_create' cmake caffe2

解决了这个错误后,cmake编译,又出现了新的错误,提示有函数未定义undefined reference to `pthread_create' cmake caffe2

上网搜,网上都说什么linux默认库中没有lpthread这个库,所以出现这个错误 ,只需要给cmake命令加上-lpthread选项就行。。。只需要在cmakelists.txt文件里面加上两行什么代码就行。。试了都不对

最后发现,因为一开始从github上下载代码的时候没有加–recursive选项,导致一开始下载的项目不全,加上这个选项重新下载,就可以了,见这篇https://github.com/caffe2/caffe2/issues/1234#issuecomment-334117888

然后cmake ..终于编译成功了

make install过程

然后根据教程,还是在build文件夹里,sudo make install(注意这次不是cmake了)

错误1:nccl.cu(36): error: argument of type "const int *" is incompatible with parameter of type "int *"

又出现了新的错误:nccl.cu(36): error: argument of type "const int *" is incompatible with parameter of type "int *"

上网看了没有别的现成的解决方案,因为它提示参数不匹配,考虑有可能本机上安装的nccl库版本比较旧了,而我下载的caffe2的代码比较新,导致接口参数不一致

用dpkg -l | grep nccl 命令查看一下本机上的nccl库的版本,发现是1.2.3

解决方案:更新本机的nccl库

首先把旧的这两个包卸载掉,卸载的过程中发现apt-get install remove命令有时不起作用,因此上网搜了apt-get完整卸载软件的方法:http://blog.csdn.net/get_set/article/details/51276609

apt-get -purge remove libnccl-dev

apt-get -purge remove libnccl1

然后,就要安装新的nccl包了

先查询一下nccl有哪些版本

查询一个包有哪些版本:https://www.cnblogs.com/EasonJim/p/7144017.html

这里,我根据apt-get install libnccl-dev命令的错误提示找到nccl在apt-get上的库的地址:http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1404/x86_64/,查看nccl有哪些版本

看了一下,决定安装最新的2.1.4-1,又因为本机上的cuda是8.0,为了nccl库和cuda一致,所需安装这个:

但是直接使用apt-get install libnccl-dev命令,默认安装的是

所以使用apt-get的时候需要手动指定安装包的版本:https://www.cnblogs.com/EasonJim/p/7144017.html

apt-get install libnccl-dev=2.1.4-1+cuda8.0

apt-get install 软件包名=版本名

运行,发现还依赖libnccl2,所以加上libnccl2:

apt-get install libnccl-dev=2.1.4-1+cuda8.0  libnccl2=2.1.4-1+cuda8.0

安装成功

鉴于这个问题在网上还没搜到解决方案,因此在github上答了一下:https://github.com/caffe2/caffe2/issues/394

错误2:cudnn5.0需要升级到cudnn6.0

错误解决,再次sudo make install,运行了一会又有新的错误:

看错误提示,意思是我目前的cudnn版本是5.0,而官方推荐6.0及以上(强行推荐,也是醉了 - -)。

那么就要将cudnn5.0更新到cudnn6.0,更新的办法其实和新安装6.0的方法一样,wget下载下来tar.gz安装包,解压到合适位置,然后ldconfig链接一下就可以了,新安装的6.0会自动把5.0覆盖,只不过cudnn6.0的安装包下载前需要现在nvidia官网上注册个账号。注册后就可以在这里下载了https://developer.nvidia.com/rdp/cudnn-download,选择cuDNN v6.0 Library for Linux

下载下来之后:

sudo tar -xzf cudnn-8.0-linux-x64-v6.1.tgz -C /usr/local

rm cudnn-8.0-linux-x64-v5.1.tgz && sudo ldconfig

就安装完成了,查看一下:

错误3:no rule to make target

然后再sudo make instal,却提示error:no rule to make target,同时还有大量的waring:clock skew detected(时钟漂移)

后来发现是因为重新安装了依赖包(cudnn)之后,需要重新make编译(make编译所有的结果都在build文件夹里,所以要重新编译只需要删除build文件夹,然后再新建一个空的build文件夹,执行make命令即可)

 错误4:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found

参考这篇文章,发现是因为ubuntu14自带的g++为4.8.4,不支持c++11,所以不支持GLIBCXX_3.4.21,需要升级到g++5.2.0

升级之后,make install 错误消失

错误5:undefined reference to `google::protobuf: caffe2

首先参考这篇文章:http://blog.csdn.net/qq_17278169/article/details/64128525,发现是机器上有多个protobuf,冲突了,因此考虑卸载一些。

为什么有多个protobuf就会冲突呢?看这篇http://blog.csdn.net/missdaddio/article/details/67631777

原来,conda中默认的protobuf是最新的3.几的,apt-get中默认的protbuf是2.几的,而caffe仅支持2.几的,因此要

参考这篇文章https://github.com/caffe2/caffe2/issues/1597,用

find / -name libprotobuf* 2>/dev/null

/dev/null是什么?2>/dev/null是什么意思?https://zhidao.baidu.com/question/223779994.html

看一下本机上都有哪些protobuf

发现caffe2安装包中自带了,conda中有,/usr/lib中也有

最开始不懂,想着卸载掉/usr/lib中的和conda中的,只留着caffe2中自带的

于是,卸载/usr/lib中的:dpkg l | grep protobuf 看一下把看到的包都用 apt-get --purge remove卸载掉了

卸载conda中的:conda list 看了一下,看到了一个名为protobuf的,于是conda remove卸载掉。

然后删除build目录后重新cmake,make install,在make install过程中又出现错误:

错误6:error: ‘XXXX’ is not a member of ‘google::protobuf::

仔细检查,发现是因为我在之前解决错误5的过程中犯了2个错误:

1、conda中的protobuf没有卸载掉。

直接命令行执行protoc(protobuf的主要命令),可以发现能执行

于是用which protoc看一下,发现这个命令对应的可执行文件在/opt/conda/bin/下,说明conda中的protobuf没有被卸载掉!

又用conda list仔细看了一下,发现刚才我用conda remove卸载掉了一个名为protobuf的包,但是实际上conda list中还有一个名为libprotobuf的包。

2、apt-get中的protbuf不应该卸载掉。我一开始就忽略了一个问题,caffe2安装的官方文档中已经说了需要用apt-get安装protbuf库了啊!

于是我conda remove libprotobuf卸载掉了conda中所有的protobuf,又apt-get把apt-get的那几个依赖包装了回来。

再次清空build文件夹,cmake&make install,make install

detectron安装+caffe2安装的更多相关文章

  1. pytorch安装 caffe2 安装:git 慢 caffe2 cannot find -lopencv_dep_cudart ,undefined reference to 'pthread_create'

    最开始的问题: caffe2目前已经不维护了.怎么编译都报错,并且有third_party的代码链接已经飞了.下载不全代码了.建议 不要再折腾了,直接安装Pytorch. 首先,基本环境是ubuntu ...

  2. ubuntu 16.04 安装caffe2的方法及问题解决

    工作需要安装caffe2,从用户体验上来讲,caffe2的安装绝对是体验比较差的那种,花费了我那么多时间去倒腾,这样的用户体验的产品,估计后面是比较危险的. 废话少说,直接上步骤: 官网上有安装目录, ...

  3. ubuntu16.04 安装caffe2

    1.使用conda创建环境 conda create --name caffe2env python=3.6 ---------------------------------success----- ...

  4. Hadoop单机模式安装-(3)安装和配置Hadoop

    网络上关于如何单机模式安装Hadoop的文章很多,按照其步骤走下来多数都失败,按照其操作弯路走过了不少但终究还是把问题都解决了,所以顺便自己详细记录下完整的安装过程. 此篇主要介绍在Ubuntu安装完 ...

  5. Linux rabbitmq的安装和安装amqp的php插件

    RabbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ是一个邮箱.邮局.邮 ...

  6. CentOS安装Nginx安装详解

    一.准备工作,安装依赖包,缺一不可!(推荐先用命令查看自己是否已经安装一下软件,确认没有再安装) --------------------------------------------------- ...

  7. SignalR安装以及安装问题

    正常节奏 介绍 SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中. 它提 ...

  8. 解决xp下无法通过windows installer服务安装此安装程序包。您必须安装带有更新版本Wi

    今天装 tortoisegit 的时候发现安装包不能使用.报错无法通过windows installer服务安装此安装程序包.您必须安装带有更新版本Windows Installer服务的Window ...

  9. 安装LVS安装LVS和配置LVS的工作比较繁杂

    安装LVS安装LVS和配置LVS的工作比较繁杂,读者在配置的过程中需要非常细心和耐心.在本节我们将对其进行详细地介绍.主要包括如下几个核心步骤:1.获取支持LVS的内核源代码如果读者需要使用LVS,需 ...

随机推荐

  1. iOS5 ARC,IBOutlets 应该定义strong还是weak

    转自:http://blog.csdn.net/yiyaaixuexi/article/details/7864974 写这篇文章的缘由,是因为我泡在stackoverflow上翻帖子,看到一个名为S ...

  2. Python学习笔记7:函数对象及函数对象作參数

    一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...

  3. C++游戏系列5:不止有一件武器

    很多其它见:C++游戏系列文件夹 知识点:对象数组作为数据成员 改进:每一个角色所持有的武器不仅仅一件,故持有的武器,用了对象数组来表示,当然,也能够是空手. 由此而带来的,还得记录一共同拥有几件武器 ...

  4. 点击按钮,实现两个td值互换

    <body> <table id="table1"> <tr> <td>第一个单元格</td> <td>第二 ...

  5. CCNA2.0笔记_IPv6

    IPv6地址表示方法: 连续的零字段可表示为:: (每个地址只能用一次) 示例: 2031:0000:130F:0000:0000:09C0:876A:130B –可表示为2031:0:130f::9 ...

  6. ant.xml

    <?xml version="1.0"?> <project name="dxcc" default="buildplugins&q ...

  7. ubuntu16.0.4 update git

    Ubuntu 16.04 comes with Git 2.7.x, which is a little old now. As versions 2.8 & 2.9 are not part ...

  8. android动画效果(转载)

    一.动画基本类型: 如下表所示,Android的动画由四种类型组成,即可在xml中定义,也可在代码中定义,如下所示: XML CODE 渐变透明度动画效果 alpha AlphaAnimation 渐 ...

  9. Android--推断文本文件编码

    方法1:利用windows文本文件编码特点. windows下.Unicode.Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,各自是FF.FE(Unicode) ...

  10. 【ask】ghost分区还原win7出现蓝屏,试图加载CLASSPNP驱动时出现

    1.最近由于需要把整个c盘备份了,然后还原在另一台机器上. 2.结果当然时出事了,开始一切如旧,但是机器重启后,蓝屏了. 3.哦,开始立马觉得可能时因为有些软件的驱动是装载d盘了. 4.赶紧把d盘也备 ...