1. 程式人生 > >[計算機視覺][神經網路與深度學習]SSD安裝及其訓練教程

[計算機視覺][神經網路與深度學習]SSD安裝及其訓練教程

  •    git clone https://github.com/weiliu89/caffe.git
       cd caffe
       git checkout ssd(出現“分支”則說明copy-check成功)
    • 1
    • 2
    • 3
    • 進入下載好的caffe目錄,複製配置檔案
       cd /home/usrname/caffe
       cp Makefile.config.example Makefile.config
    • 1
    • 2
    • 1
    • 2
    • 編譯caffe三部曲
       make all  -j16  //-j16根據本機的處理器配置,16是16核處理器的意思
       make test -j16
       make runtest -j16(這一步不是必須的)
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 額外編譯,根據需要(因為SSD利用python完成,需編譯pycaffe)
       make pycaffe -j16

    準備工作

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

     cd ..
       mkdir data
       cd data/
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 下載資料集
       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
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 資料集解壓
       tar -xvf VOCtrainval_11-May-2012.tar
       tar -xvf VOCtrainval_06-Nov-2007.tar
       tar -xvf VOCtest_06-Nov-2007.tar
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 將圖片轉化為LMDB檔案,用於訓練
       cd ..
       cd caffe/
       ./data/VOC0712/create_list.sh  
       ./data/VOC0712/create_data.sh
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4
    • 這裡用的指令碼實現批處理,可能會出現:no module named caffe等錯誤,這是由於caffe的Python環境變數未配置好,可按照下面方法解決:
       echo "export PYTHONPATH=/home/usrname/caffe/python" >> ~/.profile  
       source ~/.profile  
       echo $PYTHONPATH #檢查環境變數的值

    訓練模型

    • 在下載的caffe根目錄執行如下命令訓練,在examples/ssd下存在幾個.py檔案,訓練的時間較長,迭代60000次,博主訓練了一天!
       python examples/ssd/ssd_pascal.py
    • 1
    • 1

    實驗效果

    (1)在圖片測試集上測試

       python examples/ssd/score_ssd_pascal.py
    • 1
    • 1

    利用它跑了一遍資料集,得出準確率可以達到百分之70多

    (2)在視訊上測試

       python examples/ssd/ssd_pascal_video.py 
    • 1
    • 1

    利用師兄的行人視訊做了測試,實時性高,但是漏檢率蠻嚴重的,這是不可避免的 
    這裡寫圖片描述 
    這裡寫圖片描述 
    當然,直接跑是他自帶的視訊,想跑自己的程式碼的話,要先用vim開啟該檔案,定位到51行,修改視訊路徑為已有本地視訊,這樣就可以暢快的跑自己的視訊

    (3)在攝像頭上測試

       python examples/ssd/ssd_pascal_webcam.py
    • 1
    • 1

    博主移植到桌上型電腦上出現了問題,還沒有改好bug,改好了會分享給大家

    後期工作

    • 研究SSD的python原始碼,用來訓練和檢測交通標誌\文字檢測,人臉檢測等等

    作者給定的預訓練模型

    如果沒有好的機器配置或者省事一些的,可以使用作者給出的訓練好的模型:

    • Models trained on VOC0712:SSD300 SSD500
    • 還有其他的模型,這裡就不一一列舉,感興趣的可以去官方主頁看,連結已在前面給出

    最近一直在搞object detection玩,之前用的是faster-rcnn,準確率方面73.2%,效果還不錯,但是識別速度有點欠缺,我用的GPU是GTX980ti, 識別速度大概是15fps.最近發現SSD(single shot multibox detector) 這篇論文效果和速度都不錯,我自己實驗了一下,速度確實比faster-rcnn快不少。下面分兩部分來介紹。第一部分介紹SSD的安裝,第二部分介紹如何基於SSD訓練自己的資料集。

    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    第二部分 訓練自己的資料集

    caffe/models/VGGNet/
    • 1
    • 1

    下載VOC2007和VOC2012資料集, 放在/data目錄下:

    cd 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
    
    tar -xvf VOCtrainval_11-May-2012.tar
    tar -xvf VOCtrainval_06-Nov-2007.tar
    tar -xvf VOCtest_06-Nov-2007.tar
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    建立lmdb格式的資料:

    cd caffe
    ./data/VOC0712/create_list.sh
    # 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
    ./data/VOC0712/create_data.sh
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    訓練和測試

    python examples/ssd/ssd_pascal.py
    
    • 1
    • 2
    • 1
    • 2

    論文中,作者已經預訓練好模型,下載連結:http://www.cs.unc.edu/%7Ewliu/projects/SSD/models_VGGNet_VOC0712_SSD_300x300.tar.gz,我們不必自己再去訓練, 下載完成後放入指定的資料夾下。 
    測試時,我們使用/example/ssd/目錄裡的ssd_detect.ipynb,執行這個檔案,需要安裝ipython及ipython-notebook, 或者直接把裡面的程式碼拷貝出來,寫到一個新的Python檔案裡,比如命名ssd_detector.py.

    OK, 下面修改一系列檔案來訓練自己的資料集 
    兩種方案, 第一:保持原來的檔案目錄結構及檔名不變, 只替換裡面的資料。第二:重新新建一個與之前類似的目錄結構,改成自己命名的資料夾,第二種方法,有一定的風險性,需要修改程式裡涉及資料路徑的程式碼。在之前講解的faster-rcnnan那篇部落格中, 我們採用第一種方案。本次我們採用第二種方案。 
    在/data目錄下建立一個自己的資料夾:

    cd /data
    mkdir mydataset
    • 1
    • 2
    • 1
    • 2

    把/data/VOC0712目錄下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 這三個檔案拷貝到/mydataset下:

    cp data/create* ./mydataset
    cp data/label* ./mydataset
    • 1
    • 2
    • 1
    • 2

    labelmap_voc.prototxt, 此檔案定義label。

    在/data/VOCdevkit目錄下建立mydataset, 並放入自己的資料集:

    cd data/VOCdevkit
    mkdir mydataset
    cd mydataset
    mkdir Annotations
    mkdir ImageSets
    mkdir JPEGImages
    cd ImageSets
    mkdir Layout
    mkdir Main
    mkdir Segmentation
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其中Annotations中存放一些列XML檔案,包含object的bbox,name等; 
    ImageSets中三個子目錄下均存放train.txt, val.txt, trainval.txt, test.txt這幾個檔案,檔案內容為圖片的檔名(不帶字尾); 
    JPEGImages存放所有的圖片;

    在/examples下建立mydataset資料夾:

    mkdir mydataset
    • 1
    • 1

    資料夾記憶體放生成的lmdb檔案。

    上述資料夾建立好後, 開始生成lmdb檔案, 在建立之前需要修改相關路徑:

    ./data/mydataset/create_list.sh
    ./data/mydataset/create_data.sh
    • 1
    • 2
    • 1
    • 2

    此時,在examples/mydataset/資料夾下可以看到兩個子資料夾, mydataset_trainval_lmdb, mydataset_test_lmdb;裡面均包含data.dmb和lock.dmb;

    到此為止,我們的資料集就做好了。接下來就開始訓練了。訓練程式為/examples/ssd/ssd_pascal.py,執行之前,我們需要修改相關路徑程式碼:

    cd /examples/ssd
    vim sd_pascal.py, 修改如下:
    57行: train_data路徑;
    59行:test_data路徑;
    197-203行:save_dir、snapshot_dir、job_dir、output_result_dir路徑;
    216-220行: name_size_file、label_map_file路徑;
    223行:num_classes 修改為1 + 類別數
    315行:num_test_image:測試集圖片數目
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    另外, 如果你只有一個GPU, 需要修改285行: 
    gpus=”0,1,2,3” ===> 改為”0” 
    否則,訓練的時候會出錯。 
    修改完後執行

    python ./examples/ssd/ssd_pascal.py 
    • 1
    • 1

    訓練完, 修改ssd_detector.py中模型路徑, 任意找一張圖片識別,看看效果怎麼樣。

  • 相關推薦

    [計算機視覺][神經網路深度學習]SSD安裝及其訓練教程

    git clone https://github.com/weiliu89/caffe.git cd caffe git checkout ssd(出現“分支”則說明copy-check成功)123進入下載好的caffe目錄,複製配置檔案 cd /home/usrname/caffe

    [計算機視覺][神經網路深度學習]Faster R-CNN配置及其訓練教程

    Faster R-CNN教程 最後更新日期:2016年4月29日 本教程主要基於python版本的faster R-CNN,因為python layer的使用,這個版本會比matlab的版本速度慢10%,但是準確率應該是差不多的。 目前已經實現的有兩種方式: Alternative trainingAp

    神經網路深度學習】【計算機視覺SSD

    背景介紹: 基於“Proposal + Classification” 的 Object Detection 的方法,R-CNN 系列(R-CNN、SPPnet、Fast R-CNN 以及 Faster R-CNN),取得了非常好的結果,但是在速度方面離實時效果還比較遠在提高 mAP 的同時兼顧速度,逐

    計算機視覺】【神經網路深度學習】YOLO v2 detection訓練自己的資料

    轉自:http://blog.csdn.net/hysteric314/article/details/54097845 說明 這篇文章是訓練YOLO v2過程中的經驗總結,我使用YOLO v2訓練一組自己的資料,訓練後的model,在閾值為.25的情況下,Reca

    神經網路深度學習】【計算機視覺】Fast R-CNN

    先回歸一下: R-CNN ,SPP-net R-CNN和SPP-net在訓練時pipeline是隔離的:提取proposal,CNN提取特徵,SVM分類,bbox regression。 Fast R-CNN 兩大主要貢獻點 : 1 實現大部分end-to-end訓練(提proposal階段除外):

    小白學《神經網路深度學習》筆記之一-計算機的潛意識:淺談神經網路-從神經元到深度學習

    神經網路是一門重要的機器學習技術。它是目前最為火熱的研究方向--深度學習的基礎。學習神經網路不僅可以讓你掌握一門強大的機器學習方法,同時也可以更好地幫助你理解深度學習技術。 本文以一種簡單的,循序的方式講解神經網路。適合對神經網路瞭解不多的同學。本文對閱讀沒有一定的前提要

    神經網路深度學習課程筆記(第三、四周)

    接著學習吳恩達老師第三、四周的課程。(圖片均來自吳恩達老師課件)   第三週 1. 普通的淺層網路                        

    神經網路深度學習課程筆記(第一、二週)

       之前結束了吳恩達老師的機器學習的15節課,雖然看得很艱辛,但是也算是對於機器學習的理論有了一個入門,很多的東西需要不斷的思考以及總結。現在開始深度學習的學習,仍然做課程筆記,記錄自己的一些收穫以及思考。   第一週 1. ReLU (Rectified

    深度學習介紹(下)【Coursera deeplearning.ai 神經網路深度學習

    1. shallow NN 淺層神經網路 2. 為什麼需要activation function? 如下圖所示,如果不用啟用函式,那麼我們一直都在做線性運算,對於複雜問題沒有意義。linear 其實也算一類啟用函式,但是一般只用在機器學習的迴歸問題,例如預測房價等。 3.

    分享《神經網路深度學習(美)Michael Nielsen 著》中文版PDF+英文版PDF+原始碼

    下載:https://pan.baidu.com/s/18_Y7fJMaKwFRKKuGjYIreg 更多資料分享:http://blog.51cto.com/3215120 《神經網路與深度學習(美)Michael Nielsen 著》中文版PDF+英文版PDF+原始碼中文版PDF,206頁,帶書籤目錄

    deeplearning.ai神經網路深度學習 第一章notes

    神經網路與深度學習第一章 目錄 什麼是神經網路 用神經網路進行監督學習 為什麼深度學習會興起   什麼是神經網路 1.1定義 它是一個源於人腦工作機理的強大演算法   1.2單元神經網路   我們首先看一個例子,這個例子是一個房價評估問題。我們現在有一些資料,是房子的

    神經網路深度學習(美)MichaelNielsen著》中英文版PDF+原始碼+吳岸城版PDF

    資源連結:https://pan.baidu.com/s/1-v89VftxGHdzd4WAp2n6xQ《神經網路與深度學習(美)Michael Nielsen 著》中文版PDF+英文版PDF+原始碼以及《神經網路與深度學習 》(吳岸城版)中文版PDF,206頁,帶書籤目錄;英文版PDF,292頁,帶書籤目錄

    吳恩達《神經網路深度學習》課程筆記歸納(二)-- 神經網路基礎之邏輯迴歸

    上節課我們主要對深度學習(Deep Learning)的概念做了簡要的概述。我們先從房價預測的例子出發,建立了標準的神經網路(Neural Network)模型結構。然後從監督式學習入手,介紹了Standard NN,CNN和RNN三種不同的神經網路模型。接著介紹了兩種不

    吳恩達《神經網路深度學習》課程筆記歸納(三)-- 神經網路基礎之Python向量化

    上節課我們主要介紹了邏輯迴歸,以輸出概率的形式來處理二分類問題。我們介紹了邏輯迴歸的Cost function表示式,並使用梯度下降演算法來計算最小化Cost function時對應的引數w和b。通過計算圖的方式來講述了神經網路的正向傳播和反向傳播兩個過程。本節課我們將來

    Coursera 吳恩達《神經網路深度學習》第三週程式設計作業

    # Package imports import numpy as np import matplotlib.pyplot as plt from testCases import * import sklearn import sklearn.datasets impo

    04.神經網路深度學習-第四周-深層神經網路

    1. 通常情況下,我們使用L表示神經網路的層數,n表示神經網路的各個網路層的神經元個數,使用a=g(z)表示各個層所用的啟用函式,同理,z中的引數使用w和b表示。具體寫法如圖: 2. 前向反饋的表示方法 所有樣本的前向反饋的表示方法 3. 我們在編碼深度神經

    演算法工程師之路——Deeplearning.ai神經網路深度學習篇Week1

    寫在前面——一點碎碎念 天將降大任於是人也,必先苦其心志,勞其筋骨,餓其體膚,空乏其身,行拂亂其所為。——《孟子•告子下》       塵埃落定,在好好學(wan)習(shua)三年之後,我成功僥倖收穫了的UESTC MSE的Offer,心裡萬分激動,想著B

    Note——Neural Network and Deep Learning (1)[神經網路深度學習學習筆記(1)]

    一、初學神經網路的體會 正如書中作者說的神經網路可以被稱作最美的程式設計正規化之一,神經網路將我們需要解決的複雜問題,比如手寫字型分類,簡化成一個個簡單的步驟,而本人無需瞭解內部的具體結構引數變化等。關於神經網路已經有很多實用的庫,使用這些庫可以很快的解決問題。但是不滿

    演算法工程師之路——Deeplearning.ai神經網路深度學習篇Week3

    上一週的回顧       過去的一週真的發生了很多意想不到、驚心動魄的事情,從大學四年最後一次體測到唐獎競爭,從小IG力挽狂瀾到RNG遺憾折戟,生活可謂是充滿了無數的可能。也正是因為這樣,我們的生活才不至於那麼乏味,像工廠流水線生產一樣標準化、制度化,而隨時都可

    演算法工程師之路——Deeplearning.ai神經網路深度學習篇Week4

    上一週的回顧       剛剛過去了10月最後完整的一週,馬上就要撲向11月的懷抱了。很開心能夠在每週總結自己的所學所得,整理為部落格,這樣也是一種讓人充滿了成就感的事情。在上一週我開始學著逐漸運用之前提到的多執行緒學習法進行知識的擴充,收到了不錯的效益,一方面