win10環境下安裝配置object_detection API填坑教程


上次寫了一個安裝tensorflow和object_detection API的教程,實現官方Demo程序,後來由於一系列更新操作,導致教程出現了更多BUG,現在重新更新一下object_detection API安裝教程,結合本次實驗的一些巨坑,順便解決一些遇到的問題。
如果你不是第一次裝,你可能遇到過這些問題:

Git Hub上公佈的教程存在的問題

Tensorflow2.0版本帶來的問題

1: 利用最新的Tensorflow2.0,會出現目前無解的bug,在最後利用自己的數據集訓練自己的模型時,訓練程序出現has no attribute的錯誤。這是因爲最新的Tensorflow2.0刪除了原本第三方開源社區貢獻的代碼,進行了整合,導致很多以前版本的程序都不能正常使用,目前還沒有解決方案。但是Tensorflow2.0是可以正產運行官方Demo的,只是訓練自己模型時會出現報錯。強烈建議大家不安裝2.0版本。
2: 針對Tensorflow2.0出現的低版本程序好多模塊沒有的問題,查找了好多資料,結合官方文檔給出的解決方案是,將程序轉換爲以前版本,但是親測過後,只有少數程序可以準確轉換,大多數還是無效。轉換方法有兩種,在引用包時將tf.xxx改爲 tf.compat.v1.xxx,意思就是利用 tf1.x版本的包;第二種方式時,利用tf2中自帶的實用工具tf_upgrade_v2,整體將程序替換爲tf1版本程序,命令爲tf_upgrade_v2 --infile 你的文件名.py --outfile 轉化後的文件名.py,但目前來說效果不佳。
3: 使用Tensorflow1.14版本+python3.5版本,會出現import tensorflow失敗的問題,主要原因在於版本不匹配。本文成功的安裝是使用Tensorflow-gpu==1.12+python3.6版本。有人問爲什麼不用annaconda默認的python3.7版本,別問,問就是Tensorflow不支持。

如果是第一次安裝,請參照以下步驟安裝

這個教程完全是一步一步引導你安裝配置環境,最後成功運行官方Demo和訓練自己的數據生成自己的模型。

1. Anaconda3安裝

這是一個集成環境,裏面集成了python、環境配置等一系列操作,不許要自己再去單獨安裝python、配置環境等問題,安裝比較簡單,下載地址:Anconda3,下載穩定版後直接安裝就行,安裝步驟網上教程很多,基本就是一直下一步,注意一點就是在下一步過程中記得勾選“all user”和“添加到系統環境變量中”就行。
安裝成功後在開始菜單欄中會發現如下圖所示文件:
在這裏插入圖片描述

2. 開始安裝Tensorflow

因爲我有GPU所以選擇安裝gpu版本,如果你沒有安裝指令不加gpu即可;

創建虛擬環境

爲了避免安裝失敗,造成整個環境的奔潰,這裏選擇在python中創建一個虛擬環境來安裝,相當於一個隔絕的環境,不會對其他環境造成影響。
打開Anaconda命令行,輸入下面命令命令行

conda create -n tensorflow1 pip python=3.5    #創建一個名稱爲tensorflow1的虛擬環境,並安裝python3.5版本
activate tensorflow1   # 激活虛擬環境
python -m pip install --upgrade pip    # 更新虛擬環境中的pip管理器
conda install --ignore-installed --upgrade tensorflow-gpu==1.12   #安裝tensorflow-gpu版本

安裝好以後,進入python,輸入命令,查看是不是安裝成功

import tensorflow as tf
tf.__version__

沒有報錯信息說明成功,我這裏是1.14版本,你看到的應該是1.12版本
在這裏插入圖片描述
沒有問題以後退出python

quit()

PS:所有操作都是在前面創建的虛擬環境tensorflow1中執行,如果關閉了請重新進入命令行然後激活tensorflow1就行,命令activate tensorflow1
繼續安裝各種依賴包………………

    conda install -c anaconda protobuf
	pip install pillow
	pip install lxml
	pip install Cython
	pip install contextlib2
	pip install jupyter
	pip install matplotlib
	pip install pandas
	pip install opencv-python
	pip install Pillow

至此,環境配置完成,接下來安裝TensorFlow Object Detection API

3.安裝TensorFlow Object Detection API

(1)下載TensorFlow Object Detection API

地址:TensorFlow Object Detection API
在這個Git Hub中下載的是最新版本的,基於tensorflow2.0,所以我這裏上傳了早期版本,可以從雲盤下載。
我的資源百度雲地址:

鏈接:https://pan.baidu.com/s/1_W4ahFmGLF-TlbAAf2SyZA
提取碼:2tua

在E盤(可以修改盤符,但是後面的文件路徑最好不要修改,因爲涉及到命令,高手忽略),創建文件夾tensorflow1,將壓縮包解壓,修改原來的名稱models-master爲models,完成目錄如下圖所示:
在這裏插入圖片描述

(2)設置環境變量:

set PYTHONPATH=E:\tensorflow1\models;E:\tensorflow1\models\research;E:\tensorflow1\models\research\slim

查看是否設置成功

echo %PYTHONPATH% 

可以打印出來則成功
在這裏插入圖片描述除此之外,還可以直接添加路徑到電腦的系統變量中。

(3)編譯Protobufs

切換目錄到E:\tensorflow1\models\research目錄下

cd /d E:\tensorflow1\models\research
protoc --python_out=. .\object_detection\protos\anchor_generator.proto .\object_detection\protos\argmax_matcher.proto .\object_detection\protos\bipartite_matcher.proto .\object_detection\protos\box_coder.proto .\object_detection\protos\box_predictor.proto .\object_detection\protos\eval.proto .\object_detection\protos\faster_rcnn.proto .\object_detection\protos\faster_rcnn_box_coder.proto .\object_detection\protos\grid_anchor_generator.proto .\object_detection\protos\hyperparams.proto .\object_detection\protos\image_resizer.proto .\object_detection\protos\input_reader.proto .\object_detection\protos\losses.proto .\object_detection\protos\matcher.proto .\object_detection\protos\mean_stddev_box_coder.proto .\object_detection\protos\model.proto .\object_detection\protos\optimizer.proto .\object_detection\protos\pipeline.proto .\object_detection\protos\post_processing.proto .\object_detection\protos\preprocessor.proto .\object_detection\protos\region_similarity_calculator.proto .\object_detection\protos\square_box_coder.proto .\object_detection\protos\ssd.proto .\object_detection\protos\ssd_anchor_generator.proto .\object_detection\protos\string_int_label_map.proto .\object_detection\protos\train.proto .\object_detection\protos\keypoint_box_coder.proto .\object_detection\protos\multiscale_anchor_generator.proto .\object_detection\protos\graph_rewriter.proto .\object_detection\protos\calibration.proto .\object_detection\protos\flexible_grid_anchor_generator.proto

完成後會在\object_detection\protos目錄下生成以一對一的xxx_name_pb2.py文件在這裏插入圖片描述

(4)在\models\research目錄中執行

python setup.py build
python setup.py install

PS:每次退出虛擬環境後,重新進入都需要設置(2)步,加入系統變量的則不用

(5)測試官方Demo

切換到models\research\object_detection下,執行

jupyter notebook

此時會在瀏覽器中打開筆記本窗口,然後找到object_detection_tutorial.ipynb文件運行全部即可。
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
至此,官方Demo運行完成,根據自己的需求修改模型、修改測試圖片路徑。
PS:在測試程序中,程序會根據你選的模型在線下載,所以執行到模型下載時速度可能比較慢,你也可以提前下載好模型,放到objection路徑下解壓,然後修改程序直接加載即可。
官方Demo程序模型在線下載部分
在這裏插入圖片描述可以將這兩個cell修改爲
在這裏插入圖片描述

#使用本地訓練好的模型
# 壓縮包中的凍結模型的路徑,這個是用來實現目標探測的核心
local_prmodel="mask_rcnn_inception_v2_coco_2018_01_28"
PATH_TO_FROZEN_GRAPH = local_prmodel + '/frozen_inference_graph.pb'

# List of the strings that is used to add correct label for each box.
# 標籤文件的路徑
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

預訓練模型下載地址:預訓練模型下載地址

4.訓練自己的數據和模型

時間緊張,下次完善,大概步驟就是:

(1)調整原始圖像尺寸

如果圖像尺寸太大,爲了加快訓練速度,可以使用resizer.py程序來減小圖像尺寸

(2)在object_detection目錄下新建images文件夾存放數據

在images\train中存放訓練數據
在images\test中存放測試數據

(3)使用LabelImg工具標註所有圖像

標註後,在train和test文件中每一張圖像都會生成一一對應的xml文件

(4)將xml生成csv文件

運行python xml_to_csv.py程序,會在images文件夾下生成train_labels.csv和test_labels.csv文件

(5)修改generate_tfrecord.py 程序

修改從31行開始的標籤映射爲自己的分類標籤
在這裏插入圖片描述
分類多的一直添加就可以

(6)生成tensorflow訓練用的TFRecord格式數據

在tensorflow中,訓練用的數據格式是TFRecord格式,當準備好上述工作後,運行下面兩條命令就可以在object_detection文件夾下生成train.record和test.record

python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record
python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record

(7)在object_detection中新建traning文件夾

在object_detection\training 中創建一個映射labelmap.pbtxt,內容和你的分類對應

item {
  id: 1
  name: 'nine'
}

item {
  id: 2
  name: 'ten'
}

item {
  id: 3
  name: 'jack'
}

item {
  id: 4
  name: 'queen'
}

item {
  id: 5
  name: 'king'
}

item {
  id: 6
  name: 'ace'
}

(8)複製訓練配置文件

複製object_detection\samples\configs文件夾中的faster_rcnn_inception_v2_pets.config到object_detection\training中
這個文件存放的是一些訓練參數,然後需要修改幾處參數爲自己的對應路徑。打開object_detection\training\faster_rcnn_inception_v2_pets.config修改下面幾處:

Line 9,num_classes : 3 爲自己的分類數
Line 106. Change fine_tune_checkpoint
Lines 123 and 125:
input_path : “E:/tensorflow1/models/research/object_detection/train.record”
label_map_path: “E:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt”
Line 130. Change num_examples to the number of images you have in the \images\test directory
Lines 135 and 137. In the eval_input_reader section, change input_path and label_map_path to:
input_path : “E:/tensorflow1/models/research/object_detection/test.record”
label_map_path: “E:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt”

(9)開始訓練,將/legacy folder中的train.py到object_detection文件夾下

python train.py --logtostderr --train_dir=training --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config

(10)保存訓練好的模型

python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章