天天看點

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

目标檢測是AI的一項重要應用,通過目标檢測模型能在圖像中把人、動物、汽車、飛機等目标物體檢測出來,甚至還能将物體的輪廓描繪出來,就像下面這張圖,是不是很酷炫呢,嘿嘿

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

在動手訓練自己的目标檢測模型之前,建議先了解一下目标檢測模型的原理(見文章:大話目标檢測經典模型RCNN、Fast RCNN、Faster RCNN,以及Mark R-CNN),這樣才會更加清楚模型的訓練過程。

本文将在我們前面搭建好的AI實戰基礎環境上(見文章:AI基礎環境搭建),基于SSD算法,介紹如何使用自己的資料訓練目标檢測模型。SSD,全稱Single Shot MultiBox Detector(單鏡頭多盒檢測器),是Wei Liu在ECCV 2016上提出的一種目标檢測算法,是目前流行的主要檢測架構之一。

本案例要做的識别便是在圖像中識别出熊貓,可愛吧,呵呵

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

下面按照以下過程介紹如何使用自己的資料訓練目标檢測模型:

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

1、安裝标注工具

要使用自己的資料來訓練模型,首先得先作資料标注,也就是先要告訴機器圖像裡面有什麼物體、物體在位置在哪裡,有了這些資訊後才能來訓練模型。

(1)标注資料檔案

目前流行的資料标注檔案格式主要有VOC_2007、VOC_2012,該文本格式來源于Pascal VOC标準資料集,這是衡量圖像分類識别能力的重要基準之一。本文采用VOC_2007資料格式檔案,以xml格式存儲,如下:

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

其中重要的資訊有:

filename:圖檔的檔案名

name:标注的物體名稱

xmin、ymin、xmax、ymax:物體位置的左上角、右下角坐标

(2)安裝标注工具

如果要标注的圖像有很多,那就需要一張一張手動去計算位置資訊,制作xml檔案,這樣的效率就太低了。

所幸,有一位大神開源了一個資料标注工具labelImg,可以通過可視化的操作界面進行畫框标注,就能自動生成VOC格式的xml檔案了。該工具是基于Python語言編寫的,這樣就支援在Windows、Linux的跨平台運作,實在是良心之作啊。安裝方式如下:

a. 下載下傳源代碼

通過通路labelImg的github頁面(https://github.com/tzutalin/labelImg),下載下傳源代碼。可通過git進行clone,也可以直接下載下傳成zip壓縮格式的檔案。

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

在本案例中直接下載下傳成zip檔案。

b.安裝編譯

解壓labelImg的zip檔案,得到LabelImg-master檔案夾。

labelImg的界面是使用PyQt編寫的,由于我們搭建的基礎環境使用了最新版本的anaconda已經自帶了PyQt5,在python3的環境下,隻需再安裝lxml即可,進入LabelImg-master目錄進行編譯,代碼如下:

#激活虛拟環境source activate tensorflow#在python3環境中安裝PyQt5(anaconda已自帶),如果是在python2環境下,則要安裝PyQt4,PyQt4的安裝方式如下#conda install -c anaconda pyqt=4.11.4#安裝xmlconda install xml#編譯make qt5py3#打開标注工具python3 labelImg.py
           

成功打開labelImg标注工具的界面如下:

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

2、标注資料

成功安裝了标注工具後,現在就來開始标注資料了。

(1)建立檔案夾

按照VOC資料集的要求,建立以下檔案夾

Annotations:用于存放标注後的xml檔案

ImageSets/Main:用于存放訓練集、測試集、驗收集的檔案清單

JPEGImages:用于存放原始圖像

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

(2)标注資料

将熊貓圖檔集放在JPEGImages檔案夾裡面(熊貓的美照請找度娘要哦~),注意圖檔的格式必須是jpg格式的。

打開labelImg标注工具,然後點選左側的工具欄“Open Dir”按鈕,選擇剛才放熊貓的JPEGImages檔案夾。這時,主界面将會自動加載第一張熊貓照片。

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

點選左側工具欄的“Create RectBox”按鈕,然後在主界面上點選拉個矩形框,将熊貓圈出來。圈定後,将會彈出一個對話框,用于輸入标注物體的名稱,輸入panda作為熊貓的名稱。

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

然後點選左側工具欄的“Save”按鈕,選擇剛才建立的Annotations作為儲存目錄,系統将自動生成voc_2007格式的xml檔案儲存起來。這樣就完成了一張熊貓照片的物體标注了。

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

接下來點選左側工具欄的“Next Image”進入下一張圖像,按照以上步驟,畫框、輸入名稱、儲存,如此反複,直到把所有照片都标注好,儲存起來。

(3)劃分訓練集、測試集、驗證集

完成所有熊貓照片的标注後,還要将資料集劃分下訓練集、測試集和驗證集。

在github上下載下傳一個自動劃分的腳本(https://github.com/EddyGao/make_VOC2007/blob/master/make_main_txt.py)

然後執行以下代碼

python make_main_txt.py
           

将會按照腳本裡面設定的比例,自動拆分訓練集、測試集和驗證集,将相應的檔案名清單儲存在裡面。

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

3、配置SSD

(1)下載下傳SSD代碼

由于本案例是基于tensorflow的,是以,在github上下載下傳一個基于tensorflow的SSD,位址是 https://github.com/balancap/SSD-Tensorflow

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

以zip檔案的方式下載下傳下來,然後解壓,得到SSD-Tensorflow-master檔案夾

(2)轉換檔案格式

将voc_2007格式的檔案轉換為tfrecord格式,tfrecord資料檔案tensorflow中的一種将圖像資料和标簽統一存儲的二進制檔案,能更加快速地在tensorflow中複制、移動、讀取和存儲等。

SSD-Tensorflow-master提供了轉換格式的腳本,轉換代碼如下:

DATASET_DIR=./panda_voc2007/OUTPUT_DIR=./panda_tfrecord/python SSD-Tensorflow-master/tf_convert_data.py --dataset_name=pascalvoc --dataset_dir=${DATASET_DIR} --output_name=voc_2007_train --output_dir=${OUTPUT_DIR}
           

(3)修改物體類别

由于是我們自定義的物體,是以,要修改SSD-Tensorflow-master中關于物體類别的定義,打開SSD-Tensorflow-master/datasets/pascalvoc_common.py檔案,進行修改,将VOC_LABELS中的其它無關類别全部删掉,增加panda的名稱、ID、類别,如下:

VOC_LABELS = { 'none': (0, 'Background'),'panda': (1, 'Animal'),}
           

4、下載下傳預訓練模型

SSD-Tensorflow提供了預訓練好的模型,基于VGG模型(要了解VGG模型詳情,請閱讀文章:大話經典CNN經典模型VGG),如下表:

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

但這些預訓練的模型檔案都是存儲在drive.google.com上,是以,無法直接下載下傳。隻能通過“你懂的”方式進行下載下傳,在這裡下載下傳SSD-300 VGG-based預訓練模型,得到檔案:VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt.zip,然後進行解壓

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

5、訓練模型

終于把标注檔案、SSD模型都準備好了,現在準備開始來訓練了。

在訓練模型之前,有個參數要修改下,打開SSD-Tensorflow-master/train_ssd_network.py找到裡面的DATA_FORMAT參數項,如果是使用cpu訓練則值為NHWC,如果是使用gpu訓練則值為NCHW,如下:

DATA_FORMAT = 'NCHW' # gpu# DATA_FORMAT = 'NHWC' # cpu
           

現在終于可以開始來訓練了,打開終端,切換conda虛拟環境

source activate tensorflow
           

然後執行以下指令,開始訓練

# 使用預訓練好的 vgg_ssd_300 模型 DATASET_DIR=./ panda_tfrecordTRAIN_DIR=./panda_modelCHECKPOINT_PATH=./model_pre_train/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckptpython3 SSD-Tensorflow-master/train_ssd_network.py  --train_dir=${TRAIN_DIR}  --dataset_dir=${DATASET_DIR}  --dataset_name=pascalvoc_2007  --dataset_split_name=train  --model_name=ssd_300_vgg  --checkpoint_path=${CHECKPOINT_PATH}  --save_summaries_secs=60  --save_interval_secs=600  --weight_decay=0.0005  --optimizer=adam  --learning_rate=0.0001  --batch_size=16
           

其中,根據自己電腦的性能情況,設定batch_size的值,值越大表示批量處理的數量越大,對機器性能的要求越高。如果電腦性能普通的,則可以設定為8,甚至4,土豪請忽略。

學習率learning_rate也可以根據實際情況調整,學習率越小則越精确,訓練的時間也越長,學習率越大則可縮短訓練時間,但就會降低精準度。

在這裡使用預訓練好的模型,SSD将會鎖定VGG模型的一些參數進行訓練,這樣能在較短的時間内完成訓練。

6、使用模型

SSD模型訓練好了,現在要來使用了,使用的方式也很簡單。

SSD-Tensorflow-master自帶了一個notebooks腳本,可通過jupyter直接使用模型。

先安裝jupyter,安裝方式如下:

conda install jupyter
           

然後啟動jupyter-notebook,代碼如下:

jupyter-notebook SSD-Tensorflow-master/notebooks/ssd_notebook.ipynb
           

啟動後在SSD 300 Model的代碼塊設定模型的路徑和名稱

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

然後在最後的代碼塊中,設定要測試的圖像路徑path

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

然後點選菜單“Cell”,點選子菜單“Run All”,便能按順序全部執行代碼,并顯示出結果出來

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

執行後,可愛的熊貓就被圈出來了

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

經過以上步驟,我們便使用了自己的資料完成了目标檢測模型的訓練。隻要以後還有物體檢測的需求,然後找相關的圖檔集進行标注,标注後進行模型訓練,就能完成一個定制化的目标檢測模型了,非常友善,希望本案例對大家能有所幫助。

關注本人公衆号“大資料與人工智能Lab”(BigdataAILab),然後回複“代碼”關鍵字可擷取 完整源代碼。

ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...
ssd目标檢測訓練自己的資料_「AI實戰」手把手教你訓練自己的目标檢測模型(SSD篇)...

推薦相關閱讀

  • 【AI實戰】快速掌握TensorFlow(一):基本操作
  • 【AI實戰】快速掌握TensorFlow(二):計算圖、會話
  • 【AI實戰】快速掌握TensorFlow(三):激勵函數
  • 【AI實戰】快速掌握TensorFlow(四):損失函數
  • 【AI實戰】搭建基礎環境
  • 【AI實戰】訓練第一個模型
  • 【AI實戰】編寫人臉識别程式
  • 【AI實戰】動手訓練目标檢測模型(SSD篇)
  • 【AI實戰】動手訓練目标檢測模型(YOLO篇)
  • 【精華整理】CNN進化史
  • 大話卷積神經網絡(CNN)
  • 大話循環神經網絡(RNN)
  • 大話深度殘差網絡(DRN)
  • 大話深度信念網絡(DBN)
  • 大話CNN經典模型:LeNet
  • 大話CNN經典模型:AlexNet
  • 大話CNN經典模型:VGGNet
  • 大話CNN經典模型:GoogLeNet
  • 大話目标檢測經典模型:RCNN、Fast RCNN、Faster RCNN
  • 大話目标檢測經典模型:Mask R-CNN
  • 27種深度學習經典模型
  • 淺說“遷移學習”
  • 什麼是“強化學習”
  • AlphaGo算法原理淺析
  • 大資料究竟有多少個V
  • Apache Hadoop 2.8 完全分布式叢集搭建超詳細教程
  • Apache Hive 2.1.1 安裝配置超詳細教程
  • Apache HBase 1.2.6 完全分布式叢集搭建超詳細教程
  • 離線安裝Cloudera Manager 5和CDH5(最新版5.13.0)超詳細教程

參考文獻:K碼農-http://kmanong.top/kmn/qxw/form/home?top_cate=28

繼續閱讀