這篇文章記錄在臺式機ubuntu18.04下搭建Object Detection API框架,以及Intel Movidius神經元計算棒2代環境,并使用自己的訓練集對MobileNet-SSD網路進行訓練調參與測驗,以及VPU加速推理的全程序,這里對程序中遇到的各種血淚深坑以及奇葩問題進行完整記錄,便于后續歸檔與復現,
Object Detection API訓練MobileNet-SSD模型,以及使用Intel Movidius神經元計算棒加速完整步驟
- 一/ 搭建Object Detection API 框架與相關環境
- 1)Anaconda3 安裝與配置
- 2)Cuda和Cudnn 安裝與配置
- 2.1)Cuda9.0安裝
- 2.2)Cudnn7.1.4安裝
- 3)Tensorflow-gpu 安裝與配置
- 3.1)創建Conda虛擬環境
- 3.2)安裝Tensorflow-gpu
- 4)Object Detection API 框架搭建
- 二/ 制作訓練-測驗資料集,訓練MobileNet-SSD網路模型
- 1)按照VOC資料集格式制作訓練-測驗資料集
- 1.1)制作VOC格式資料集
- 1.2).record格式的樣本生成
- 2)訓練MobileNet-SSD網路模型
- 2.1)配置.config檔案
- 2.2)啟動訓練
- 2.3)測驗訓練效果
- 三/ 搭建OpenVINO? toolkit 框架與相關環境,以及VPU加速推理
- 1)搭建OpenVINO? toolkit 框架與環境
- 1.1)安裝OpenVINO? toolkit
- 1.2)配置神經元計算棒2代硬體驅動
- 1.3)測驗安裝
- 2)使用VPU加速推理訓練好的tensorflow模型
- 2.1)將自己訓練好的Tensorflow模型轉換為IR模型
- 2.2)將IR推理模型轉換為二進制blob檔案格式
- 2.3)使用VPU進行實際加速推理測驗
我這里PC端基礎環境為
Ubuntu 18.04,OpenCV 3.4.13,python 3.6.8,
之前原本一直用的都是Caffe環境,結果系統升級到18.04后,重新編譯caffe一直沒能編譯成功,試便了國內外各種論壇里的帖子,耗時整整一星期,把boost依賴庫都編出花了還是沒能解決…主要的問題在于編譯到最后一步會報如下錯誤,這里記錄一下:
.build_release/lib/libcaffe.so: undefined reference to boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const
因此最后就放棄Caffe環境改用Tensorflow了,但可能是運氣不大行,tf的坑貌似我也全部踩遍…
真心建議,不要輕易升級系統,從16.04升級后真的很多深坑,血淚的教訓QAQ…
正文開始之前先總結一下我在Ubuntu18.04系統下安裝依賴包時遇到的相關問題:
問題記錄-01 -------------------------------------------------------------------------------------------------------
當我升級系統后安裝新的依賴包非常慢,于是我更換了國內的阿里源,更換步驟為:
(1)備份原來的源,將以前的源備份一下,以防以后可以用的,
sudo cp /etc/apt/sources.list /etc/apt/sources_init.list
(2)更換源:
sudo gedit /etc/apt/sources.list
使用gedit打開檔案,將下邊的阿里源復制進去,然后點擊保存關閉,阿里官方源 (Ubuntu 18.04):
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ bionic main restricted
## Major bug fix updates produced after the final release of the
## distribution.
# deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://cn.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://cn.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner
# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security restricted multiverse main universe
deb http://cn.archive.ubuntu.com/ubuntu/ bionic-updates restricted multiverse main universe
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
(3)更新源:
sudo apt-get update
修復損壞的軟體包,嘗試卸載出錯的包,重新安裝正確版本:
sudo apt-get -f install xxxxxxx
問題記錄-02 -------------------------------------------------------------------------------------------------------
無法獲得鎖 /var/lib/dpkg/lock-frontend - open (11: 資源暫時不可用)
如果在apt get安裝依賴包時報這個錯誤,首先查看:
ls /var/lib/dpkg/lock-frontend
然后將其洗掉:
sudo rm -r -f /var/lib/dpkg/lock-frontend
如果依然報錯,洗掉:
sudo rm -r -f /var/lib/dpkg/lock
問題記錄-03 -------------------------------------------------------------------------------------------------------
ubuntu18.04 處理依賴包問題,遇到 Depends: python3-software-properties (= 0.96.20.9)
應該是因為源本身有問題,例如我升級為Ubuntu 18.04后,如果替換為國內16.04的阿里源就是遇到上述問題,查閱相關檔案后替換為Ubuntu 18.04的阿里官方源問題得以解決,
問題記錄-04 -------------------------------------------------------------------------------------------------------
pip安裝依賴包時,報錯ModuleNotFoundError: No module named 'pip._internal'
當安裝了Python3.6后,我通過修改默認為Python3.6,結果pip就不能用了,一直報錯如下:
Traceback (most recent call last):
File "/usr/local/bin/pip", line 7, in <module>
from pip._internal import main
ModuleNotFoundError: No module named 'pip._internal'
輸入pip更新指令python -m pip install --upgrade pip,問題得以解決,
如果輸入運行后依舊繼續出現錯誤“no module named pip”,則運行以下指令:
python -m ensurepip
easy_install pip
繼續報錯:No module named “ensurepip” “ easy_install ”
則可以通過原始碼編譯安裝,命令列如下:
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
sudo python get-pip.py
pip --version
------------------------------------------------------------------------------------------------------------------------
一/ 搭建Object Detection API 框架與相關環境
1)Anaconda3 安裝與配置
(1)下載安裝包,官網下載地址:https://www.anaconda.com/download/#linux
(2)下載完之后是后綴.sh檔案,在終端輸入:
bash Anaconda3-5.1.0-Linux-x86_64.sh

點擊回車按鈕進行后續安裝,
(3)終端輸入python查看版本,如果默認不是python3,則在終端輸入:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
執行完上述兩行命令之后在終端輸入python,如果第一行資訊是3.6,則成功,效果圖如下:
如果要切換到Python2,執行:
sudo update-alternatives --config python
(4)將Python添加到環境變數中,如果在安裝Anaconda的程序中沒有將安裝路徑添加到系統環境變數中,需要在安裝后手工添加,
打開bashrc檔案:sudo gedit ~/.bashrc,在檔案末尾處添加以下陳述句:
export PATH=/home/XXX/anaconda3/bin:$PATH XXX為自己的用戶名
最后在終端輸入source ~/.bashrc,使環境變數立即生效,
至此,輸入conda -V顯示版本號即為安裝成功,如果沒有成功,重啟系統即可,
也可以在終端輸入ecoh $PATH查看已有的環境變數 ,確認輸出是否已經有Anaconda路徑,
2)Cuda和Cudnn 安裝與配置
最終我這里安裝了
Cuda9.0與Cudnn7.1.4,這里遇到了很多的問題,
總結一下就是首先cuda的版本一定要和驅動的版本相匹配,不然一切都是白做,我的驅動版本安裝的是390,對應的cuda應該是9.1,但是Cuda9.1版本的tensorflow-gpu只有部分版本的輪子,并且很多博文都說其實Cuda9.1對tensorflow-gpu并不支持,
我安裝到后面Object Detection API那里測驗時也驗證了這個說法,所以我又回來卸載了Cuda9.1,重新安裝了cuda9.0版本,
問題記錄-05 -------------------------------------------------------------------------------------------------------
如何卸載CUDA舊版本:
sudo apt-get remove cuda
sudo apt-get autoclean
sudo apt-get remove cuda*
cd /usr/local/
sudo rm -r cuda-9.1
此外,如果是采用deb格式檔案的安裝方式,需要在源中將舊版本的CUDA取消勾選,例如當卸載完CUDA9.1后需要將下圖這個界面與CUDA9.1相關的驅動刪掉,否則后續安裝新的CUDA版本時會直接鏈接到舊版本驅動中,導致無法正確安裝新版本,

----------------------------------------------------------------------------------------------------------------------------
2.1)Cuda9.0安裝
Ubuntu18.04自帶了NVIDIA驅動,但是它沒有安裝完整,不能在終端使用nvidia-smi命令查看,在之后的CUDA編譯測驗里面也會出現問題,因此需要重新安裝,重新安裝的方式如下:
首先,檢測NVIDIA圖形卡和推薦的驅動程式的模型,在終端輸入:ubuntu-drivers devices

從中可以看到,這里有一個設備是GTX 1070,對應的驅動是NVIDIA -390,所以安裝390版本的驅動,選擇安裝所有推薦的驅動:
sudo ubuntu-drivers autoinstall
執行完命令后,在終端輸入:nvidia-smi 可以得到相關資訊,

問題記錄-06 -------------------------------------------------------------------------------------------------------
注意,這里一定要把驅動安裝成功后再重啟,否則會出現無法進入圖形界面的問題,例如:
linux(ubuntu)16.04 開機報錯“Stopping User Manager for UID 123”
一直黑屏,連命令列界面也進不去,嚇出一身冷汗,差點就想刪庫跑路了…(危)
參考鏈接(強烈感謝這位大佬):https://blog.csdn.net/u012150360/article/details/90244858
解決思路:
Run mount -o rw,remount / to mount the drive in Read-Write mode.
Run sudo apt-get purge nvidia-* to purge the NVIDIA driver.
You may also need to purge xserver-xorg and reinstall it, which will require you to enable networking in Recovery.(apt-get purge xserver-xorg)
reboot 重啟一下,
問題記錄-07 -------------------------------------------------------------------------------------------------------
我在安裝驅動時候采用命令列sudo ubuntu-drivers autoinstall沒能安裝成功,遇到問題:正試圖覆寫...它同時被包含于軟體包...在處理時有錯誤發生...,以及問題:
下列軟體包有未滿足的依賴關系:nvidia-driver-390 : 依賴:...... 但是它將不會被安裝
后來將cuda重新卸載干凈,添加顯卡驅動源sudo add-apt-repository ppa:graphics-drivers/ppa,
之后更新附加驅動sudo apt-get updata,再次安裝驚喜的發現成功了,
最后我這里的附加驅動界面如下所示:

---------------------------------------------------------------------------------------------------------------------------
因為Ubuntu18.04默認gcc7.0,而CUDA9.0只支持gcc6.0及以下版本,因此需要降級,這里選擇降級到的版本是gcc5.5版本,
首先查看自己的版本:gcc –version,如果版本高于6.0,則需要降級版本并激活,
在終端輸入:
sudo apt-get install gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc/usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/g++ g++/usr/bin/g++-5 50
gcc –version
之后安裝依賴庫,在終端輸入:
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev
sudo apt-get install libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
之后在CUDA官網下載相關的CUDA版本,地址:
https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1704&target_type=runfilelocal


在安裝包存放目錄處打開終端輸入:
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb
sudo apt-get update
繼續在終端輸入:
sudo apt-get install cuda
問題記錄-08 -------------------------------------------------------------------------------------------------------
下列軟體包有未滿足的依賴關系: cuda : 依賴: cuda-9-0 (>= 9.0.176) 但是它將不會被安裝
發現是因為自己關閉了更新,
如果你也遇到問題的話,請按步驟:系統設定-軟體和更新-更新設定為下圖即可:

-------------------------------------------------------------------------------------------------------------------------
進入/usr/local目錄下可以看到cuda和cuda-9.0兩個檔案夾,表明安裝成功,
安裝成功,接下來進行環境變數配置,步驟如下:
打開終端輸入:sudo gedit ~/.bashrc
在打開的組態檔中,將以下內容寫入末尾處.
export CUDA_HOME=/usr/local/cuda-9.0
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/extras/CUPTI/lib64:$LD_LIBRARY_PATHs
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/extras/CUPTI/lib64:/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/lib64"
使環境變數立即生效:source ~/.bashrc
最后對CUDA進行測驗,可以進入例子的檔案夾:cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery,然后執行make命令:sudo make,最后運行Demo:./deviceQuery,如果結果有GPU的資訊,說明安裝成功,自此CUDA9.0安裝配置完成,

命令列輸入nvcc -V可以查看CUDA的安裝版本,
2.2)Cudnn7.1.4安裝
官網下載鏈接:https://developer.nvidia.com/rdp/cudnn-archive
為適應Cudn9.0,這里下載的是CuDnnv7.1.4,下載的是.solitairetheme8格式的檔案,安裝步驟如下:
tar -xvzf cudnn-9.0-linux-x64-v7.solitairetheme8
#解壓后的文件夾名稱為cuda ,將對應檔案復制到 /usr/local中的cuda內,
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
#建立軟連接
cd /usr/local/cuda/lib64/
sudo chmod +r libcudnn.so.7.6.4
sudo ln -sf libcudnn.so.7.6.4 libcudnn.so.7
sudo ln -sf libcudnn.so.7 libcudnn.so
sudo ldconfig
Cudnn安裝成功,這里記錄幾個問題:
問題記錄-09 -------------------------------------------------------------------------------------------------------
/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudnn.so.7 is not a symbolic link
如果后續在使用CUDA加速時遇到這個問題,首先打開libcudnn.so.7所在的目錄:
cd /usr/local/cuda-9.0/lib64/
發現Libcudnn.so.7 和libcudnn.so.7.1.4 兩個檔案,但 理論上只有一個libcudnn.so.7.1.4,
重新鏈接庫即可,在終端執行:
sudo ln -sf /usr/local/cuda-9.0/lib64/libcudnn.so.7.1.4 /usr/local/cuda-9.0/lib64/libcudnn.so.7
問題記錄-10 -------------------------------------------------------------------------------------------------------
其實一開始我的Cudnn版本安裝的是7.0.5,后續在import tensorflow as tf時遇到如下錯誤:
Loaded runtime CuDNN library: 7.0.5 but source was compiled with: 7.1.4.
CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version.
If using a binary install, upgrade your CuDNN library.
因為tensorflow-gpu的庫版本和Cudnn不匹配,要求cudnn版本為7.1.4,而我之前安裝的版本是7.0.5,因此需要對cudnn進行升級,升級方法很簡單,而且不會對現有安裝環境造成破壞,升級完之后tensorflow還可以正常使用,
首先使用以下指令查看現有Cudnn的版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
洗掉舊版本:
sudo rm -rf /usr/local/cuda/include/cudnn.h
sudo rm -rf /usr/local/cuda/lib64/libcudnn*
之后根據cuda和系統環境,在官網下載Cudnn的新版本,按照上文Cudnn的安裝步驟重新安裝,安裝后再次查看Cudnn版本發現已更新,且呼叫不報錯,
------------------------------------------------------------------------------------------------------------------------
3)Tensorflow-gpu 安裝與配置
tensorflow-gpu的安裝簡直吐血,吐吐吐,嘗試了1.5.0,1.8.0,1.13.0,1.14.0,最終我這里安裝了
Tensorflow-gpu==1.12.0,踩坑無數,主要問題還是版本問題,要與CUDA版本匹配,同時要與后文Object Detection API版本匹配,否則就是刪號重來的操作…
3.1)創建Conda虛擬環境
創建Conda虛擬環境并激活:
conda create -n tf=1.12 python=3.6
conda activate tf=1.12
問題記錄-11 -------------------------------------------------------------------------------------------------------
“No module named conda”
python版本不小心被改變是產生這個錯誤的主要原因,我之前因為要安裝ROS切換回了python2.7,后來再使用Anaconda就出現了上述問題,
解決方案:
如果之前的Anaconda安裝包還在的話,執行直 bash -u 命令重新安裝anaconda一遍,這種方法可以保存之前創建的虛擬環境:
bash Anaconda3-5.1.0-Linux-x86_64.sh -u
如果以上方法解決不了的話,直接下載最新的安裝包(python版本對應上),安裝Anaconda后,將之前的envs檔案替換即可,
問題記錄-12 -------------------------------------------------------------------------------------------------------
CondaHTTPError: HTTP 000 CONNECTION FAILED for url
可能的原因是著作權問題,anaconda的國內鏡像源停止anaconda的鏡像服務,
解決方案:
在home檔案夾下按下Ctrl+h,找到隱藏的檔案.condarc
洗掉里面所有的內容,把下面的內容復制進去:
channels:
- defaults
show_channel_urls: true
ssl_verify: false
report_errors: false
問題記錄-13 -------------------------------------------------------------------------------------------------------
CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘
解決方案:
# 激活 anaconda 環境
source activate
# 退出 anaconda 環境
source deactivate
激活成功后在命令列的前面會出現:(base) [root@xxxx] #
------------------------------------------------------------------------------------------------------------------------
3.2)安裝Tensorflow-gpu
就是在這里我發現CUDA9.1版本沒有支持的Tensorflow-gpu,具體錯誤資訊為
import tensorflow as tf時報錯:ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
雖然tiny mind開發了mind/wheels,即為Linux準備的特殊版本tensorflow,里面確實包含了支持CUDA9.1的tensorflow,參考鏈接:https://blog.csdn.net/gaoyu1253401563/article/details/82808269?utm_source=blogxgwz3
但實際上雖然我按照指引正確安裝了支持CUDA9.1的tensorflow-gpu版本,但后面在測驗Object Detection API時還是發現了很多版本不兼容的問題,因此全部卸載干凈,使用了CUDA9.0與Tensorflow-gpu=1.12.0版本,
source activate tf=1.12
pip install tensorflow-gpu==1.12
安裝完成后進入python環境,匯入tensorflow查看是否安裝成功:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
要測驗是否啟用了GPU加速,可以用以下兩行代碼測驗:
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
如果輸出中有GPU的資訊,說明GPU加速已經啟用:
Sample Output
[name: "/cpu:0" device_type: "CPU" memory_limit: 268435456 locality { } incarnation: 4402277519343584096,
name: "/gpu:0" device_type: "GPU" memory_limit: 6772842168 locality { bus_id: 1 } incarnation: 7471795903849088328 physical_device_desc: "device: 0, name: GeForce GTX 1070, pci bus id: 0000:05:00.0" ]
問題記錄-14 -------------------------------------------------------------------------------------------------------
ImportError: Something is wrong with the numpy installation.
While importing we detected an older version of numpy in [‘D:\Anaconda3\envs\tensorflow\lib\site-packages\numpy’].
One method of fixing this is to repeatedly uninstall numpy until none is found, then reinstall this version.
解決方案:
pip uninstall numpy
選擇y確認卸載,重復命令,直到顯示找不到時才為卸載干凈,之后下載numpy:
pip install numpy
問題記錄-15 -------------------------------------------------------------------------------------------------------
No module named 'absl'
解決方案:
方案一:指定版本安裝:
pip install absl-py==0.1.10
方案二:洗掉后使用pip3進行安裝:
1、洗掉site-packages檔案夾中與absl-py相關的檔案夾
2、輸入以下命令:
pip3 install absl-py -i https://pypi.tuna.tsinghua.edu.cn/simple
問題記錄-16 -------------------------------------------------------------------------------------------------------
之前在安裝tensorflow-gpu其他版本時還遇到了如下幾個問題:
ImportError: cannot import name 'keras_export'
ImportError: cannot import name 'tf_utils'
后來安裝了tensorflow-gpu=1.12.0版本后問題得以解決,或者把tensorflow cpu的版本卸載后也會大力出奇跡,
------------------------------------------------------------------------------------------------------------------------
4)Object Detection API 框架搭建
血淚教訓,這里一定不要直接git clone https://github.com/tensorflow/models.git獲取源代碼,而是去官網上的Releases板塊中下載與tensorflow-gpu版本對應的原始碼版本,一定要對應否則會出現很多問題,
官網鏈接:https://github.com/tensorflow/models/releases

下載后放置在新建的tensorflow檔案夾中,例如<path_to_tensorflow>/models/
之后按照如下命令列指令依次安裝:
conda activate tf=1.12
# -------------------------------------------------
sudo apt-get install protobuf-compiler python-pil python-lxml python-tk
pip install --user Cython
pip install --user contextlib2
pip install --user pillow
pip install --user lxml
pip install --user jupyter
pip install --user matplotlib
# -------------------------------------------------
# COCO API installation
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
cp -r pycocotools <path_to_tensorflow>/models/research/
# -------------------------------------------------
# From tensorflow/models/research/
protoc object_detection/protos/*.proto --python_out=.
# -------------------------------------------------
# Add Libraries to PYTHONPATH
sudo gedit ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/home/.../tensorflow/models/research/slim
source ~/.bashrc
# -------------------------------------------------
python setup.py build
python setup.py install
安裝結束后,在/home/.../tensorflow/models/research/路徑下執行測驗代碼:
python object_detection/builders/model_builder_test.py
如果正確顯示如下資訊,則證明Object Detection API 框架搭建成功,否則有問題一定要解決問題不能跳過,后面使用的時候才不會出現別的bug,
................
----------------------------------------------------------------------
Ran 16 tests in 0.112s
OK
問題記錄-17 -------------------------------------------------------------------------------------------------------
Error: No module named 'tf_slim'
解決方案:跳轉到/models/research/slim目錄下安裝:
python setup.py install
問題記錄-18 -------------------------------------------------------------------------------------------------------
如果protobuf出現了問題,需要重新安裝protobuf,雖然我這里沒有用上,但依舊記錄一下安裝步驟:
首先安裝相關的依賴包:
sudo apt-get install autoconf automake libtool curl make g++ unzip
下載protobuf安裝包:https://github.com/google/protobuf/releases/
之后進入下載的protobuf安裝包目錄下面,依次執行以下命令:
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig
測驗安裝:protoc --version,如果安裝正確會輸出版本號,
之后安裝protobuf的python模塊,進入protobuf安裝包下的python檔案目錄,執行以下命令:
python setup.py build
python setup.py test
python setup.py install #(如果在這一步沒有權限執行的話,就用sudo python setup.py install )
測驗安裝:
sudo python -c 'import google.protobuf;print google.protobuf.__version__'
----------------------------------------------------------------------------------------------------------------------
二/ 制作訓練-測驗資料集,訓練MobileNet-SSD網路模型
1)按照VOC資料集格式制作訓練-測驗資料集
訓練MobileNet-SSD網路模型時,官方的訓練腳本采用的是讀取VOC資料集,因此如果自己要制作新的資料集,仿照VOC資料集格式進行制作是最為便捷的方式,
1.1)制作VOC格式資料集
按照VOC資料集的要求,創建VOC2021檔案夾,并在檔案夾中創建如下子檔案夾:
Annotations:用于存放標注后的xml檔案,檔案命名000000六位格式;
ImageSets/Main:用于存放訓練集、測驗集、驗收集的檔案串列;
JPEGImages:用于存放原始影像,影像命名000000六位格式,
注意標簽檔案和圖片集檔案路徑中不要存在中文路徑,不然訓練可能會報相關utf-8 gbk的編碼錯誤,
ImageSets/Main中存放的train.txt,val.txt, trainval.txt,test.txt的獲取方法為:
import os
import random
trainval_percent = 0.5 #訓練全集
train_percent = 0.5 #訓練集
xmlfiles_path= 'Annotations'
txtsavepath = 'ImageSets/Main'
all_xmlfiles = os.listdir(xmlfiles_path)
num=len(all_xmlfiles)#圖片xml總數
xmlfiles_list=range(num) #串列
num_val=int(num*trainval_percent)#訓練全集數
num_tra=int(num_val*train_percent)#訓練全集中訓練集數
trainval= random.sample(xmlfiles_list,num_val)#在全部圖片xml中隨機取訓練全集數
train=random.sample(trainval,num_tra)#在訓練全集中隨機取訓練集數
trainval_file = open(txtsavepath+'/trainval.txt', 'w')
test_file = open(txtsavepath+'/test.txt', 'w')
train_file = open(txtsavepath+'/train.txt', 'w')
val_file= open(txtsavepath+'/val.txt', 'w')
for i in xmlfiles_list:
name=all_xmlfiles[i][:-4]+'\n' #[:-4]從0開始到倒數第4個但不包括該位 此時為6位數圖片名稱.即檔案名稱000000.xml去掉.xml保留數字
if i in trainval:
trainval_file.write(name)
if i in train:
train_file.write(name)
else:
val_file.write(name)
else:
test_file.write(name)
trainval_file.close()
train_file.close()
val_file.close()
test_file.close()
1.2).record格式的樣本生成
*將object_detection/dataset_tools/create_pascal_tf_record.py中Line164和Line165:
examples_path = os.path.join(data_dir, year, 'ImageSets', 'Main',
'aeroplane_' + FLAGS.set + '.txt')
修改為:
examples_path = os.path.join(data_dir, year, 'ImageSets', 'Main', FLAGS.set + '.txt')
## 'aeroplane_' + FLAGS.set + '.txt')
并在Line56中添加資料集所在的檔案夾名稱:
YEARS = ['VOC2007', 'VOC2012', 'VOC2021', 'merged']
將/research/object_detection/data/pascal_label_map.pbtxt備份一個到別的路徑下,例如object_detection/ssd_model/路徑下,之后將里面的內容替換為自己資料集里的標簽與類別數量,
最后執行如下命令列分別生成.record格式的訓練集與驗證集:
python object_detection/dataset_tools/create_pascal_tf_record.py --label_map_path=/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_label_map.pbtxt --data_dir=/home/.../tensorflow/models/research/object_detection/ssd_model/VOCdevkit --year=VOC2021 --set=train --output_path=/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_train.record
python object_detection/dataset_tools/create_pascal_tf_record.py --label_map_path=/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_label_map.pbtxt --data_dir=/home/.../tensorflow/models/research/object_detection/ssd_model/VOCdevkit --year=VOC2021 --set=val --output_path=/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_val.record
2)訓練MobileNet-SSD網路模型
2.1)配置.config檔案
將object_detection\samples\configs\ssd_mobilenet_v2_coco.config另存為ssd_mobilenet_v2_pascal.config,并備份一個到別的路徑下,例如object_detection/ssd_model/路徑下,之后對該檔案進行修改:
修改1: 將Line9修改為自己資料集的類別數目:
num_classes: 9
修改2: 如果GPU加速性能較弱,需要將Line43中的網路輸入尺寸調小:
image_resizer {
fixed_shape_resizer {
height: 128
width: 128
}
}
修改3: 如果GPU加速性能較弱,需要將Line141中的批處理大小調小:
batch_size: 8
修改4: Line156為預訓練權重路徑,可以將其注釋,從頭開始訓練:
fine_tune_checkpoint: "/home/lqs/models/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt"
修改5: Line173,修改訓練集train_input_reader路徑:
train_input_reader: {
tf_record_input_reader {
input_path: "/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_train.record"
}
label_map_path: "/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_label_map.pbtxt"
}
修改6: Line182,修改驗證集val_input_reader路徑:
val_input_reader: {
tf_record_input_reader {
input_path: "/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_val.record"
}
label_map_path: "/home/.../tensorflow/models/research/object_detection/ssd_model/pascal_label_map.pbtxt"
shuffle: false
num_readers:1
}?
2.2)啟動訓練
執行如下命令列啟動訓練程序:
python object_detection/legacy/train.py --train_dir object_detection/ssd_model/train --pipeline_config_path object_detection/ssd_model/ssd_mobilenet_v2_pascal.config
可以執行如下命令列進行訓練程序的Loss損失可視化:
tensorboard --logdir=/home/.../tensorflow/models/research/object_detection/ssd_model/train/
將終端輸出的http://xxxxxx網址復制到瀏覽器中打開即可查看,

訓練結束后可以固化權重,獲得標準的.pb格式檔案,
python object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path object_detection/ssd_model/ssd_mobilenet_v2_pascal.config --trained_checkpoint_prefix object_detection/ssd_model/train/model.ckpt-100000 --output_directory object_detection/ssd_model/model/
問題記錄-19 -------------------------------------------------------------------------------------------------------
tensorboard ValueError: Duplicate plugins for name projector
在查看訓練程序可視化時發現如上錯誤,解決辦法為:
在Conda虛擬環境的目錄site-packages檔案夾下, 刪掉tensorboard--1.x.xdist-info 即可,
問題記錄-20 -------------------------------------------------------------------------------------------------------
''tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor with shape[?]''
這是tensorflow 一個經常性錯誤,錯誤的原因在于:顯卡記憶體不夠,
解決方法就是降低顯卡的使用記憶體,途徑有以下幾種措施:
1 減少Batch 的大小;
2 分析錯誤的位置,在哪一層出現顯卡不夠,比如在全連接層出現的,則降低全連接層的維度;
3 增加pool 層,降低整個網路的維度;
4 修改輸入圖片的大小,
問題記錄-21 -------------------------------------------------------------------------------------------------------
ImportError: No module named cv2
在進行影像測驗時遇到了這個問題,解決這個問題首先確保OpenCV安裝正確,之后安裝python-opencv:
sudo apt-get install python-opencv
查看是否解決,如果沒有解決執行后續步驟:
如果沒有用anaconda,找到cv2.so檔案find / -name "cv2.so",復制到usr/local/lib/python2.7/site-packages檔案夾下,
如果用的是anaconda2,復制cv2.so到home/anaconda2/lib/python2.7/site-packages檔案夾下;如果使用的是anaconda3,找到cv2.cpython-36m-x86_64-linux-gnu.so,復制v2.cpython-36m-x86_64-linux-gnu.so到home/anaconda3/lib/python3.6/site-packages檔案夾,
然后在終端cd到home,輸入python然后輸入import cv2,此時如果沒有提示錯誤就證明已經解決了這個問題,
----------------------------------------------------------------------------------------------------------------------
2.3)測驗訓練效果
依舊在/home/…/tensorflow/model/research/路徑下執行如下命令列,呼叫官方提供的測驗腳本進行測驗評估:
python object_detection/legacy/eval.py --logtostderr --checkpoint_dir=object_detection/ssd_model/train --eval_dir=object_detection/ssd_model/eval --pipeline_config_path=object_detection/ssd_model/ssd_mobilenet_v2_pascal.config
問題記錄-22 -------------------------------------------------------------------------------------------------------
ModuleNotFoundError: No module named 'pycocotools'
如果遇到這個問題,表明Object Detection API搭建程序中pycocotools工具未成功搭建,重新執行:
# COCO API installation
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
cp -r pycocotools <path_to_tensorflow>/models/research/
問題記錄-23 -------------------------------------------------------------------------------------------------------
File "/home/qinrunnan/tensorflow/models/research/object_detection/utils/object_detection_evaluation.py", line 307, in evaluate
category_name = unicode(category_name, 'utf-8')
NameError: name 'unicode' is not defined
這個問題與python版本有關,可以將object_detection_evaluation.py檔案中的307行修改為:
category_name = category_name
----------------------------------------------------------------------------------------------------------------------
三/ 搭建OpenVINO? toolkit 框架與相關環境,以及VPU加速推理
1)搭建OpenVINO? toolkit 框架與環境
OpenVINO toolkit分為開源版與Intel版,其中Intel版是Intel發布的專注于推理的深度學習框架,其特點是可將TensorFlow、caffe、ONNX等模型轉換為Intel系列硬體兼容的模型,包括Movidius與Movidius NCS 2,
Intel官網下載toolkit for linux 安裝包,下載地址:
https://software.intel.com/en-us/openvino-toolkit/choose-download/free-download-linux
官方安裝教程:https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html
我這里購買的是神經元計算棒2代,記錄一下在臺式機下搭建intel神經元計算棒開發環境的完整程序,
1.1)安裝OpenVINO? toolkit
首先進入下載地址,選擇Linux版,點擊注冊與下載,會收到一封郵件,里面有激活碼與下載地址,
在官網可以下載到toolkit:l_openvino_toolkit_.tgz,我這里用的版本是2020.2.120,在所在目錄下解壓:
tar xvf l_openvino_toolkit_2018.4.420.tgz
解壓后進入檔案夾:cd l_openvino_toolkit_2018.4.420
安裝依賴環境:
./install_cv_sdk_dependencies.sh
打開安裝的GUI界面:
./install_GUI.sh
此時會出現如下界面,按照一般安裝軟體的步驟運行即可,

之后OpenVino平臺在CPU、GPU、計算棒VPU上都能夠提供加速推理支持,
1.2)配置神經元計算棒2代硬體驅動
更新udev規則使工具套件能夠與神經計算棒通信,
為此,在終端視窗運行以下命令:cd ~/Downloads,然后一次性復制以下一大塊代碼到命令列中:
cat < 97-usbboot.rules
SUBSYSTEM=="usb", ATTRS{idProduct}=="2150", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="2485", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="f63b", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
EOF
之后,一行一行運行以下命令:
sudo cp 97-usbboot.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo ldconfig
rm 97-usbboot.rules
問題記錄-24 -------------------------------------------------------------------------------------------------------
注:在運行到“sudo ldconfig”時可能會找不到鏈接檔案,解決方法如下:
進入.so檔案所在的路徑,按以下命令建立鏈接:

再次執行“sudo ldconfig”就不會報錯了,
----------------------------------------------------------------------------------------------------------------------
1.3)測驗安裝
將神經計算棒插入計算機的 USB 埠,第一次運行這些命令時,可能需要一些時間,因為腳本要安裝軟體依賴項并編譯所有樣本代碼,
cd ~/opt/intel/computer_vision_sdk/deployment_tools/model_optimizer/install_prerequisites/
./install_prerequisites.sh
執行如下測驗代碼:
cd ~/opt/intel/computer_vision_sdk/deployment_tools/demo
sudo ./demo_squeezenet_download_convert_run.sh -d MYRIAD
這個demo是對于一幅汽車的影像進行分類檢測,輸出的預測型別與概率,引數檔案來自caffe,模型是squeezeNet,執行程序中要下載模型引數,程式自動轉換caffemodel到計算棒可以執行的graph檔案,最后程式開始運行推理,
至此,demo已經可以在計算棒上運行了,驗證安裝無誤,
問題記錄-25 -------------------------------------------------------------------------------------------------------
[ ERROR ] Can not init Myriad device: NC_ERROR
首先查看是否是硬體問題,推薦一個大佬的技術博客:https://blog.csdn.net/weixin_42730667/article/details/99676804
如果測驗后發現能夠正常發現設備,說明PC和計算棒能夠正常通信,不是硬體問題,最后發現這個問題是因為運行時需要輸入管理員密碼,應該是權限問題,重新運行:
sudo ./demo_security_barrier_camera.sh -d MYRIAD
-----------------------------------------------------------------------------------------------------------------------------
2)使用VPU加速推理訓練好的tensorflow模型
上面的步驟都是在跑官方提供的已經編譯好的模型檔案,下面介紹一下如何加速推理一個自己訓練的tensorflow模型,
2.1)將自己訓練好的Tensorflow模型轉換為IR模型
官方教程:
https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html
OpenVINO提供了深度學習推理套件(DLDT),該套件可以將各種開源框架訓練好的模型進行線上部署,這里摘錄一個原理概念圖,描述的非常到位:

首先配置Tensorflow模型轉換為IR模型所依賴的環境元素,在base環境下無需在conda的虛擬環境(否則會出現tensorflow版本沖突問題):
cd /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites.sh
這個腳本能夠安裝支持 Caffe, TensorFlow 1.x, MXNet, Kaldi*, 以及 ONNX模型轉換的所有基礎環境依賴,
或者也可以僅安裝支持Tensorflow模型轉換的環境依賴:
cd /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites_tf.sh #For TensorFlow 1.x:
sudo ./install_prerequisites_tf2.sh #For TensorFlow 2.x:
之后執行如下命令列進行.pb格式的Tensorflow模型轉換作業,轉為.bin與.xml格式檔案:
sudo python mo_tf.py --input_model /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/SSD_Mobilenet_V2_IR/tx2_model/frozen_inference_graph.pb --output=detection_boxes,detection_scores,num_detections -o /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/SSD_Mobilenet_V2_IR/IR_Models/ --tensorflow_use_custom_operations_config /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/extensions/front/tf/ssd_v2_support.json --tensorflow_object_detection_api_pipeline_config /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/SSD_Mobilenet_V2_IR/tx2_model/pipeline.config -b 8 --data_type FP16 --reverse_input_channels
注:-b后填寫Tensorflow模型在訓練時的批處理batch_size大小,
不要參考官方給出的命令列,不能用,參考這里提煉的上述代碼,親測可行,
2.2)將IR推理模型轉換為二進制blob檔案格式
有時候IR推理模型在呼叫時會出現無法讀取或不穩定的問題,這時候需要將IR推理模型轉換為二進制blob檔案格式,
執行如下代碼,將OpenVINO的IR模型轉成blob模型:
cd /opt/intel/openvino_2020.2.120/deployment_tools/inference_engine/lib/intel64
set +u
source /opt/intel/openvino_2020.2.120/bin/setupvars.sh
set -u
export MYRIAD_COMPILE=$(find /opt/intel/ -iname myriad_compile)
$MYRIAD_COMPILE -m /home/....../frozen_inference_graph.xml -ip U8 -VPU_MYRIAD_PLATFORM VPU_MYRIAD_2480 -VPU_NUMBER_OF_SHAVES 4 -VPU_NUMBER_OF_CMX_SLICES 4
同樣的,不要參考官方給出的命令列,也不能用,參考這里提煉的上述代碼,親測可行,
注:.xml與.bin檔案需要放在有管理員權限的路徑下,并且兩個檔案需要在相同路徑下,否則會報錯:
1. blob file can not be opened for export
2. blob file can not be opened for export Unknown arguments: 0x200000000
solve: also need .bin file ->IR(bin,xml)
問題記錄-26 -------------------------------------------------------------------------------------------------------
[Bug] myriad_compile fails with "Unexpected network type"
libinference_engine.so: cannot open shared object file
這個問題就是我按照官方檔案給出的命令列測驗時遇到的問題,替換為上述代碼即可解決,
參考鏈接:https://github.com/openvinotoolkit/openvino/issues/3703
-----------------------------------------------------------------------------------------------------------------------------
2.3)使用VPU進行實際加速推理測驗
初始化openvino環境:
source /opt/intel/openvino/bin/setupvars.sh
重新編譯檢測腳本:
/opt/intel/openvino_2020.2.120/inference_engine/samples/cpp
./build_samples.sh
使用MobileNet-SSD檢測腳本對IR模型進行測驗:
python /opt/intel/openvino_2020.2.120/deployment_tools/inference_engine/samples/python/object_detection_sample_ssd/object_detection_sample_ssd.py -i /home/.../test.png -m /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/SSD_Mobilenet_V2_IR/IR_Models/frozen_inference_graph.xml -d CPU
我使用這個object_detection_sample_ssd.py py腳本呼叫測驗沒能成功,可能還是跟環境有關,
這里是通過C++檔案編譯后進行測驗的:
cd /home/qinrunnan/inference_engine_cpp_samples_build/intel64/Release/
./object_detection_sample_ssd -i /home/.../1.png -m /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/SSD_Mobilenet_V2_IR/IR_Models/frozen_inference_graph.xml -d CPU
最后插入神經網路加速棒,進行VPU推理加速測驗:
./object_detection_sample_ssd -i /home/.../test.png -m /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/SSD_Mobilenet_V2_IR/IR_Models/frozen_inference_graph.xml -d MYRIAD
-----------------------------------------------------------------------------------------------------------------------------
至此本部分內容已經全部結束,回家過年啦,新年快樂~~
最近沉迷人像攝影的喬木小姐
2021.02.03
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256753.html
標籤:其他

