NO IMAGE

最近畢業設計涉及到了深度學習,所以學習下目前主流的檢測框架SSD,本人筆記本沒有gpu,所以只能安裝CPU版本的ssd了.

github連結:https://github.com/weiliu89/caffe/tree/ssd
SSD是16年ECCV一篇深度學習目標檢測的文章,詳細知識可以百度或者谷歌,本文我們介紹如何實現。本文預設各位的機子已近安裝好opencv, 配置編譯過cpu版本的caffe(沒有也沒關係,下面我會講下).

1. 在home目錄下(也可以其他目錄,當然其他目錄後面就要修改路徑,比較麻煩),獲取SSD的程式碼,下載完成後有一個caffe資料夾.

git clone https://github.com/weiliu89/caffe.git  
cd caffe  
git checkout ssd  

2. 修改caffe的配置檔案.

將已經配置過的cpu版本caffe中的Makefile.config複製到剛才下載的caffe目錄。如果你沒有配置過cpu版本的caffe,可以參考我的另外一篇博文. Ubuntu16.04 caffe的安裝和Py-faster-rcnn在CPU電腦的安裝-2.   http://blog.csdn.net/jx232515/article/details/72384465.下面我直接把Makefile.config需要修改的部分貼在下面了.可以照著修改也行.

去掉註釋CPU_ONLY :=1    
註釋掉CUDA有關的行:    
#CUDA_DIR := /usr/local/cuda    
#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_50,code=compute_50    
去掉註釋WITH_PYTHON_LAYER := 1    
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial    
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/i386-linux-gnu/hdf5/serial /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial    
#TEST_GPUID := 0  

3.編譯caffe

make -j8  
# Make sure to include $CAFFE_ROOT/python to your PYTHONPATH.  
make py  
make test -j8  
# (Optional)  
make runtest -j8 

4.下載預訓練模型 (https://gist.github.com/weiliu89/2ed6e13bfd5b57cf81d6),將它放入caffe/models/VGGNet/目錄下,這樣可以直接使用這個模型跑了ssd.這裡我說下,我網址是打不開,一開始下載了ssdplus版(240000),執行報錯,後來好不容易找到了ssd(120000)版執行,成功.當然ssd(60000)的下了沒有用.我給個連結. 
https://drive.google.com/uc?id=0BzKzrI_SkD1_WVVTSmQxU0dVRzA&export=download https://pan.baidu.com/s/1o8A7DZs

5.下載VOC2007和VOC2012資料集,放到/home/data下。(請注意,這裡改變了目錄)

cd $HOME/data  
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar  
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar  
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar  
# Extract the data.  
tar -xvf VOCtrainval_11-May-2012.tar  
tar -xvf VOCtrainval_06-Nov-2007.tar  
tar -xvf VOCtest_06-Nov-2007.tar 

6.將voc2007資料集轉換格式,用於模型的訓練.

首先進入caffe目錄,可以看到/data/VOC0712/有create_list.sh,create_data.sh .執行就可以轉換資料格式,用於模型訓練.

此處注意create_list.sh和create_data.sh中路徑的修改,修改為自己的路徑,要不會出錯.

# Create the trainval.txt, test.txt, and test_name_size.txt in data/VOC0712/  
./data/VOC0712/create_list.sh  
# You can modify the parameters in create_data.sh if needed.  
# It will create lmdb files for trainval and test with encoded original image:  
#   - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb  
#   - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb  
# and make soft links at examples/VOC0712/  
./data/VOC0712/create_data.sh  

此時發現執行create_data.sh時還是出錯了,報錯為:AttributeError: ‘module’ object has no attribute ‘LabelMap’,原因是沒有新增環境變數,

解決方式:其中$CAFFE_ROOT是本caffe的根目錄,注意換成自己的.

echo "export PYTHONPATH=$home/lsq/caffe/python" >> ~/.profile    
source ~/.profile    
echo $PYTHONPATH #檢查環境變數的值  

7.訓練模型(一般CPU電腦是會宕機的,我的就是)

因為我們用的是cpu,首先修改examples/ssd/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])  

然後訓練.(Linux執行Python檔案就是這樣)

  1. python examples/ssd/ssd_pascal.py  

如果不想花費時間訓練,可以在這裡下載訓練好的模型
https://drive.google.com/uc?id=0BzKzrI_SkD1_WVVTSmQxU0dVRzA&export=download
下載後解壓,將其中的VGGNet資料夾複製到caffe/models下面,呀,你發現caffe/models下面已經有VGGNet資料夾了,這是之前我們做訓練時建立的,沒訓練就沒有了.ok,就可以將VGGNet複製到此處了。

8.測試

1)在圖片測試集上測試

python examples/ssd/score_ssd_pascal.py  

這時你會發現報錯,說cpu-only的版本不能用gpu,ok,開啟score_ssd_pascal.py修改為
solver_mode = P.Solver.CPU

2)在視訊上測試

python examples/ssd/ssd_pascal_video.py 

當然,直接跑是他自帶的視訊,想跑自己的程式碼的話,要先用vim開啟該檔案,定位到51行,修改視訊路徑為已有本地視訊,這樣就可以暢快的跑自己的視訊

 3)使用攝像頭測試

 python examples/ssd/ssd_pascal_webcam.py.

下一篇講解如何製作cov2007資料集格式,用於自己的資料訓練模型.