linux下安装mmdetection的步骤
Installation
参考官方安装文档
Requirements
- Linux (tested on Ubuntu 16.04 and CentOS 7.2)
- Python 3.4+
- PyTorch 1.0
- Cython
- mmcv >= 0.2.2
Install mmdetection
a. Install PyTorch 1.0 and torchvision following the official instructions.
b. Clone the mmdetection repository.
git clone https://github.com/open-mmlab/mmdetection.git
c. Compile cuda extensions.
cd mmdetection
pip install cython # or "conda install cython" if you prefer conda
./compile.sh # or "PYTHON=python3 ./compile.sh" if you use system python3 without virtual environments
d. Install mmdetection (other dependencies will be installed automatically).
python(3) setup.py install # add --user if you want to install it locally
# or "pip install ."
Note: You need to run the last step each time you pull updates from github. The git commit id will be written to the version number and also saved in trained models.
注意以下问题:
-
编译模块时需gcc版本为4.9以上。
gcc更新步骤及其中的一些问题见下方。
-
nvcc需正确安装
Linux升级安装GCC
转载自IT笔录
各发行版本Linux中,其自带的gcc
安装源版本都比较旧,我所使用CentOS 6
系统中,gcc
版本只有4.4.7
。最近要安装几个软件要求gcc 4.8+
,无奈只能手动升级gcc
。
1. 下载最新版本gcc
gcc
当前最新版本是5.2
,下面是我找到的两个下载镜像,下载速度还可以,都可以使用:
wget http://gcc.parentingamerica.com/releases/gcc-5.2.0/gcc-5.2.0.tar.bz2
// 或
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.bz2
上面两个镜像分别位于加拿大和日本,由于gcc
本身比较大(100MB左右),所以下载会需要一些时间。如果下载很慢,也可以到gcc官网查找较快的下载镜像。
2. 解压下载文件
gcc
安装文件下载完成后,执行以下命令解压文件:
tar -xf gcc-5.2.0.tar.bz2
3. 下载gcc
依赖文件和库
解压完成后,执行以下命令进入工作目录:
cd gcc-5.2.0
执行download_prerequisites
脚本,下载gcc
依赖文件和库:
./contrib/download_prerequisites
download_prerequisites
脚本,会下载安装gcc
所需的mpfr
、gmp
和mpc
文件。
4. 配置安装gcc
建立一个输出目录,编译时所有生成的中间文件都放到该目录下:
mkdir gcc-temp
工作目录切换至输出目录,并在其中执行配置和安装:
cd gcc-temp
执行configure
配置安装文件:
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
配置完成后,执行以下命令,编译gcc
:
make
注意:编译gcc
时间较长,我用了近三个小才编译完成。
编译完成后,安装gcc
:
make install
安装完成后还需要替换系统默认的gcc
,执行以下命令,查找5.2
版本的安装文件:
ls /usr/local/bin | grep gcc
输出如下:
gcc
gcc-ar
gcc-nm
gcc-ranlib
x86_64-unknown-linux-gnu-gcc
x86_64-unknown-linux-gnu-gcc-5.2.0 //就是这个
x86_64-unknown-linux-gnu-gcc-ar
x86_64-unknown-linux-gnu-gcc-nm
x86_64-unknown-linux-gnu-gcc-ranlib
执行升级命令:
/usr/sbin/update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/x86_64-unknown-linux-gnu-gcc-5.2.0 52
5. 验证安装
执行以下命令查看gcc
版本:
gcc -v
执行以下命令查看g++
版本:
g++ -v
或使用which gcc
查看gcc
安装目录,在安装目录下执行-v命令。例如,安装目录为/usr/local/bin/gcc
:
/usr/local/bin/gcc -v
如果输出中有类似以下行,说明安装成功:
gcc 版本 5.2.0 (GCC)
解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found 的问题
转载自IT笔录
源码编译升级安装了gcc
后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version
GLIBCXX_3.4.21’ not found的问题。这是因为升级
gcc时,生成的动态库没有替换老版本
gcc的动态库导致的,将
gcc`最新版本的动态库替换系统中老版本的动态库即可解决。
1. 问题原因分析
为了安装最新版本的Node.js
(最新版本的Node.js
使用了C++ 11
中,而C++ 11
需要code>gcc 4.8+才能支持),将gcc
升级到了当前最新版本v 5.2.0
。升级后,成功编译安装了新版本的Node.js
(v 4.2.1
),但运行时程序时出现了以下错误:
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
输出结果如下:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
从以上输出可以看出,gcc
的动态库还是旧版本的。说明出现这些问题,是因为升级gcc
时,生成的动态库没有替换老版本gcc
的动态库。
2. 问题处理
执行以下命令,查找编译gcc
时生成的最新动态库:
find / -name "libstdc++.so*"
输出如下:
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 //最新动态库
……
/home/gcc-5.2.0/gcc-temp
是升级gcc时的输出目录。
将上面的最新动态库libstdc++.so.6.0.21
复制到/usr/lib64
目录下:
cp /home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
复制后,修改系统默认动态库的指向,即:重建默认库的软连接。
切换工作目录至/usr/lib64
:
cd /usr/lib64
删除原来软连接:
rm -rf libstdc++.so.6
将默认库的软连接指向最新动态库:
ln -s libstdc++.so.6.0.21 libstdc++.so.6
默认动态库升级完成。重新运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
现在输出如下:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH