TensorFlow Object Detection API 介紹

熟悉TensorFlow的人都知道,tf在Github上的主頁是:tensorflow,然後這個主頁下又有兩個比較重要的repo(看star數就知道了),分別是TensorFlow的源代碼repo:tensorflow/tensorflow,還有一個tensorflow/models。後者tensorflow/models是Google官方用TensorFlow做的各種各樣的模型,相當於示例代碼,比如用於圖像分類的Slim,深度文字OCR,以及用於NLP任務的句法分析模型syntaxnet,Seq2Seq with Attention等等等等。這次公佈的Object Detection API同樣是放在了tensorflow/models裏。
再來說下這次公佈的代碼的實現方式。首先,對於目標檢測這個任務來說,前面必須有一個像樣的ImageNet圖像分類模型來充當所謂的特徵提取(Feature Extraction)層,比如VGG16、ResNet等網絡結構。TensorFlow官方實現這些網絡結構的項目是TensorFlow Slim,而這次公佈的Object Detection API正是基於Slim的。Slim這個庫公佈的時間較早,不僅收錄了AlexNet、VGG16、VGG19、Inception、ResNet這些比較經典的耳熟能詳的卷積網絡模型,還有Google自己搞的Inception-Resnet,MobileNet等。
我們在TensorFlow Object Detection API的官方安裝指南(地址:tensorflow/models)中,可以看到這樣一句代碼:

From tensorflow/models/

export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim

很顯然,這就是欽點用Slim作特徵抽取了。
另外,以Faster RCNN爲例,之前在github上,可以找到各種各樣非官方的TensorFlow實現,但是這些實現使用的特徵抽取層都不是Slim,而是五花八門的什麼都有,另外一方面實現代碼大量copy自原始的caffe的實現:rbgirshick/py-faster-rcnn,這次公佈的代碼裏已經一點也找不到原始caffe實現的痕跡了。最後,原來非官方的Object Detection實現的質量參差不齊,去年我調過一個Faster RCNN,過程比較痛苦,在運行之前瘋狂debug了三天才勉強跑了起來。這次Google官方公佈的Object Detection API別的不說,代碼質量肯定是過的去的,因此以後應該不會有人再造TensorFlow下Faster RCNN、R-FCN、SSD的輪子了。
說完了代碼,再簡單來說下公佈的模型。主要公佈了5個在COCO上訓練的網絡。網絡結構分別是SSD+MobileNet、SSD+Inception、R-FCN+ResNet101、Faster RCNN+ResNet101、Faster RCNN+Inception_ResNet。後期應該還會有更多的模型加入進來。

這裏寫圖片描述
————————————–分割線———————————-
最後,給新手朋友提供一個可以跑出官方Demo效果的小教程,非常簡單,用5分鐘的時間就可以跑一遍感受一下,只要安裝了TensorFlow就可以,有沒有GPU都無所謂。
1. 安裝或升級protoc
首先需要安裝或升級protoc,不然在後面會無法編譯。
安裝/升級的方法是去protobuf的Release界面:google/protobuf,下載對應的已經編譯好的protoc。
這裏寫圖片描述
比如我是64位的ubuntu,那麼就下載protoc-3.3.0-linux-x86_64.zip。下載解壓後會有一個protoc二進制文件,覆蓋到對應目錄即可(如果不放心的可以用cp /usr/bin/protoc ~/protoc_bak先備份一下):
sudo cp bin/protoc /usr/bin/protoc

  1. 下載代碼並編譯
    下載tensorflow/models的代碼:
    git clone https://github.com/tensorflow/models.git

進入到models文件夾,編譯Object Detection API的代碼:

From tensorflow/models/

protoc object_detection/protos/*.proto –python_out=.

  1. 運行notebook demo
    在models文件夾下運行:
    jupyter-notebook

訪問文件夾object_detection,運行object_detection_tutorial.ipynb:
這裏寫圖片描述

依次shift+enter運行到底就行了。這個Demo會自動下載並執行最小最快的模型ssd+mobilenet。
最後的檢測效果,一張是汪星人圖片:
這裏寫圖片描述

  1. 使用自己的圖片做檢測
    如果要檢測自己的圖片,那麼更改TEST_IMAGE_PATHS爲自己的圖片路徑就可以了。這裏我隨便選了一張COCO數據集中的圖片:
    TEST_IMAGE_PATHS=[‘/home/dl/COCO_train2014_000000000009.jpg’]
    這裏寫圖片描述
    檢測結果:

  2. 使用其他模型做檢測
    一共公佈了5個模型,上面我們只是用最簡單的ssd + mobilenet (ssd_mobilenet_v1_coco_11_06_2017)模型做了檢測,如何使用其他模型呢?找到Tensorflow detection model zoo(地址:tensorflow/models),根據裏面模型的下載地址,我們只要分別把MODEL_NAME修改爲以下的值,就可以下載並執行對應的模型了:
    MODEL_NAME = ‘ssd_inception_v2_coco_11_06_2017’

MODEL_NAME = ‘rfcn_resnet101_coco_11_06_2017’

MODEL_NAME = ‘faster_rcnn_resnet101_coco_11_06_2017’

MODEL_NAME = ‘faster_rcnn_inception_resnet_v2_atrous_coco_11_06_2017’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章