1. 程式人生 > >MobileNet版的mask rcnn-可以擴充套件到移動裝置中

MobileNet版的mask rcnn-可以擴充套件到移動裝置中

MobileNet版的mask rcnn-可以擴充套件到移動裝置

關於mask rcnn的原理我就不再說了,不瞭解額同學可以看一下我的部落格:mask rcnn原理

專案地址:Mobilenet_Mask RCNN

如果覺得有用的話,give me a star !

1、安裝環境:

1、電腦環境:

Mask R-CNN是基於Python3,Keras,TensorFlow

  • Python 3.4+
  • TensorFlow 1.3+
  • Keras 2.0.8+
  • Jupyter Notebook
  • Numpy, skimage, scipy, Pillow, cython, h5py
  • opencv 2.0

2.預權重下載:mobile_mask_coco.h5下載(積分不夠的,評論區留下郵箱!)

3、如果需要在COCO資料集上訓練或測試,需要安裝pycocotools, clone下來,make生成對應的檔案,make之後將生成的pycocotools資料夾複製到專案資料夾中:

Linux: https://github.com/waleedka/coco

Windows: https://github.com/philferriere/cocoapi. You must have the Visual C++ 2015 build tools on your path (see the repo for additional details)

4、MS COCO資料集(Ubuntu 建議採用 wget 命令直接Ubuntu終端下載)我採用的coco2014資料集進行訓練,包含80多個類別。


2.訓練過程:

如果需要自己訓練,直接在專案中開啟終端:

    # Train a new model starting from pre-trained COCO weights
    python3 coco.py train --dataset=/path/to/coco/ --model=coco

    # Train a new model starting from ImageNet weights. Also auto download COCO dataset
    python3 coco.py train --dataset=/path/to/coco/ --model=imagenet --download=True

    # Continue training a model that you had trained earlier
    python3 coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5

    # Continue training the last model you trained
    python3 coco.py train --dataset=/path/to/coco/ --model=last

    # Run COCO evaluatoin on the last model you trained
    python3 coco.py evaluate --dataset=/path/to/coco/ --model=last

    MobileNet_v1+FPN 為主幹網路進行特徵提取 , 來實現 mobilenet 版的目標檢測 . 我是將主幹網路替換成 mobilenet 對於 cocodataset 2014 資料集中 ,80k 訓練集和 35k 的驗證集的組合進行訓練 , 之前在上海大學通訊雲平臺建立了容器 , 但是在 NvidiaTesla P100 訓練出來的模型始終沒辦法進行目標檢測。

在通訊雲平臺上建立了安裝好深度學習框架和配置好相應環境的docker,採用的是NvidiaTesla M10 8G顯示卡進行訓練,使用1GPU訓練(如此有效的批量大小為16160k次迭代,學習率為0.001,在120k次迭代時學習率除以10。同時,訓練步數為160,每一步迭代1000,並且儲存每一步訓練的權重,訓練總時間為72個小時。


圖 1 Tensorboard展示的MobileNet訓練過程的loss變化


 


圖 2 Tensorboard展示的MobileNet訓練過程驗證集的loss變化



圖 3 訓練過程中迭代時的loss值變化

2.MobileNet_v1 原理

       

        MobileNet-v1Google2017年四月針對手機等嵌入式裝置提出的一種輕量級的深層神經網路,用於移動和嵌入式視覺應用。MobileNet-v1是基於一個流線型的架構,它使用深度可分離的卷積來構建輕量級的深層神經網路,引入兩個簡單的全域性超引數,在延遲度和準確度之間有效地進行平衡。這兩個超引數允許模型構建者根據問題的約束條件,為其應用選擇合適大小的模型。


2012AlexNet模型取得ImageNet冠軍之後,卷積神經網路更加普及。面對海量的資料,為了提升測試的精度,大家往往會選擇通過增加網路的層數以及更為複雜的神經網路來獲取更高的精度。然而這種方式對於裝置的計算能力要求較高,訓練好的模型記憶體較大,執行的時候對於實驗裝置的要求也高,不利於相關技術的應用和普及。例如一些嵌入式的平臺因為硬體資源的原因,就需要一種記憶體更小,測試速度更快,靈活便捷的模型。MobileNet-v1關鍵之處在於分解卷積核,將標準的卷積核分解為深度卷積和1*1卷積。深度卷積將相應的卷積核應用到每一個通道,而1*1卷積核便用來可以將通道輸出進行組合。下圖展示標準卷積層的分解過程,通過這種分解方式可以減少計算量,提高其測試速度。


 (a)3D卷積(b)逐通道2D卷積和(c)3D1*1卷積


圖(a)展示的傳統的卷積是通過採用一個與輸入和輸出相同維度進行卷積求和,其計算量為T1=DK· DK · M · N · DF ·DF,MN為輸入和輸出的通道數。圖 (b)是採用Depthwise卷積核,首先採用一組通道數為1的卷積核,這一組二維卷積核的數量是和輸入通道數相同的。在用逐個通道卷積進行處理之後得到特徵圖,在選用1*1卷積核來處理輸出的特徵圖。逐通道2D卷積核的運算量為:T2=DK· DK · M · N · DF ·DF, 3D1*1卷積核的計算量為:T3=DK· DK · M · DF ·DF.因此,這種組合方式的計算量為:T2+T3.deep-wise方式的卷積相比於傳統3D卷積計算量為:(T2+T3)/T1=1/N +1/DK2。下圖所示網路結構為傳統的標準的卷積網路和deep-wise卷積網路結構

:

 傳統的3D卷積(左)與deep-wise卷積網路結構(右)

從圖中可以看出,deep-wise的卷積和後面的1x1卷積是相對獨立的。利用1*1卷積降通道就是為了減小計算量。Deep-wise結合1x1的卷積方式代替傳統卷積不僅在理論上會更高效,而且由於大量使用1x1的卷積,可以直接使用高度優化的數學庫來完成這個操作,MobileNet中,有95%的計算量和75%的引數屬於1x1卷積。


3.結果對比


圖1 為 mask rcnn 測試結果


圖2 為Mobilenet v1的測試結果


圖 3 為mask rcnn測試結果


圖 4 mobile net 測試結果


4. 模型效能分析

    準確率(Precision):識別過程中,正確識別的圖片佔圖片總數的比值,召回率(Recall):正確識別個數,佔測試集中該類總數的比值,平均準確率(AveragePrecison):AP,不同類別準確率的平均值.平均召回率(AverageRecall):AR,不同類別召回率的平均值。

Resnet50MobileNet為主幹網路的訓練的模型,coco驗證集上,隨機選取500張圖片進行檢驗,結果如下圖所示。

    

圖 1 Resnet APAR500張圖片上的結果


圖2 MobileNet APAR500張圖片上的結果

    通過對於500張圖片的測試,可以得到以Resnet50為主幹網路所提取的特徵,其平均準確率和平均召回率在不同的Iou下均高於MobileNet_v1的結果,這也可以從上面展示的對比測試結果中看出,對於目標的例項分割,Resnet50為主幹網路分割檢測的更加準確.MobleNet版的MaskR-CNN對於重疊的目標檢測分割會重合,準確率不夠高。但是,物體的分類和邊框迴歸接近。

兩種模型的測試速度也是不同,都在TeslaM10的顯示卡上選取500張圖片進行測試.

    Resnet50的檢測總時間為511s,平均檢測時間為1.02s;MobileNet的檢測總時間為370s,平均檢測時間為0.74s.由此可以看出,MobileNet訓練的模型更加靈活,檢測效率更高。

ResNet50訓練出來的模型記憶體為245M,MobileNetV1訓練出來的模型記憶體為93M,體現了MobileNet模型小,便於移植到移動裝置中.記憶體大小,如下圖所示:


圖 3 ResNet 50訓練模型記憶體大小


圖 4 MobileNet 訓練模型大小