Windows下將Pascal VOC轉化為TFRecords
前言
由於TensorFlow常用TFrecords作為輸入格式,我們需要將製作好的Pascal VOC轉為TFrecords格式。使用 object detection API 內提供的指令碼。
TFRecords格式如下:
-uint64 length
-uint32 masked_crc32_of_length
-byte data[length]
-uint32 masked_crc32_of_data
前置要求:
Anaconda3(使用python3.x
製作好的Pascal VOC資料集
1、配置protobuf
Google的protobuf是一種輕便高效的結構化資料儲存格式,結構擴充套件性高,速度快,密度大。我們下載對應的protoc-3.4.0-win32.zip版本。解壓之後的檔案內容如下:
將bin資料夾所在路徑新增到環境變數PATH,再將bin下的protoc.exe移動到C:\Windows\System32目錄下。
cmd下進入~models/reseach目錄下,輸入:
protoc object_detection/protos/*.proto --python_out=.
2、設定搜尋路徑
Windows下的API使用時會出現圖示bug,需要建立xx.pth檔案,將以下兩條路徑新增進去:
~\models\research
~\models\research\slim
接著,將pth檔案移動到python安裝目錄的site-packages下。
最後,我們利用cmd執行model_builder_test.py檔案,測試環境是否搭建成功。
3、修改pascal_label_map.pbtxt
開啟~models/research/object_detection/data/pascal_label_map.pbtxt,修改其中的name為自己的分類名。
如圖所示,這裡我要識別分類的是圖片數字0~3,所以修改了對應的name。
4、修改create_pascal_tf_record.py 檔案
(1)47行:根據自己的VOC資料集格式,修改年份,如果是2007,則保持預設;
(2)49行:將data/pascal_label_map.pbtxt改為絕對路徑
(3)81行:改為img_path = os.path.join('JPEGImages', data['filename'])
(4)82行:改為full_path =os.path.join(dataset_directory, 'VOC2012',img_path+'.jpg')
(5)163行 : 改為examples_path =os.path.join(data_dir, year, 'ImageSets', 'Main','xx' + FLAGES.set + '.txt')
xx裡的內容是~VOCdevkit\VOC2012\ImageSets\Main目錄下的檔案字首名稱,如果沒有,留空就可以。
5、執行
cmd下輸入:
python ~/models/research/object_detection/dataset_tools/create_pascal_tf_record.py\
--data_dir=~/VOCdevkit \
--year=VOC2012 \
--output_path=~/xx.record
其中,波浪線的地方分別為自己的py檔案位置、VOC資料位置、轉換的record檔案儲存位置。
注:
1、 protoc必須使用3.4版本而非3.5,否則會出現找不到*.proto的bug;
2、 執行時出現很多bug,根據bug一步一步回推程式碼修改。
3、 希望對大家有幫助,有任何問題歡迎留言交流~
參考部落格:
https://blog.csdn.net/RobinTomps/article/details/78115628?locationNum=5&fps=1
http://36kr.com/p/5096924.html