编译CTPN、crnn、sceneReco深度学习图片文字定位识别遇到的坑

编译CTPN、crnn、sceneReco深度学习图片文字定位识别遇到的坑

图片文字定位:https://github.com/tianzhi0549/CTPN
图片文字识别: https://github.com/bgshih/crnn
综合两者并支持中文:https://github.com/bear63/sceneReco

硬件要求

  1. 我使用的是Ubuntu 14.04.5 LTS(因为crnn作者的这句话The software has only been tested on Ubuntu 14.04 (x64). CUDA-enabled GPUs are required. )其它版本的Ubuntu按理说也是可以的,不过遇到的坑可能会有些不一样.
  2. 编译CTPN可以没有显卡(没有显卡至少需要5G的内存,虚拟机也可以)
  3. 编译crnn和sceneReco项目必须要有能支持cuda的NVIDIA显卡
  4. 虚拟机中无法识别显卡驱动,所以虚拟机中可以编译运行CTPN,无法编译crnn和sceneReco

首先需要安装Nvidia显卡驱动和cuda,cudnn(我选择的是cuda7.0,cuDNN V3,因为CTPN的README.md有说明,作者是基于这个来测试的)

但是,如果想顺利编译运行sceneReco的话,我强烈建议选择更高版本的的cuda(但是此时的cuDNN会不支持,因为编译caffe会出错,同时需要更多的显存,按照作者的说法是至少5G显存),因为编译sceneReco需要依赖pytorch,而pytorch管方只支持cuda7.5及以上的版本,我最开始使用的cuda7.5测试的,所以能安装pytorch,但是为了看看使用cuDNN的效果(作者的说法是使用cuDNN后,只需要1.5G显存),降到了cuda7.0

cuda和cuDNN下载网址(https://developer.nvidia.com/)
cuda下载
cudnn下载

下载cudnn需要注册账号
我最开始尝试使用cuda7.5和cuDNN6.0,不过编译caffe会报错(https://github.com/tianzhi0549/CTPN/issues/75)
而且CTPN作者说了这句话(Note: To use CUDNN, you need to download CUDNN from NVIDIA’s official website, and install it >in advance. The CUDNN version we use is 3.0.)
根据(https://github.com/tianzhi0549/CTPN/issues/8) 来说,不用cuDNN貌似影响也不是很大,只是会消耗更多的GPU Memory

我这里是事先下好cuda7.0,cuDNN V3的离线包,再进行安装的
安装cuda(参考官方教程)

sudo dpkg -i cuda-repo-ubuntu1404-7-0-local_7.0-28_amd64.deb
sudo apt-get update
sudo apt-get install cuda

安装cudnn

tar xvzf cudnn-7.0-linux-x64-v3.0.8-prod.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

编译运行CTPN遇到的坑:

错误1

编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
解决方案:
sudo apt-get install python-numpy

错误2

运行python tools/demo.py时
ImportError: No module named cv2
apt-get install python-opencv

错误3

运行python tools/demo.py时
ImportError: No module named skimage.io
sudo apt-get install python-skimage

错误4

运行python tools/demo.py时
ImportError: No module named google.protobuf.internal
pip install protobuf
如果没有安装pip
sudo apt-get install python-pip

错误5

运行python tools/demo.py时
ImportError: No module named yaml
sudo apt-get install python-yaml

编译crnn遇到的坑

安装Torch遇到的坑

官方教程http://torch.ch/docs/getting-started.html
我使用TORCH_LUA_VERSION=LUA50 ./install.sh安装的Torch,

经过我的测试:
使用TORCH_LUA_VERSION=LUA52 ./install.shTORCH_LUA_VERSION=LUA51 ./install.sh安装Torch时,都可以成功编译crnn,但是demo无法运行起来,应该是老版本的thpp无法兼容新版Lua的问题.

安装依赖库遇到的坑

这里由下面的坑,使用crnn提供的install_all.sh脚本一键安装时,thpp和fblualib会安装失败,所以这里建议分开来安装folly,fbthrift,thpp,fblualib.
由于我的系统是Ubuntu14,所以根据crnn提供的安装脚本(https://github.com/bgshih/crnn/blob/master/install_all.sh) 来看,我需要安装以下版本的依赖库:

git clone -b v0.35.0  --depth 1 https://github.com/facebook/folly
git clone -b v0.24.0  --depth 1 https://github.com/facebook/fbthrift
git clone -b v1.0 https://github.com/facebook/thpp
git clone -b v1.0 https://github.com/facebook/fblualib

以及以下库:

sudo apt-get update && sudo apt-get install -y \
    git \
    curl \
    wget \
    g++ \
    automake \
    autoconf \
    autoconf-archive \
    libtool \
    libboost-all-dev \
    libevent-dev \
    libdouble-conversion-dev \
    libgoogle-glog-dev \
    libgflags-dev \
    liblz4-dev \
    liblzma-dev \
    libsnappy-dev \
    make \
    zlib1g-dev \
    binutils-dev \
    libjemalloc-dev \
    $extra_packages \
    flex \
    bison \
    libkrb5-dev \
    libsasl2-dev \
    libnuma-dev \
    pkg-config \
    libssl-dev \
    libedit-dev \
    libmatio-dev \
    libpython-dev \
    libpython3-dev \
    python-numpy

由于我的是Ubuntu14,所以上面的$extra_packages值为libiberty-dev
即:apt-get install -y libiberty-dev

安装folly和fbthrift的时候没有出现什么问题,直接调用folly和fbthrift的安装脚本即可.

安装thpp遇到的问题

注意由于上面我下载的是v1.0(git clone -b v1.0 https://github.com/facebook/thpp)的thpp,而这个版本的thpp的/thpp/thpp/build.sh安装脚本有点小问题,如下(最新版的thpp已经修复,不过使用最新版的会遇到其它问题,我没找到解决方案):

#!/bin/bash -e
#
#  Copyright (c) 2014, Facebook, Inc.
#  All rights reserved.
#
#  This source code is licensed under the BSD-style license found in the
#  LICENSE file in the root directory of this source tree. An additional grant
#  of patent rights can be found in the PATENTS file in the same directory.
#
#
set -o pipefail

if [[ ! -r ./Tensor.h ]]; then
  echo "Please run from the thpp subdirectory." >&2
  exit 1
fi

rm -rf gtest-1.7.0 gtest-1.7.0.zip
curl -JLO https://googletest.googlecode.com/files/gtest-1.7.0.zip
if [[ $(sha1sum -b gtest-1.7.0.zip | cut -d' ' -f1) != \
      'f85f6d2481e2c6c4a18539e391aa4ea8ab0394af' ]]; then
  echo "Invalid gtest-1.7.0.zip file" >&2
  exit 1
fi
unzip gtest-1.7.0.zip

# Build in a separate directory
mkdir -p build
cd build

# Configure
cmake ..

# Make
make

# Run tests
ctest

# Install
sudo make install

注意:这里是从(https://googletest.googlecode.com/files/gtest-1.7.0.zip) 上下载的googletest,实际上这个地址的googletest已经不存在了,我在网上找了一个,下载地址在这里,使用sha1sum -b gtest-1.7.0.zip命令测试以后,等于'f85f6d2481e2c6c4a18539e391aa4ea8ab0394af',与上述shell脚本给出的值一致,说明是能用的.
接下来就不能直接调用build.sh安装了,我们只需要按照build.sh脚本中给出的步骤,手动安装thpp即可.

安装fblualib也只需要调用安装脚本即可
最后记得安装LMDB:apt-get install liblmdb-dev

新版Torch接口变动

编译的过程中可能会遇到以下问题:

这是由于新版的Torch7改了某些方法增加了参数(THTensor_方法)导致的:
解决方案如下:
https://github.com/facebook/thpp/commit/d9f982c68d7522db9e77e50d135eaa86d84bab85#diff-22577c98d557ea9eca089e8e84d7f98d
没错:就是修改thpp/detail/TensorGeneric.h文件,把缺少的参数补上整数1即可

运行th demo.lua

错误:module ‘bit’ not found:No LuaRocks module found for bit
(https://github.com/deepmind/torch-hdf5/issues/57)

luarocks install luabitop
ldconfig

运行sceneReco的demo

ImportError: No module named caffe
sceneReco/CTPN/目录缺少caffe,在该目录放入CTPN项目中的caffe,并编译(参考CTPN的caffe的编译)
也可以使用最新版本的caffe,不过会遇到这个问题(https://github.com/bear63/sceneReco/issues/20)
CTPN作者的说法是:

If you may want to use other Caffe instead of the one we ship for some reasons, you need to migrate the following layers into the Caffe.
- Reverse
- Transpose
- Lstm

ImportError: No module named torch
原因:(https://github.com/bear63/sceneReco/issues/26)
由于我的电脑运行pip install --upgrade torchvision会失败(https://github.com/pytorch/pytorch/issues/566)
所以这里参考官方安装教程(http://pytorch.org)
根据自己的配置进行选择,我选择的是Linux->pip->Python2.7->cuda7.5所以官方生成的安装命令如下

pip install http://download.pytorch.org/whl/cu75/torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl 
pip install torchvision   

# if the above command does not work, then you have python 2.7 UCS2, use this command 
pip install http://download.pytorch.org/whl/cu75/torch-0.3.0.post4-cp27-cp27m-linux_x86_64.whl

由于第一句命令下载速度实在太慢,建议先用迅雷下载好这个文件(http://download.pytorch.org/whl/cu75/torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl) 注意Python版本和cuda的版本,的然后依次执行

pip install torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl  
pip install torchvision 

注意:这里如果是先用迅雷先下好的话,不要修改文件名,否者安装的时候会报错,参考(https://www.cnblogs.com/nice-forever/p/5371906.html)

ImportError: No module named lmdb
sudo pip install lmdb

ImportError: No module named mahotas
sudo pip install mahotas

ImportError: No module named cv2
sudo pip install opencv-python

ImportError: No module named skimage.io
sudo pip install scikit-image

ImportError: No module named google.protobuf.internal
pip install protobuf

ImportError: No module named _caffe
make pycaffe

RuntimeError: dimension out of range (expected to be in range of [-2, 1], but got 2)
解决方案(https://github.com/bear63/sceneReco/issues/24)

你可能感兴趣的:(机器学习)