TFRecord, tf.Example protos'un uzun dizilerini verimli bir şekilde kodlamak için kullanılan ikili bir biçimdir. TFRecord dosyaları, burada ve burada açıklandığı şekilde tf.data
paketi aracılığıyla TensorFlow tarafından kolayca yüklenir.
Bu sayfada, Earth Engine'in ee.FeatureCollection
veya ee.Image
ile TFRecord biçimi arasında nasıl dönüşüm yaptığı açıklanmaktadır.
Verileri TFRecord'a aktarma
Tabloları (ee.FeatureCollection
) veya resimleri (ee.Image
) Google Drive ya da Cloud Storage'daki TFRecord dosyalarına aktarabilirsiniz. Dışa aktarma işleminin yapılandırması, aşağıda açıklandığı gibi dışa aktardığınız öğeye bağlıdır. Earth Engine'dan TFRecord'a aktarılan tüm sayılar, float türüne zorlanmaktadır.
Tabloları dışa aktarma
Bir ee.FeatureCollection
dosyasını TFRecord dosyasına aktarırken tablodaki her ee.Feature
ile TFRecord dosyasındaki her tf.train.Example
(yani her kayıt) arasında 1:1 bir ilişki vardır. ee.Feature
özelliğinin her biri, mülkte depolanan sayıya veya ee.Array
değerine karşılık gelen kayan nokta değerlerinin listesiyle birlikte bir tf.train.Feature
olarak kodlanır. Özelliklerde diziler içeren bir tabloyu dışa aktarırsanız TensorFlow'a, okunurken dizi şeklini bildirmeniz gerekir. TFRecord dosyasına aktarılan tablolar her zaman GZIP sıkıştırma türüyle sıkıştırılır. Her dışa aktarma işlemi için her zaman tam olarak bir TFRecord dosyası alırsınız.
Aşağıdaki örnekte, dışa aktarılan bir skaler özellik tablosundaki ("B2",...,"B7", "landcover") verileri ayrıştırma işlemi gösterilmektedir. Kayan listelerin boyutunun [1]
ve türün tf.float32
olduğunu unutmayın:
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))
Bu örnekte skaler özelliklerin (ör. shape=[1]
) okunmasının gösterildiğini unutmayın.
2D veya 3D dizileri (ör. resim yamaları) dışa aktarıyorsanız ayrıştırma sırasında yamalarınızin şeklini belirtirsiniz. Örneğin, 16x16 piksellik bir yama için shape=[16, 16]
.
Resimleri dışa aktarma
Bir resmi dışa aktardığınızda veriler kanal, yükseklik, genişlik (CHW) olarak sıralanır. Dışa aktarma işlemi, her biri dışa aktarma işleminde kullanıcı tarafından belirtilen patchSize
boyutunda bir veya daha fazla yamayı içeren birden fazla TFRecord dosyasına bölünebilir. Dosyaların bayt cinsinden boyutu, maxFileSize
parametresinde kullanıcı tarafından belirtilir.
Elde edilen TFRecord dosyasında her yamalı dosya ile her tf.train.Example
arasında 1:1 bir ilişki vardır. Görüntünün her bandı ayrı bir tf.train.Feature
olarak depolanır. Her tf.train.Example
'ta depolanan kayan nokta listesi uzunluğu, her özellikte yamalı genişlik * yüksekliktir. Düzleştirilmiş listeler, bu örnekte gösterildiği gibi birden çok bağımsız piksele bölünebilir.
Dilerseniz dışa aktarılan yamanın şekli bu örnekte gösterildiği gibi kurtarılabilir.
Kenar efektlerini azaltmak için dışa aktarılan yamalar örtüşebilir. Özellikle, aşağıdaki boyutlarda karolar elde edecek bir kernelSize
belirtebilirsiniz:
[patchSize[0] + kernelSize[0], patchSize[1] + kernelSize[1]]
Her karo, bitişik karolarla [kernelSize[0]/2, kernelSize[1]/2]
kadar örtüşür. Sonuç olarak, patchSize
boyutunda bir yamanın kenar pikseli üzerinde merkezlenmiş kernelSize
boyutunda bir çekirdek tamamen geçerli veriler içerir. Alandaki yamaların mekansal düzenlemesi Şekil 1'de gösterilmektedir. Burada, Dolgulama Boyutu, çekirdeğin bitişik görüntüyle örtüşen kısmına karşılık gelir:

kernelSize/2
.
formatOptions
patchSize
, maxFileSize
ve kernelSize
parametreleri, formatOptions
sözlüğü aracılığıyla ee.Export
(JavaScript) veya ee.batch.Export
(Python) çağrısına iletilir. Bu sözlüğün anahtarları, Export
'e iletilen ek parametrelerin adlarıdır. TFRecord biçiminde dışa aktarılan bir resim için olası formatOptions
değerleri şunlardır:
Mülk | Açıklama | Tür |
---|---|---|
patchDimensions |
Dışa aktarma alanı üzerinde karo halinde boyutlar, sınır kutusundaki her pikseli tam olarak bir kez kaplar (yama boyutları sınır kutusunu eşit olarak bölmediğinde hariç. Bu durumda, en büyük x/y kenarlarındaki kenar karoları atlanır). Boyutlar 0'dan büyük olmalıdır. | Array<int>[2]. |
kernelSize |
Belirtilen durumda, karolar hem pozitif hem de negatif kenar boşluğu boyutlarıyla tamponlanır. Bu da komşu yamalar arasında çakışmalara neden olur. Belirtilmişse iki boyut sağlanmalıdır (sırasıyla X ve Y). | Array<int>[2]. Varsayılan: [1, 1] |
compressed |
Doğru ise .tfrecord dosyalarını gzip ile sıkıştırır ve ".gz" son ekini ekler. | Boole. Varsayılan: true |
maxFileSize |
Dışa aktarılan .tfrecord dosyasının (sıkıştırmadan önce) bayt cinsinden maksimum boyutu. Küçük dosya boyutları, daha fazla bölüme ayırmaya (ve dolayısıyla daha fazla çıkış dosyasına) neden olur. | Dahili. Varsayılan: 1 GiB |
defaultValue |
Kısmen veya tamamen maskelenmiş bir pikselin her bandında ayarlanan değer ve kaynak pikselde dizi uzunluğunun özellik değerinin derinliğinden az olduğu bir dizi bandından oluşturulan çıkış 3D özelliğindeki her değerde ayarlanan değer (ör.karşılık gelen özellik derinliği 3 olan bir dizi bandındaki 2 uzunluğunda bir dizi pikselin 3. dizinindeki değer). Tam sayı türü bantlar için kesirli kısım atlanır ve bant türünün aralığına sabitlenir. Varsayılan olarak 0 değerine ayarlanır. | Tam sayı. Varsayılan: 0 |
tensorDepths |
Giriş dizisi bantlarının adlarından, oluşturdukları 3D tenzorların derinliğine kadar eşleme. Diziler, belirtilen şekle sığdırmak için kısaltılır veya varsayılan değerlerle doldurulur. Her dizi bandı için bu alanda karşılık gelen bir giriş olmalıdır. | Dizi<int>[]. Varsayılan: [] |
sequenceData |
Doğru ise her piksel, skaler bantları bağlama ve dizi bantlarını örneğin dizilerine eşleyen bir SequenceExample olarak çıktı olarak verilir. SequenceExamples, her yamada piksellerin satır öncelikli sırasına göre ve ardından dosya dizisindeki alan yamalarını satır öncelikli sırasına göre çıktı olarak verilir. | Boole. Varsayılan: false |
collapseBands |
Doğru ise tüm bantlar tek bir 3D tenör halinde birleştirilir ve resimdeki ilk bantın adını alır. Tüm bantlar, tüm bantlar içindeki bu sıranın en uzak türüne bağlı olarak bu sırayla baytlara, int64'lere ve ardından kayan nokta sayılara yükseltilir. tensor_depths belirtildiği sürece dizi bantlarına izin verilir. | Boole. Varsayılan: false |
maskedThreshold |
Bir yamada maskelenmiş piksellerin izin verilen maksimum oranı. Bu izin sınırını aşan yamalar, dosyalara yazılmak yerine atlanır. Bu alan 1 dışında bir değere ayarlanırsa JSON yan aracı üretilmez. Varsayılan olarak 1 değerine ayarlanır. | Kayan noktalı. Varsayılan: 1 |
TFRecord "mikser" dosyası
TFRecord'a dışa aktardığınızda Earth Engine, TFRecord dosyalarınızla birlikte "mikser" adlı bir yan dosya oluşturur. Bu, yamaların mekansal düzenini (ör. coğrafi referanslama) tanımlamak için kullanılan basit bir JSON dosyasıdır. Bu dosya, sonraki bölümde açıklandığı şekilde görüntüler üzerinde yapılan tahminlerin yüklenmesi için gereklidir.
Zaman Serilerini Dışa Aktarma
Hem Examples hem de SequenceExamples'a resim dışa aktarma işlemleri desteklenir. Examples biçiminde dışa aktardığınızda, dışa aktarma bölgesi parçalara ayrılır ve bu parçalar, her bant kendi özelliğine sahip olacak şekilde satır öncelikli sırada bir dizi .tfrecord dosyasına aktarılır (collapseBands
belirtmediğiniz sürece). SequenceExamples biçiminde dışa aktardığınızda, piksel başına bir SequenceExample dışa aktarılır. Bu SequenceExamples, bir parça içinde satır öncelikli sırada, ardından orijinal dışa aktarma bölgesindeki parçaların satır öncelikli sırasına göre aktarılır (Emin değilseniz her zaman verilerin bir şekilde satır öncelikli sırada olacağını varsayın).
Not: Bir görüntünün tüm skaler bantları bir SequenceExample bağlamında paketlenir. Dizi bantları ise gerçek dizi verileri olur.
Array Bantları
Bir resim TFRecord biçiminde dışa aktarıldığında dizi bantları dışa aktarılabilir. Dizi bantlarının dışa aktarılması, SequenceExamples'ın "FeatureLists"ini doldurmanın ve normal Examples'a aktarırken 3D tenzorlar oluşturmanın bir yolunu sağlar. Dizi bantlarının uzunluklarının/derinliklerinin nasıl yönetildiği hakkında bilgi edinmek için yukarıdaki tabloda collapseBands
ve/veya tensorDepths
'e bakın. Not: collapseBands
kullanılması ve SequenceExamples'a aktarılması (sequenceData
parametresinin ayarlanması) sonucunda tüm bantlar piksel başına tek bir zaman serisine daraltılır.
TFRecord'ları Earth Engine'e yükleme
Tabloları (yalnızca komut satırı) ve resimleri Earth Engine'a TFRecord dosyası olarak yükleyebilirsiniz. Tablolar için daha önce açıklanan 1:1 ilişki ters yönde (ör. tf.train.Example
-> ee.Feature
) geçerlidir.
Görüntü yükleme
Dışa aktarılan görüntüler hakkında tahmin oluşturuyorsanız coğrafi referanslı görüntüler elde etmek için tahminleri (TFRecord dosyaları olarak) yüklerken karıştırıcıyı sağlayın. Yamaların örtüşen kısmının (Şekil 1'deki Dolgu Boyutu), dışa aktarılan bölgenin kesintisiz şekilde kapsanması için atılabileceğini unutmayın. Tahminler, orijinal olarak dışa aktardığınız resim örnekleriyle aynı sayıda ve sırada bir tf.train.Example
dizisi olarak düzenlenmelidir (istediğiniz sayıda dosya arasında bile).