天天看点

ssd安装与测试

CentOS安装caffe-SSD

Cpu版本

1. 下载源码

# 切换到当前用户主目录下

cd $HOME

sudo yum install -y git # 安装git

git clone https://github.com/weiliu89/caffe.git caffe-ssd #下载代码并且重命名为caff-ssd

# 进入caffe-ssd源代码目录

cd caffe-ssd

# checkout出ssd算法源码

git checkout ssd
           

2. 设置环境变量

# 设置环境变量

echo 'export CAFFE_ROOT=$HOME/caffe-ssd' >> ~/.bashrc # 配置$CAFFE_ROOT

# 将/usr/lib/python2.7/dist-packages和$CAFFE_ROOT/python追加到$PYTHONPATH.

echo 'export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages:$CAFFE_ROOT/python'>>~/.bashrc

# 将$CAFFE_ROOT/build/tool命令工具追加到$PATH中

echo 'export PATH=$PATH:$CAFFE_ROOT/build/tool' >> ~/.bashrc

# 使环境变量生效

source ~/.bashrc
           

3. 安装第三方库

sudo yum install -y epel-release \

wget \

zip \

gcc-c++ \

cmake \

protobuf-devel \

leveldb-devel \

snappy-devel \

boost-devel \

hdf5-devel \

gflags-devel \

glog-devel \

lmdb-devel \

openblas-devel \

python-devel \

liblas-devel \

atlas-devel \

libopenblas-dev \

python-matplotlib \

numpy



# 清除缓存包

sudo yum clean all

sudo rm -rf /var/cache/yum
           

centos中opencv-devel默认为2.4.5,会提示"warning: GStreamer: unable to query position of stream (/builddir/build/BUILD/opencv-2.4.5/modules/highgui/src/cap_gstreamer.cpp:660)",国外论坛2013年讨论过,源代码有问题。所以选择手动安装opencv

sudo wget -O /opt/opencv2.4.13.6.zip https://github.com/opencv/opencv/archive/2.4.13.6.zip

sudo unzip /opt/opencv2.4.13.6.zip -d /opt

cd /opt/opencv-2.4.13.6/ && sudo mkdir release/ && cd release

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

sudo make && sudo make install

# glog

sudo wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/google-glog/glog-0.3.3.tar.gz -P /opt

tar zxvf /opt/glog-0.3.3.tar.gz -C /opt

cd /opt/glog-0.3.3

sudo ./configure

sudo make && sudo make install

# gflags

sudo wget https://codeload.github.com/gflags/gflags/zip/v2.0 -O /opt/gflags-2.0.zip

sudo unzip /opt/gflags-2.0.zip -d /opt

cd /opt/gflags-2.0

sudo ./configure

sudo make && sudo make install

# lmdb

git clone https://github.com/LMDB/lmdb /opt/lmdb

cd /opt/lmdb/libraries/liblmdb

sudo make && sudo make instal
           

4. 安装Python以及第三方库

sudo yum install -y python-pip

sudo pip install --upgrade pip # 升级pip到10.0.1版本

# 临时设置阿里云的pip源加快Python库的下载速度

sudo pip install -i https://mirrors.aliyun.com/pypi/simple ansible

# 安装Python第三方库

pip install Cython \

numpy \

scipy  \

scikit-image  \

matplotlib==1.5.3 \

ipython \

h5py \

leveldb \

networkx \

nose \

pandas \

python-dateutil \

protobuf \

python-gflags \

pyyaml \

Pillow \

mkl \

pyldap \

six --user
           

# 也可以按照$CAFFE_ROOT/python/requirements.txt中指定具体版本安装

pip install Cython==0.19.2 \

numpy==1.7.1 \

scipy==0.13.2 \

scikit-image==0.9.3 \

matplotlib==1.3.1 \

ipython==3.0.0 \

h5py==2.3.0 \

leveldb==0.191 \

networkx==1.8.1 \

nose==1.3.0 \

pandas==0.12.0 \

python-dateutil==2.6.0 \

protobuf==2.5.0 \

python-gflags==2.0 \

pyyaml==3.10 \

Pillow==2.3.0 \

six==1.1.0 --user
           

5. 编译caffe环境

# 设置行号

echo 'set number' >> /etc/vimrc

# 进入caffe-ssd目录

cd $CAFFE_ROOT

cp Makefile.config.example Makefile.config

sudo vim Makefile.config

# Makefile.config修改以下内容,已修改

8 CPU_ONLY := 1   # 第8行,将前面#取消,启用只使用CPU

89 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

# 编译caffe

make all

# 编译pycaffe,前提确保$CAFFE_ROOT/python添加到环境变量PYTHONPATH中(详细请看2. 设置环境变量)

make pycaffe

make test

# 可选

make runtest
           

6. 准备模型以及数据集

6.1已训练和预训练模型存放在$CAFFE_ROOT/models\VGGNet\VOC0712

# 如果使用已经训练好的模型数据, caffe\models\VGGNet\VOC0712\SSD_300x300文件夹中包含训练好的模型

VGG_ILSVRC_16_layers_fc_reduced.caffemodel

为预训练模型,用于自建数据的训练

6.2 自建数据集, 存放在目录$CAFFE_ROOT \data\VOCdevkit\mydataset中

6.3 创建LMDB文件, lmdb文件已保存于caffe\data\VOCdevkit\mydataset\lmdb

cd $CAFFE_ROOT # 必须保证在$CAFFE_ROOT中执行

# 在data/VOC0712/中创建trainval.txt, test.txt, and test_name_size.txt ,若出现权限不足的情况使用命令chmod –R 777 $CAFFE_ROOT

./data/VOC0712/create_list.sh

./data/VOC0712/create_data.sh
           

7. 训练/计算

7.1 训练测试模型

#修改训练文件ssd_pascal.py

#gpus = "0,1,2,3" 

#gpulist = gpus.split(",") 

#num_gpus = len(gpulist) 

 

# Divide the mini-batch to different GPUs. 

batch_size = 32 

accum_batch_size = 32 

iter_size = accum_batch_size / batch_size 

solver_mode = P.Solver.CPU 

device_id = 0 

batch_size_per_device = batch_size 

#if num_gpus > 0: 

#  batch_size_per_device = int(math.ceil(float(batch_size) / num_gpus)) 

#  iter_size = int(math.ceil(float(accum_batch_size) / (batch_size_per_device * num_gpus))) 

#  solver_mode = P.Solver.GPU 

#  device_id = int(gpulist[0])

测试文件同理,代码已改

python examples/ssd/ssd_pascal.py # 训练

python examples/ssd/score_ssd_pascal.py #测试
           

ssd_pascal.py训练结果

Intel(R) Xeon(R) CPU E5-2640 v4

训练10次需要约690s

I0109 07:45:55.721973 25691 solver.cpp:243] Iteration 4810, loss = 2.54879

I0109 07:45:55.722214 25691 solver.cpp:259]     Train net output #0: mbox_loss = 2.22876 (* 1 = 2.22876 loss)

I0109 07:45:55.722234 25691 sgd_solver.cpp:138] Iteration 4810, lr = 0.001

I0109 07:57:37.289441 25691 solver.cpp:243] Iteration 4820, loss = 2.40803

I0109 07:57:37.289690 25691 solver.cpp:259]     Train net output #0: mbox_loss = 2.1918 (* 1 = 2.1918 loss)

Tesla p100

训练10次需要约9s

I0107 16:55:13.450426  6626 solver.cpp:243] Iteration 4900, loss = 2.34375

I0107 16:55:13.450665  6626 solver.cpp:259]     Train net output #0: mbox_loss = 2.07247 (* 1 = 2.07247 loss)

I0107 16:55:13.450695  6626 sgd_solver.cpp:138] Iteration 4900, lr = 0.001

I0107 16:55:22.095135  6626 solver.cpp:243] Iteration 4910, loss = 2.38865

I0107 16:55:22.095191  6626 solver.cpp:259]     Train net output #0: mbox_loss = 3.44955 (* 1 = 3.44955 loss)

score_ssd_pascal.py测试3567次训练模型结果

cpu用时125s

I0108 17:47:49.211577 25897 caffe.cpp:155] Finetuning from models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_3567.caffemodel

I0108 17:47:49.451175 25897 net.cpp:761] Ignoring source layer mbox_loss

I0108 17:47:49.455747 25897 caffe.cpp:251] Starting Optimization

I0108 17:47:49.455781 25897 solver.cpp:294] Solving VGG_VOC0712_SSD_300x300_train

I0108 17:47:49.455801 25897 solver.cpp:295] Learning Rate Policy: multistep

I0108 17:47:51.033632 25897 solver.cpp:332] Iteration 0, loss = 6.54596

I0108 17:47:51.033705 25897 solver.cpp:433] Iteration 0, Testing net (#0)

I0108 17:47:51.035653 25897 net.cpp:693] Ignoring source layer mbox_loss

I0108 17:49:54.081306 25897 solver.cpp:546]     Test net output #0: detection_eval = 0.777712

Gpu用时2s

I0108 16:18:46.150401  5171 caffe.cpp:155] Finetuning from models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_3567.caffemodel

I0108 16:18:46.309927  5171 net.cpp:761] Ignoring source layer mbox_loss

I0108 16:18:46.312695  5171 caffe.cpp:251] Starting Optimization

I0108 16:18:46.312707  5171 solver.cpp:294] Solving VGG_VOC0712_SSD_300x300_train

I0108 16:18:46.312712  5171 solver.cpp:295] Learning Rate Policy: multistep

I0108 16:18:46.619501  5171 solver.cpp:332] Iteration 0, loss = 1.89565

I0108 16:18:46.619529  5171 solver.cpp:433] Iteration 0, Testing net (#0)

I0108 16:18:46.632418  5171 net.cpp:693] Ignoring source layer mbox_loss

I0108 16:18:48.109748  5171 solver.cpp:546]     Test net output #0: detection_eval = 0.777712

继续阅读