系統環境:windows10 (版本1903 OS組建18362.535)
CPU: i5-7600 (CPU 務必要有支援AVX 指令集)
顯示卡:GeForce GTX 1060 ARMOR 6G OCV1
使用程式語言:python 3.6.7
事前準備相關套件:c++ 可轉發套件update3 (若有錯誤,確認是否有比2015 c++轉發套件更新的轉發套件,若有先解除安裝)
------------------- 環境建置 -----------------
第一步:
安裝
anaconda 在window10中 (建議可以將anaconda 加入環境變數中後面會比較方便)第二步:
會有好幾個安裝包 需要從第1個慢慢安裝到最後一個安裝包,跟著順序,建議最好不要改路徑。
cudnn :
下載下來會是一個壓縮檔,壓縮檔裡面的 bin、include、lib 放到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\
下(如果前面安裝toolkit時沒有變更路徑的話)
1.設定cudnn的環境變數
搜尋列找"編輯系統環境變數" ,點選環境變數,選擇系統變數下面的PATH新增加
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin
這三個是讓你的系統知道哪邊可以找到去控制GPU的工具的設定。
第三步
開啟CMD輸入 --name 後面是你的虛擬環境名稱
conda create --name tensorflow python=3.6
他就會開始自動安裝環境在電腦中
安裝完成後CMD前面沒有( 你虛擬環境名稱) 的話CMD
activate [你虛擬環境名稱]
pip install tensorflow-gpu==1.12
安裝完成後,測試是否有安裝成功。
CMD 進入 python shell環境中
python
>>import tensorflow as tf
>>tf.__version__
這裡正常來說應該會卡一下如果是安裝失敗會跳錯誤訊息
這樣代表tensorflow-gpu函式庫可以正常import 來使用了
---------------------------------虛擬環境的環境配置--------------------------
使用RCNN
第一步 先安裝將會用到的函式庫
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
以上套件
最後:
設置環境變數
(tensorflow) C:\Users\kevin>set PYTHONPATH=C:\tensorflow4\models;C:\tensorflow4\models\research;C:\tensorflow4\models\research\slim
!!!!!注意 必須每次開起虛擬環境的時候就設置 !!!!!
-----------------------------------------
第四步:利用tensorflow的模型進行遷移學習
我是直接在C:\ 下面創建一個資夾,將上面下載的資料放到裡面去。
像是這樣
主要會用到的資料夾位置 : models\ research \ object_detection
把下載來的所有資料夾放進去models裡面
資料夾差不多會長成這樣
(tensorflow)C:\> cd C:\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 資料夾裡 的所有副檔名為 .proto 的資料做編譯
會在 protos 資料夾裡面創建一個 XXX_pb2.py 的檔案
(tensorflow) C:\tensorflow5\models\research>python setup.py build
(tensorflow) C:\tensorflow5\models\research>python setup.py install
這裡使用別人訓練好的模型來做遷移學習,其他模型也都可以使用,這裡選一個比較快速的模型。
下載好的模型,解壓縮後放到
C:\tensorflow5\models\research\object_detection
----------- 訓練資料處裡 --------------
## RCNN讀取的檔案是XML格式檔案
## YOLO讀取的檔案是TXT格式檔案
開啟labelImg
將你想要框起來的部分框起來並說明那是甚麼 務必不要將所有照片全部拿下去訓練,請分成test:train=2:8 之類的比例去做訓練,才能測試訓練出來的結果是否優良。
將圖片和對應的XML放到 C:\tensorflow5\models\research\object_detection\images
/images
|--train
|- image1.jpg
|- image1.xml
|- ...
|--test
|- image2.jpg
|- image2.xml
|- ...
(tensorflow) C:\tensorflow5\models\research\object_detection>python xml_to_csv.py
會再 images 創建 test.csv 和 train.csv
開啟在 C:\tensorflow5\models\research\object_detection 下的 generate_tfrecord.py 編輯
row_label== ' [ 輸入你要偵測的種類名稱] '
建置 TFrecord檔案
(tensorflow) C:\tensorflow5\models\research\object_detection>
python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record
Successfully created the TFRecords: C:\tensorflow5\models\research\object_detection\train.record
(tensorflow) C:\tensorflow5\models\research\object_detection>
python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record
Successfully created the TFRecords: C:\tensorflow5\models\research\object_detection\test.record
建置 標籤地圖
必須使用notepad++ or VSCORD
在C:\tensorflow5\models\research\object_detection\training 下建立一個 labelmap.pbtxt
labelmap.pbtxt 內容
依造這樣的格式輸入後儲存
item {
id: 1
name: 'nine'
}
這裡的 id 順序必須和上面 generate_tfrecord.py 的retrun 數字一致,否則結果出來會出錯。
---------------------------------------- 訓練模型配置------------------------------
到 C:\tensorflow5\models\research\object_detection\samples\configs 複製一份
faster_rcnn_inception_v2_pets.config
到
C:\tensorflow5\models\research\object_detection\training 下
接下來的更動請都改 training 裡的 config 檔
第 10 行 請修改你要偵測種類的數量 像是上面的例子 有6種
地 12、13行 請輸入圖片的最小長度和圖片的最大長度
第 110行的路徑 修改為
C:/tensorflow5/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt
num_steps 是訓練的步數
第 126 行 input_path 輸入
C:/tensorflow5/models/research/object_detection/train.record
第 128 行 label_map_path 輸入
C:/tensorflow5/models/research/object_detection/training/labelmap.pbtxt
第 140 行 input_path 輸入
C:/tensorflow5/models/research/object_detection/test.record
第 142 行 label_map_path 輸入
C:/tensorflow5/models/research/object_detection/training/labelmap.pbtxt
儲存
---------------------------------------開始訓練!!!---------------------------
到
(tensorflow)C:\tensorflow5\models\research\object_detection\ >
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
# 如果跳出 python: can't open file 'train.py': [Errno 2] No such file or directory 只要去 object_detection\legacy\ 下找到 train.py 複製一份到object_detection就可以了
當訓練到20萬步時就會自動停下來(不過這樣基本都要花到8、9小時左右)
凍結模型:
(tensorflow)C:\tensorflow5\models\research\object_detection\ >
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
XXXX基本就是20萬除非你想要用你自己設定的其他步數檔
會在inference_graph 儲存一個將所有不需要的節點都刪掉的模型檔
最後結果
將要測試的照片存放到 C:\tensorflow5\models\research\object_detection\
(tensorflow)C:\tensorflow5\models\research\object_detection\ >
python Object_detection_image.py