用tensorflow-gpu訓練自己的神經網路Win10

用tensorflow-gpu訓練自己的神經網路Win10

來自專欄 Python & MATLAB 編程筆記

一、配置深度學習開發環境(Windows10 GPU)

品顏完月:配置深度學習開發環境(Windows10 GPU)?

zhuanlan.zhihu.com圖標

我的配置環境如下:

1、操作系統:Windows 10 64位

2、GPU:NVIDIA GeForce GTX 1050

3、GPU驅動: 385.54

4、visual studio community 2015

5、CUDA 9.0

6、cuDNN7.1.4

7、python 3.5.2

8、tensorflow-gpu 1.8

不用gpu和話也可以運行,但是訓練速度太慢,個人實踐的對比結果是:其他條件完全相同,只是CPU與GPU的區別,在CPU上訓練要十天左右,而在GPU上只需要三個小時左右。

二、安裝Tensorflow object detection API

TensorFlow object detection API要求使用其GitHub庫中提供的特定目錄結構。

具體步驟參見下面的網頁:

品顏完月:安裝 TF object detection API w10?

zhuanlan.zhihu.com圖標

三、標記數據集

圖片數據的整理(切割,重命名)

品顏完月:圖片批量重命名和按像素分割?

zhuanlan.zhihu.com圖標

圖片標記工具下載地址:

LabelImg?

tzutalin.github.io

下載解壓後得到:

這是一個綠色軟體,點擊labeling.exe 即可使用。

選擇要標記的圖片進行標註:

labelImg常用功能的快捷鍵

標註成功後生成對應的.xml文件:

三、生成可訓練數據

這一步的主要工作是:【標註生產的.xml】 -->【.csv 】-->【 .record】(可用於訓練的數據)

1、.xml -->.csv:

運行一下代碼

import osimport globimport pandas as pdimport xml.etree.ElementTree as ETdef xml_to_csv(path): xml_list = [] for xml_file in glob.glob(path + /*.xml): tree = ET.parse(xml_file) root = tree.getroot() for member in root.findall(object): value = (root.find(filename).text, int(root.find(size)[0].text), int(root.find(size)[1].text), member[0].text, int(member[4][0].text), int(member[4][1].text), int(member[4][2].text), int(member[4][3].text) ) xml_list.append(value) column_name = [filename, width, height, class, xmin, ymin, xmax, ymax] xml_df = pd.DataFrame(xml_list, columns=column_name) return xml_dfdef train(): image_path = os.path.join(os.getcwd(), train) xml_df = xml_to_csv(image_path) xml_df.to_csv(train_labels.csv, index=None) print(Successfully converted xml to csv (train).)def test(): image_path = os.path.join(os.getcwd(), test) xml_df = xml_to_csv(image_path) xml_df.to_csv(test_labels.csv, index=None) print(Successfully converted xml to csv (test).) train()test()

程序運行後在jupyter notebook 中顯示的輸出結果

代碼與『train』『test』文件以及生成的.csv文件的位置關係如下圖所示:

把『train』『test』和『train_labels』『test_labels文件放在文件夾images中

最後把文件夾images放在了這個目錄下:D: ensorflow1models
esearchobject_detection

2、.csv --> .record:

下載generate_tfrecord.py 文件

下載地址:

datitran/raccoon_dataset?

github.com圖標

下載後,我把generate_tfrecord.py 文件放在了這個目錄下:D: ensorflow1models
esearchobject_detection。

把代碼修改到適合自己的目標分類:

修改前:

修改後:

把文件夾images和generate_tfrecord.py 文件放在這個目錄下:D: ensorflow1models
esearchobject_detection

在控制台運行如下代碼:

# Create train data: python generate_tfrecord.py --csv_input=images/train_labels.csv --image_dir=images/train --output_path=train.record # Create test data: python generate_tfrecord.py --csv_input=images/test_labels.csv --image_dir=images/test --output_path=test.record"""

在這個目錄下:D: ensorflow1models
esearchobject_detection會產生test.record和train.record文件。

四、建立 Label Map 和 訓練配置

1、建立 Label Map

item { id: 1 name: meter}item { id: 2 name: red light}item { id: 3 name: blue light}item { id: 4 name: disconnector_open}item { id: 5 name: disconnector_close}

建立一個新的文件,文件名為 labelmap.pbtxt ,文件的id要與generate_tfrecord.py保持一致性

新建的taining文件夾,把新建的labelmap.pbtxt保存到taining文件夾下。

2、下載模型

下載地址:

tensorflow/models?

github.com圖標

從上面的網站中下載 Faster-RCNN-Inception-V2 model

把文件faster_rcnn_inception_v2_coco_2018_01_28放到D: ensorflow1models
esearchobject_detection 的路徑下

3、配置training pipeline

把faster_rcnn_inception_v2_pets.config複製到新建的taining文件夾下

配置文件:faster_rcnn_inception_v2_pets.config

1、要檢測的目標個數

2、fine_tune_checkpoint:

"D:/tensorflow1/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt"

3、train_input_reader:

input_path: "D:/tensorflow1/models/research/object_detection/train.record"label_map_path: "D:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt"

4、num_examples

5、eval_input_reader:

input_path: "D:/tensorflow1/models/research/object_detection/test.record"label_map_path: "D:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt"

最後把包含上述兩個文件的taining文件夾放到這個目錄下:D: ensorflow1models
esearchobject_detection

五、訓練

在anaconda prompt下配置環境變數:

set PYTHONPATH=D: ensorflow1models;D: ensorflow1models
esearch;D: ensorflow1models
esearchslim

如果關閉了環境要重新配置。

在anaconda prompt下改變路徑到

D: ensorflow1models
esearchobject_detection

然後運行下面的語句

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

開始訓練:

六、用tensorboard觀察模型

在anaconda prompt中改變路徑到D: ensorflow1models
esearchobject_detection

然後輸入下面的語句(其中traning是保存訓練過程中的數據的地方)

tensorboard --logdir=training

把網址複製到瀏覽器中,就可以看到如下圖所示的畫面;

七、保存訓練成功的模型

在anaconda prompt中改變路徑到D: ensorflow1models
esearchobject_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

其中model.ckpt-XXXX中的XXXX應該被training文件夾中的最大數值的.ckpt的文件代替

如下圖所示,應該用29639代替XXXX

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-29639 --output_directory inference_graph

在路徑D: ensorflow1models
esearchobject_detection 生成inference_graph文件夾,並且包含文件frozen_inference_graph.pb

八、用訓練好的目標檢測分類器

從參考網址中下載下面這三個文件,分別是從圖片,視頻和攝像頭實現檢測目標的功能

做適當修改後運行Object_detection_image的效果圖如下圖所示:

參考網址:

eric-erki/How-To-Train-an-Object-Detection-Classifier-for-Multiple-Objects-Using-TensorFlow-GPU-on-Windows-1?

github.com圖標

錯誤總結 :

品顏完月:用tensorflow-gpu訓練自己的神經網路(錯誤總結)?

zhuanlan.zhihu.com圖標
推薦閱讀:

TAG:深度學習DeepLearning | 神經網路 | TensorFlow |