從ep.8開始在講deeplab專案底下的dataset資料夾,一開始講的是build_voc2012_data.py
,上一篇稍微講了程式的參數,還有到時候做成的tfrecord的資料結構,現在就繼續開始吧。
build_voc2012_data.py
(cont.)在看程式,尤其是看別人的寫的程式時,個人覺得最快且正確理解的做法,就是拿一份空的文檔,照著程式執行的順序打。
像是這份code第一個執行的功能是這裡,於是照著打程式的第一步就是先寫這裡,然後按照執行過後跳出的錯誤訊息,去補齊需要import的模組。之前好像有說過:run()預設會去執行同份檔案裡面,名稱是main()的副程式。
接著是用Glob
把指定的list_folder資料夾裡所有結尾是.txt
的檔,把這些.txt檔
的路徑整理成list型態,然後依序去執行_convert_dataset()
這個副程式。
_convert_dataset()
只有一個參數,指名說現在處理出的tfrecord是屬於資料集的哪個類型。
然後有做了一個報錯,就是當遇到data與label的shape,舉例2d圖像的長、寬不同,或是3d影像的axis有出現對應不上的情況,就會報錯。
在來,98-99行就是用來貼心提醒的程式,按照他寫的邏輯,就是去print出list_folder底下扣除.txt
部分的檔名。
接著100行則是打開一個txt檔,一樣按照他寫的方式,應該是用enter去分隔data的名字,所以用strip('\n')就可以把所有的data name放到filenames
這個list中。
接著就是按照之前訂定的_NUM_SHARDS
去確定說每個shard會被分到多少筆資料。
再來是build_data這個模組的class,透過ctrl+f找到build_data的import位置。
其實如果是我的話,我會把import package的部分改寫成這樣:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import math
import os.path
import sys
from six.moves import range
import tensorflow as tf
import build_data
最上面一組import是python原生的package;第二組是之後透過pip install下載的package;最後是自製的package。
這樣就可以馬上知道,build_data的程式,可以在跟這個檔案同層的資料夾找到。
於是接下來會稍微跳去build_data.py這個程式看一下。