TFRecord 是一種二進位格式,可有效地編碼長序列的 tf.Example protos。TensorFlow 可透過 tf.data
套件輕鬆載入 TFRecord 檔案,如這裡和這裡所述。本頁說明 Earth Engine 如何在 ee.FeatureCollection
或 ee.Image
與 TFRecord 格式之間轉換資料。
將資料匯出至 TFRecord
您可以將資料表 (ee.FeatureCollection
) 或圖片 (ee.Image
) 匯出至 Google 雲端硬碟或 Cloud Storage 中的 TFRecord 檔案。匯出設定取決於您要匯出的內容,如下所述。從 Earth Engine 匯出至 TFRecord 的所有數字都會強制轉換為浮點型別。
匯出資料表
將 ee.FeatureCollection
匯出至 TFRecord 檔案時,表格中的每個 ee.Feature
與 TFRecord 檔案中的每個 tf.train.Example
(即每個記錄) 之間,會存在 1:1 的對應關係。ee.Feature
的每個屬性都會編碼為 tf.train.Feature
,其中包含與屬性中儲存的數字或 ee.Array
對應的浮點清單。如果您匯出屬性中含有陣列的表格,則需要在讀取陣列時告知 TensorFlow 陣列的形狀。匯出至 TFRecord 檔案的資料表一律會使用 GZIP 壓縮類型進行壓縮。每個匯出作業都會產生一個 TFRecord 檔案。
以下範例示範如何剖析從匯出表格中匯出的標量屬性資料 ('B2',...,'B7', 'landcover')。請注意,浮點清單的維度為 [1]
,類型為 tf.float32
:
Python
dataset = tf.data.TFRecordDataset(exportedFilePath) featuresDict = { 'B2': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B3': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B4': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B5': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B6': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B7': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'landcover': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32) } parsedDataset = dataset.map(lambda example: tf.io.parse_single_example(example, featuresDict))
請注意,這個範例說明如何讀取標量功能 (即 shape=[1]
)。如果您要匯出 2D 或 3D 陣列 (例如圖片圖塊),請在剖析時指定圖塊的形狀,例如 shape=[16, 16]
是 16x16 像素圖塊。
匯出圖片
匯出圖片時,資料會依通道、高度、寬度 (CHW) 的順序排列。匯出內容可分割成多個 TFRecord 檔案,每個檔案都包含一或多個大小為 patchSize
的修補程式,這是使用者在匯出作業中指定的。使用者在 maxFileSize
參數中指定檔案大小 (以位元組為單位)。在產生的 TFRecord 檔案中,每個補丁與每個 tf.train.Example
之間都有 1:1 的對應關係。每個圖片的每個頻帶會儲存為各 tf.train.Example
中的獨立 tf.train.Feature
,其中每個特徵中儲存的浮點清單長度為補丁寬度 * 高度。扁平化清單可分割為多個個別像素,如這個範例所示。或者,您也可以像這個範例一樣,復原匯出的補丁形狀。
為了減少邊緣效果,匯出的補丁可以重疊。具體來說,您可以指定 kernelSize
,產生大小為:
[patchSize[0] + kernelSize[0], patchSize[1] + kernelSize[1]]
每個資訊方塊都會與相鄰的資訊方塊重疊 [kernelSize[0]/2, kernelSize[1]/2]
。因此,以 patchSize
大小的圖塊邊緣像素為中心的 kernelSize
大小核取方塊,會包含完全有效的資料。圖 1 說明瞭空間中補丁的空間配置,其中「Padding Dimension」對應至核取區重疊相鄰圖片的部分:

kernelSize/2
。
formatOptions
patchSize
、maxFileSize
和 kernelSize
參數會透過 formatOptions
字典傳遞至 ee.Export
(JavaScript) 或 ee.batch.Export
(Python) 呼叫,其中索引鍵是傳遞至 Export
的其他參數名稱。匯出為 TFRecord 格式的圖片可能會產生 formatOptions
:
屬性 | 說明 | 類型 |
---|---|---|
patchDimensions |
在匯出區域中以平鋪方式顯示的尺寸,會精確覆蓋邊界框中的每個像素 (除非補丁尺寸未平均分割邊界框,在這種情況下,系統會捨棄沿著最大 x/y 邊緣的邊框圖塊)。尺寸必須大於 0。 | 陣列<int>[2]。 |
kernelSize |
如果指定,則圖塊會以邊界大小為緩衝區,在正負兩端都會產生緩衝區,導致相鄰區塊重疊。如果指定了這個屬性,則必須提供兩個維度 (分別為 X 和 Y)。 | 陣列<int>[2]。預設值:[1, 1] |
compressed |
如果設為 true,系統會使用 gzip 壓縮 .tfrecord 檔案,並附加「.gz」字尾 | 布林值。預設值:true |
maxFileSize |
匯出的 .tfrecord 大小上限 (壓縮前),以位元組為單位。檔案大小越小,分割的程度就越高 (因此輸出檔案也會增加)。 | 整數。預設值:1 GiB |
defaultValue |
在部分或完全遮蔽的像素中,每個頻帶中設定的值,以及在陣列頻帶中,從陣列頻帶建立的輸出 3D 地圖項目中,每個值所設定的值,其中來源像素的陣列長度小於地圖項目值的深度 (也就是陣列頻帶中長度為 2 的陣列像素,其索引 3 的值,對應的地圖項目深度為 3)。整數類型頻帶會捨棄小數部分,並限制在頻帶類型的範圍內。預設為 0。 | Int,預設值:0 |
tensorDepths |
將輸入陣列頻帶的名稱對應至所建立 3D 張量的深度。陣列會截斷,或以預設值填補,以符合指定的形狀。每個陣列頻帶都必須有對應的項目。 | 陣列<int>[]。預設值:[] |
sequenceData |
如果為 true,每個像素都會輸出為 SequenceExample,將標量頻帶對應至內容,並將陣列頻帶對應至範例的序列。系統會以每個圖塊中像素的列優先順序輸出 SequenceExamples,然後依照檔案序列中區域圖塊的列優先順序輸出。 | 布林值。預設值:false |
collapseBands |
如果為 true,所有頻帶都會合併為單一 3D 張量,並採用圖像中第一個頻帶的名稱。所有頻帶都會依序升級為位元組、int64,然後再升級為浮點值,這取決於所有頻帶中該序列最遠的類型。只要指定 tensor_depths,即可使用陣列頻帶。 | 布林值。預設值:false |
maskedThreshold |
修補區域中允許的遮罩像素比例上限。超過這個限額的修補程式會遭到捨棄,而不會寫入檔案。如果這個欄位設為 1 以外的值,系統就不會產生 JSON 附加檔案。預設值為 1。 | 浮動。預設值:1 |
TFRecord「混合器」檔案
匯出至 TFRecord 時,Earth Engine 會使用 TFRecord 檔案產生名為「混合器」的附加檔案。這是一個簡單的 JSON 檔案,用於定義圖塊的空間排列方式 (即地理參照)。如下一節所述,您需要使用這個檔案才能上傳針對圖像做出的預測結果。
匯出時間序列
系統支援將圖片匯出至 Examples 和 SequenceExamples。匯出至「Examples」時,匯出區域會切割成多個區塊,並以列優先順序匯出這些區塊,匯出至多個 .tfrecord 檔案,每個區塊都有各自的功能 (除非您指定 collapseBands
)。匯出至「SequenceExamples」時,系統會匯出每個像素的 SequenceExample,這些 SequenceExample 會以列優先順序匯出,然後以列優先順序匯出原始匯出區域的區塊 (如果不確定,請一律假設資料會以某種方式以列優先順序匯出)。注意:圖像的任何標量頻帶都會封裝至 SequenceExample 的內容中,而陣列頻帶則會成為實際的序列資料。
陣列頻帶
將圖片匯出為 TFRecord 格式時,陣列頻帶即可匯出。陣列頻帶的匯出功能可用於填入 SequenceExamples 的「FeatureLists」,並在匯出至一般示例時建立 3D 張量。如要瞭解如何管理陣列頻帶的長度/深度,請參閱上表中的 collapseBands
和/或 tensorDepths
。注意:使用 collapseBands
並匯出至 SequenceExamples (因此設定參數 sequenceData
) 會導致所有頻帶縮減為每個像素的單一時序。
將 TFRecords 上傳至 Earth Engine
您可以將表格 (僅限指令列) 和圖片上傳至 Earth Engine,做為 TFRecord 檔案。針對資料表,先前所述的 1:1 關係會以相反方向套用 (即 tf.train.Example
-> ee.Feature
)。
正在上傳圖像
如果您要針對匯出的圖像產生預測結果,請在上傳預測結果 (以 TFRecord 檔案格式) 時提供 Mixer,以便取得經地理參照的圖像。請注意,系統會捨棄重疊的補丁部分 (圖 1 中的邊框間距),以便在匯出的區域中提供連續的覆蓋範圍。預測結果應以 tf.train.Example
序列排列,數量和順序應與您原先匯出的圖片示例相同 (即使是任意數量的檔案)。