谷歌開源Tensorflow Object Detection API學習筆記
谷歌宣佈開源其內部使用的 TensorFlow Object Detection API 物體識別系統。本教程針對ubuntu16.04系統,快速搭建環境以及實現視訊物體識別系統功能。
https://yq.aliyun.com/ziliao/405237
https://www.cnblogs.com/wmr95/p/7563173.html
https://blog.csdn.net/pkokocl/article/details/82596089
1、安裝Tensorflow
請參考官方說明及其它部落格安裝tensorflow,要使用Tensorflow Object Detction API,tensorflow版本需1.4及以後版本。
我的系統已經安裝Ubuntu 16.04系統,基礎軟體安裝如下表,tensorflow,opencv均正常工作
2、安裝必要的包及庫
sudo apt-get install protobuf-compiler
sudo apt-get install python-pil
sudo apt-get install python-lxml
sudo pip3 install jupyter
sudo pip3 install matplotlib
3、安裝TensorFlow Object Detection API
在home目錄下新建tensroflow目錄。TensorFlow Object Detection API 存放在 tensorflow /models 專案下的。(地址: https://github.com/tensorflow/models)
mkdir tensorflow
cd tensorflow
git clone https://github.com/tensorflow/models.git
在clone的時候有可能比較慢,或提示網路超時。多試幾次即可。clone完成後在tensorflow資料夾下有名為models的資料夾,在models資料夾下有research資料夾
~~~~~~~~~~`
下載TensorFlow Model模型庫
TensorFlow 模型庫包含了很多開源的模型,包括影象分類、檢測、自然語言處理NLP、視訊預測、影象理解等等,我們要學習的物件檢測API也包括在這裡面,可以用git checkout到本地,也可以直接在github下載zip包,本文直接下載的zip包(大概415M,雖然我們只會用到裡面很少一部分內容)
下載後,解壓到~/tensorflow目錄下,為了與github目錄結構一致,我們將models-master目錄重新命名為models
得到如下目錄結構~/tensorflow/models/research/object_detection
原文:https://blog.csdn.net/chenmaolin88/article/details/79371891
~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~
4、protobuf編譯
在research/object_detection/protos目錄下有很多.proto檔案,需要將這些.ptoto檔案編譯成.py檔案。使用protoc對proto檔案進行編譯
protoc ~/tensorflow/models/research/object_detection/protos/*.proto --python_out=.
執行上述命令後,提示如下錯誤:
object_detection/protos/ssd.proto:104:3: Expected "required", "optional", or "repeated".
object_detection/protos/ssd.proto:104:12: Expected field name.
object_detection/protos/model.proto: Import "object_detection/protos/ssd.proto" was not found or had errors.
object_detection/protos/model.proto:12:5: "Ssd" is not defined.
檢視protoc的版本是2.6.1,在以前的文章中說明2.6.1版本上OK的。但我下載的TensorFlow Object Detection API是2018年9月初的版本,protoc的2.6.1版本太低了。
protoc --version
libprotoc 2.6.1
需要升級protoc版本。首先解除安裝protoc舊版本。注意與第1步驟中安裝protoc的命令引數對應
sudo apt-get remove protobuf-compiler
protoc --version
bash: /usr/bin/protoc: No such file or directory
到 https://github.com/google/protobuf/releases 下載最新的protoc安裝包 protobuf-all-3.6.1.tar.gz
下載完後解壓,然後執行下面的命令編譯安裝:
$ cd protobuf-3.6.1
$ ./configure --prefix=/usr
$ make -j15
$ make check -j15
$ sudo make install -j15
$ sudo ldconfig
$ protoc --version
libprotoc 3.6.1
安裝後檢視protoc版本為3.6.1 版本。再重新執行編譯命令
$ protoc ./object_detection/protos/*.proto --python_out=.
命令執行成功,沒再報錯。檢視protos目錄下,有相應的.py檔案
anchor_generator_pb2.py
anchor_generator.proto
argmax_matcher_pb2.py
argmax_matcher.proto
bipartite_matcher_pb2.py
bipartite_matcher.proto
5、將slim新增到PYTHONPATH
TensorFlow Object Detection API 是以 Slim 為基礎實現的,需要將 Slim 的目錄加入 PYTHONPATH 後才能正確執行。為方便起見,直接在.bashrc 檔案中新增如下一行。
export PYTHONPATH=$PYTHONPATH:/your home path/tensorflow/models/research:/your home path/tensorflow/models/research/slim
其中/your home path/請根據你自己的安裝目錄修改。然後執行
source ~/.bashrc
6、驗證測試
執行如下命令:(注意,下述命令必須是python3 ,而不能是python)
[email protected]:~/tensorflow/models/research$ python3 object_detection/builders/model_builder_test.py
執行結果:
......................
----------------------------------------------------------------------
Ran 22 tests in 0.098s
OK
---------------------
作者:pkokocl
來源:CSDN
原文:https://blog.csdn.net/pkokocl/article/details/82596089
版權宣告:本文為博主原創文章,轉載請附上博文連結!
7、跑demo:https://blog.csdn.net/chenmaolin88/article/details/79371891
接下來,我們跑一個demo,你可以在這個路徑下執行jupyter notebook開啟筆記本,然後用筆記本開啟/object_detection/object_detection_tutorial.ipynb
(然後輸入jupyter notebook,就會呼叫瀏覽器(Chrome)開啟當前資料夾,點開 object_detection_tutorial.ipynb,
在新標籤頁中開啟 Object Detection Demo,點選上方的 “Cell”-"Run All",就可以直接看到結果,最後輸出的是兩張圖片的識別結果,分別是狗,以及沙灘。第一次執行由於需要下載訓練好的模型,耗時較長。第二次之後可以將 .ipynb檔案中 Download Model 即 in[5]部分的程式碼註釋掉,以加快執行速度。)
注意,下面這個demo裡第4步是從網路中下載預訓練模型檔案,若執行的時候速度很慢,可以單獨去下載這個模型檔案,然後解壓到相應目錄,確保存在object_detection/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb 檔案,然後遮蔽到程式碼中下載指令,如圖所示,把Download Model程式碼塊設定MarkDown或直接註釋掉也可以。
接下就一步步執行裡面的程式碼,看看最後的結果是否如下圖,更多的細節和功能大家自己去研究研究吧:
~~~~~~~~~~~~~~~~~~~~~~`
https://blog.csdn.net/pkokocl/article/details/82596089
報錯:解決辦法見上述部落格
[email protected]:/usr/local/lib/python3.5/dist-packages/tensorflow/models/research$ sudo protoc object_detection/protos/*.proto --python_out=.
[sudo] password for liuliu:
object_detection/protos/ssd.proto:110:3: Expected "required", "optional", or "repeated".
object_detection/protos/ssd.proto:110:12: Expected field name.
object_detection/protos/model.proto: Import "object_detection/protos/ssd.proto" was not found or had errors.
object_detection/protos/model.proto:12:5: "Ssd" is not defined.
報錯分析:
檢視protoc的版本是2.6.1,在以前的文章中說明2.6.1版本上OK的。但我下載的TensorFlow Object Detection API是2018年9月初的版本,protoc的2.6.1版本太低了。
protoc --version
libprotoc 2.6.1
需要升級protoc版本。首先解除安裝protoc舊版本。注意與第1步驟中安裝protoc的命令引數對應
sudo apt-get remove protobuf-compiler
protoc --version
bash: /usr/bin/protoc: No such file or directory
到 https://github.com/google/protobuf/releases 下載最新的protoc安裝包 protobuf-all-3.6.1.tar.gz
下載完後解壓,然後執行下面的命令編譯安裝:
$ cd protobuf-3.6.1
$ ./configure --prefix=/usr
$ make -j15
$ make check -j15
$ sudo make install -j15
$ sudo ldconfig
$ protoc --version
libprotoc 3.6.1
安裝後檢視protoc版本為3.6.1 版本。再重新執行編譯命令
$ protoc ./object_detection/protos/*.proto --python_out=.
命令執行成功,沒再報錯。檢視protos目錄下,有相應的.py檔案
anchor_generator_pb2.py
anchor_generator.proto
argmax_matcher_pb2.py
argmax_matcher.proto
bipartite_matcher_pb2.py
bipartite_matcher.proto
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
https://blog.csdn.net/Allen__Iverson/article/details/84038113
解決Failed to get convolution algorithm. cudnn failed to initialize...
伺服器環境
Ubuntu16.04、cuda9.0、cudnn7.0、tensorflow1.12.0、python3.5、1080ti
錯誤
Failed to get convolution algorithm. cudnn failed to initialize…
原因
tensorflow版本太高
解決方案
sudo pip3 install --upgrade --force-reinstall tensorflow-gpu==1.9.0 --user
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·