天天看點

Google Earth Engine(GEE)——TFRecord 和地球引擎

TFRecord 是一種二進制格式,用于高效編碼tf.Example protos 的長序列 。TFRecord 檔案很容易被 TensorFlow 通過這裡和 這裡

tf.data

描述的包 加載 。本頁介紹了 Earth Engine 如何在 或和 TFRecord 格式之間進行轉換。 

ee.FeatureCollection

ee.Image

将資料導出到 TFRecord 

您可以将表格 ( 

ee.FeatureCollection

) 或圖像 ( 

ee.Image

) 導出到 Google Drive 或 Cloud Storage 中的 TFRecord 檔案。導出的配置取決于您要導出的内容,如下所述。從 Earth Engine 導出到 TFRecord 的所有數字都被強制轉換為浮點類型。

導出表 

導出

ee.FeatureCollection

到TFRecord檔案時,

ee.Feature

 表中的每條

tf.train.Example

 與TFRecord檔案中的每條 (即每條記錄)有1:1的對應關系 。的每個屬性都

ee.Feature

被編碼為 

tf.train.Feature

 帶有對應于數字或

ee.Array

存儲在屬性中的浮點數清單。如果在屬性中導出帶有數組的表,則需要在讀取時告訴 TensorFlow 數組的形狀。導出到 TFRecord 檔案的表将始終使用 GZIP 壓縮類型進行壓縮。對于每次導出,您總是會得到一個 TFRecord 檔案。

以下示例示範了從标量屬性('B2'、...、'B7'、'landcover')的導出表中解析資料。請注意,浮點清單的次元是 

[1]

,類型是

tf.float32

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

參數中指定。每個更新檔和

tf.train.Example

 生成的 TFRecord 檔案中的每個更新檔之間有 1:1 的對應關系 。圖像的每個波段都作為一個單獨的存儲 

tf.train.Feature

 在 each 中

tf.train.Example

,其中存儲在每個特征中的浮點清單的長度是更新檔寬度 * 高度。如本例所示,扁平化清單可以拆分為多個單獨的像素 . 或者可以像本例一樣恢複導出更新檔的形狀。

為了幫助減少邊緣效應,導出的更新檔可以重疊。具體來說,您可以指定

kernelSize

将導緻大小的圖塊:

[patchSize[0] + kernelSize[0], patchSize[1] + kernelSize[1]]
           

每個瓦片與相鄰瓦片重疊

[kernelSize[0]/2, kernelSize[1]/2]

。結果,以大小塊

kernelSize

的邊緣像素為中心的大小核心

patchSize

包含完全有效的資料。空間中更新檔的空間排列如圖 1 所示,其中 Padding Dimension 對應于核心與相鄰圖像重疊的部分:

Google Earth Engine(GEE)——TFRecord 和地球引擎

  如何導出圖像更新檔。填充次元是 

kernelSize/2

formatOptions

patchSize

maxFileSize

kernelSize

參數傳遞給

ee.Export

(JavaScript的),或者

ee.batch.Export

 通過(Python)的調用

formatOptions

字典,其中鍵是傳遞給其他參數的名稱

Export

formatOptions

 導出為 TFRecord 格式的圖像可能有:

assets 描述 類型

patchDimensions

在導出區域上平鋪的尺寸,隻覆寫邊界框中的每個像素一次(除非更新檔尺寸沒有均勻劃分邊界框,在這種情況下,沿最大 x/y 邊緣的邊界平鋪将被丢棄)。尺寸必須 > 0。 數組<int>[2]。

kernelSize

如果指定,圖塊将被正負邊距尺寸緩沖,導緻相鄰塊之間重疊。如果指定,則必須提供兩個次元(分别為 X 和 Y)。 數組<int>[2]。預設值:[1, 1]

compressed

如果為 true,則使用 gzip 壓縮 .tfrecord 檔案并附加“.gz”字尾 布爾值。預設值:真

maxFileSize

導出的 .tfrecord(壓縮前)的最大大小(以位元組為機關)。較小的檔案大小将導緻更大的分片(進而産生更多的輸出檔案)。 國際。預設值:1 GiB

defaultValue

在部分或完全屏蔽的像素的每個波段中設定的值,以及在由陣列波段制成的輸出 3D 特征中的每個值設定的值,其中源像素的陣列長度小于特征值的深度(即,對應特征深度為 3 的陣列帶中長度為 2 的陣列像素的索引 3 處的值)。整數類型帶的小數部分被删除,并被限制在帶類型的範圍内。預設為 0。 國際。預設值:0

tensorDepths

從輸入數組帶的名稱映射到它們建立的 3D 張量的深度。數組将被截斷,或用預設值填充以适應指定的形狀。對于每個陣列波段,這必須有一個相應的條目。 數組<int>[]。預設: []

sequenceData

如果為 true,則每個像素都作為 SequenceExample 輸出,将标量帶映射到上下文并将數組帶映射到示例的序列。SequenceExamples 以每個更新檔中像素的行優先順序輸出,然後按檔案序列中區域更新檔的行優先順序輸出。 布爾值。預設值:假

collapseBands

如果為 true,則所有波段将組合成一個 3D 張量,采用圖像中第一個波段的名稱。所有波段都被提升為位元組,int64s,然後根據所有波段中該序列中最遠的類型按該順序浮動。隻要指定了 tensor_depths 就允許使用數組波段。 布爾值。預設值:假

maskedThreshold

更新檔中被屏蔽像素的最大允許比例。超過此限額的更新檔将被删除而不是寫入檔案。如果此字段設定為 1 以外的任何值,則不會生成 JSON sidecar。預設為 1。 漂浮。預設值:1

TFRecord“混音器”檔案

當您導出到 TFRecord 時,Earth Engine 将使用您的 TFRecord 檔案生成一個名為“混音器”的邊車。這是一個簡單的 JSON 檔案,用于定義更新檔的空間排列(即地理配準)。如下一節所述,上傳對圖像所做的預測需要此檔案。

導出時間序列

支援将圖像導出到示例和序列示例。當您導出到示例時,導出區域被切割成更新檔,這些更新檔按行優先順序導出到一定數量的 .tfrecord 檔案中,每個頻段都有自己的特征(除非您指定

collapseBands

)。當您導出到 SequenceExamples 時,每個像素的 SequenceExample 将被導出,這些 SequenceExample 在更新檔中按行優先順序,然後按原始導出區域中更新檔的行優先順序(如果您不确定,請始終假設在某些情況下事情将按行優先順序排列)。注意:圖像的任何标量帶将被打包到 SequenceExample 的上下文中,而數組帶将成為實際的序列資料。

陣列波段

當圖像導出為 TFRecord 格式時,陣列波段是可導出的。數組帶區的導出提供了一種填充 SequenceExamples 的“FeatureLists”的方法,以及一種在導出到正常示例時建立 3D 張量的方法。有關如何管理陣列帶的長度/深度的資訊,請參閱

collapseBands

和/或 

tensorDepths

在上表中。注意:使用

collapseBands

 和導出到 SequenceExamples(是以設定參數

sequenceData

)将導緻所有波段折疊為每個像素的單個時間序列。

将 TFRecords 上傳到 Earth Engine 

您可以将表格(僅限指令行)和圖像作為 TFRecord 檔案上傳到 Earth Engine。對于表格,前面描述的 1:1 關系 适用于相反的方向(即

tf.train.Example

-> 

ee.Feature

)。

上傳圖像 

如果您對導出的影像生成預測,請在上傳預測(作為 TFRecord 檔案)以擷取地理配準影像時提供混合器。請注意,更新檔的重疊部分(圖 1 中的填充次元)将被丢棄以導緻導出區域的連續覆寫。預測應

tf.train.Example

按照與您最初導出的圖像示例(甚至在任意數量的檔案之間)具有相同數量和順序的序列進行排列 。

繼續閱讀