用tensorflow-gpu訓練自己的神經網路Win10
來自專欄 Python & MATLAB 編程筆記
一、配置深度學習開發環境(Windows10 GPU)
品顏完月:配置深度學習開發環境(Windows10 GPU)
我的配置環境如下:
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三、標記數據集
圖片數據的整理(切割,重命名)
品顏完月:圖片批量重命名和按像素分割圖片標記工具下載地址:
LabelImg下載解壓後得到:
這是一個綠色軟體,點擊labeling.exe 即可使用。
選擇要標記的圖片進行標註:
標註成功後生成對應的.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()
代碼與『train』『test』文件以及生成的.csv文件的位置關係如下圖所示:
把『train』『test』和『train_labels』『test_labels文件放在文件夾images中
最後把文件夾images放在了這個目錄下:D: ensorflow1models
esearchobject_detection
2、.csv --> .record:
下載generate_tfrecord.py 文件
下載地址:
datitran/raccoon_dataset
下載後,我把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從上面的網站中下載 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錯誤總結 :
品顏完月:用tensorflow-gpu訓練自己的神經網路(錯誤總結)推薦閱讀:
TAG:深度學習DeepLearning | 神經網路 | TensorFlow |