iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 23
1
AI & Data

從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型系列 第 23

二、教你怎麼看source code,找到核心程式碼 ep.16:如何把tfrecord轉成tf.data的dataset? 4

文章說明

文章分段

  1. 文章說明
  2. deeplab的簡單介紹、於我的意義
  3. tensorflow的程式碼特色
  4. 訓練流程的細節
  5. 逛deeplab的github程式,順序:train.py model.py datasets/data_generator.py …

 

前情提要

上次開頭提到處理dataset,把tfrecord用tf.data的method載入後,緊接著是要剖析與處理tfrecord。

 

前面已把parse tfrecord的程式講到一半,剖析的前半段是:

首先將一個原始的example從tfrecord中取出,接著定義此example具有哪些feature,然後用tf.parse_single_example將example根據feature解析回來。

接著再利用tf.decode_png_or_jpg,將影像解析回array。

接著繼續講parse後半部、還有preprocess的部分。

開始吧。

 

逛deeplab的github程式(cont.)

datasets/data_generator.py (cont.)


249-254行宣告了一個dictionary,具體用途不清楚,只是把key name用common的變數命名,然後把剖析好的data、data name、data的高和寬都放入。

我在打的時候突然懂了,就是一個sample,一個樣本,或者一個資料點,把接下來處理資料點會需要用到的東西都蒐集到這個dict裡,然後回傳。

 


256-267行是為了那種不需要準備label的tfrecord所做的判斷。

  • 257行是為了那種只有2維的label給擴展一個channel的維度。因為data需要經過卷積,所以他的channel數會不斷變化,直到output時維度要變得與label一樣(才可以計算loss)。
  • 258行是把label這個array在新增了一個維度在第2個axis。
  • 259行是原本label就已經是有多一個channel維度了。
  • 265行先把label的shape設為長寬沒有限制的單channel影像。會設定成這樣的原因八成是因為data的尺寸會被處理改變。
  • 267行就是在有label時,把label的資料加入sample這個dict。

 


從tfrecord剖析完的一筆example,被整理成一個叫做sample的dict,回傳出去,這樣的操作被記錄了下來,等於是整個dataset都會被這樣處理。

 


接著是328行的preprocess。

 


preprocess這個method要處理的也是一筆example,只是是經過剖析的整理的資料,所以他的parameter是寫sample。

所以,在寫這些method時,操作的對象,都是以一筆example或sample為單位的。

 


首先將data與label從sample這個dict取出來。

看到這裡我了解為什麼key name要用common另外撰寫了,這樣不同的method可以共用key name,如果要修改名稱很方便耶。

 


接下來286-299行是要將data與label進行前處理,不過估計是因為前處理要做的事情蠻多的,所以他把他寫到另外一份程式去了。這裡就是將要處理的data與label與參數放入,然後得到原始丟入的data與處理過的data與label取而代之。

 


接著要去看到底做了哪些前處理,所以就去找input_preprocess.py吧。

 
預告一下:

*input_preprocess.py

這份程式開頭就從core/資料夾引入了backbone(feature_extractor)與一些preprocess的工具。

然後只有preprocess_image_and_label這個method,但是使用到的preprocess_utils總共有6種:有resize的、還有加入一些padding的、隨機截部分的影像作為data、翻轉等等。


上一篇
二、教你怎麼看source code,找到核心程式碼 ep.15:如何把tfrecord轉成tf.data的dataset? 3
下一篇
二、教你怎麼看source code,找到核心程式碼 ep.17:把tfrecord parse完了,接著做了哪些preprocess?
系列文
從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型30

尚未有邦友留言

立即登入留言