1. 程式人生 > >Windows下將Pascal VOC轉化為TFRecords

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