iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 24
0
AI & Data

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

二、教你怎麼看source code,找到核心程式碼 ep.17:把tfrecord parse完了,接著做了哪些preprocess?

文章說明

文章分段

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

 

第二篇的第5段好龐大啊...照我這速度不知道30天結束講不講得完。

 

前情提要

第二篇的ep.16把解析tfrecord的_parse_function帶完,並且為\preprocess_image()稍微預告了一下,總共有6個preprocess method會被實作並使用。


就讓我們從input_preprocess.preprocess_image_and_label()開始吧。

 

逛deeplab的github程式 (cont.)

input_preprocess.py


28-40行是preprocess_image_and_label()的參數,主角是data與label,剩下就是有關crop、resize等參數。

 

  • 62-65行是敘述這個method會回傳的變數,總共有三個,(1)是可能有被resize的原始影像、(2)是要拿去給model「看」的data、(3)是有跟data用同樣手法處理的label。
  • 接著68行有處理一個報錯:因為資料集中會有沒有label的split,而這類因為沒有答案所以不可能會拿來作為訓練資料,所以會直接被擋下來。

 


70行就是報錯的判斷式。

突然覺得71行的提醒很貼心耶怎麼回事!?

backbone沒有提供的話,這邊會給出提醒。會給出這個提醒的原因是因為,在使用backbone作為先解析data的工具時,一定會使用pretrained的參數,而每個pretrained參數所使用的資料可能不同,這會導致normalize的數值或手法不太一樣...總而言之就是,想發揮backbone的效用,最好讓你的訓練集normalize的方式跟backbone在訓練時用的方式一樣,這樣才能發揮訓練好的extractor的功用。

如果沒有使用backbone的話,他就會使用他預設的mean-subtraction去處理data。

 

  • 78行先把原始的影像保留起來
  • 80與83行將data與label轉型成tensorflow的格式,這樣他們就可以接受tensorflow針對tensor的運算。

我之前一直記不住cast的功用,一直把它跟concat搞混,而且我對於將轉型這個功能,命名成cast。一直百思不得其解,cast不是很用力地把東西投出去的意思嗎?

 


Deeplab選擇將resize作為preprocess的第一步。


有些資料集的data尺寸有大有小,例如小則100*200,大則720*420等,那去看resize_to_range()的敘述,他的意思是假設min_size_value = 320,則100*200的影像會被呈比例的放大,讓他變成320*某個數字。

不過預設min_resize_value = max_resize_value = resize_factor = None,所以預設是不會改變data尺寸的。

剩下的明天說。


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

尚未有邦友留言

立即登入留言