TFRecord, uzun tf.Example protoları dizilerini verimli bir şekilde kodlamak için kullanılan ikili biçimdir. TFRecord dosyaları, burada ve burada açıklandığı gibi 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üştürme yaptığı açıklanmaktadır.
Veriler TFRecord'a aktarılıyor
Tabloları (ee.FeatureCollection) veya görüntüleri (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 neyi dışa aktardığınıza bağlıdır. Earth Engine'den TFRecord'a aktarılan tüm sayılar, kayan nokta türüne zorlanır.
Tabloları dışa aktarma
Bir ee.FeatureCollection öğesini 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 eşleşme olur. ee.Feature öğesinin her özelliği, özellikte depolanan sayıya veya ee.Array değerine karşılık gelen kayan nokta listesiyle birlikte tf.train.Feature olarak kodlanır. Özelliklerinde diziler bulunan bir tabloyu dışa aktarırsanız TensorFlow'a okunduğunda dizinin şeklini bildirmeniz gerekir. TFRecord dosyasına aktarılan bir tablo 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 özellikler tablosundaki verilerin ayrıştırılması gösterilmektedir
('B2',...,'B7', 'landcover'). Kayan nokta listelerinin boyutunun [1], türünün ise 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ı gösterilmektedir.
2D veya 3D dizileri (ör. görüntü parçaları) dışa aktarıyorsanız ayrıştırma sırasında parçalarınızın şeklini belirtmeniz gerekir. Örneğin, 16x16 piksellik bir parça için shape=[16, 16].
Resimler dışa aktarılıyor
Bir görüntüyü dışa aktardığınızda veriler kanallar, yükseklik, genişlik (CHW) olarak sıralanır. Dışa aktarma işlemi, her biri dışa aktarma sırasında kullanıcı tarafından belirtilen patchSize boyutunda bir veya daha fazla parça içeren birden fazla TFRecord dosyasına bölünebilir. Dosyaların bayt cinsinden boyutu, kullanıcı tarafından maxFileSize parametresinde belirtilir.
Her bir yama ile sonuçtaki TFRecord dosyasında bulunan her bir tf.train.Example arasında 1:1 eşleşme vardır. Görüntünün her bandı, her tf.train.Example içinde ayrı bir tf.train.Feature olarak depolanır. Her özellikte depolanan kayan nokta listesinin uzunluğu, yama genişliği * yükseklik şeklindedir. Düzleştirilmiş listeler, bu örnekte gösterildiği gibi birden fazla bağımsız piksele bölünebilir.
Dışa aktarılan yamanın şekli, bu örnekte olduğu gibi kurtarılabilir.
Kenar etkilerini azaltmaya yardımcı olmak için dışa aktarılan yamalar çakışabilir. Özellikle, şu boyutta karolar oluşturacak bir kernelSize belirtebilirsiniz:
[patchSize[0] + kernelSize[0], patchSize[1] + kernelSize[1]]
Her karo, bitişik karolarla [kernelSize[0]/2, kernelSize[1]/2] oranında örtüşür. Sonuç olarak, patchSize boyutundaki bir parçanın kenar pikselini merkez alan kernelSize boyutundaki bir çekirdek, tamamen geçerli veriler içerir. Yamaların uzaydaki konumsal düzeni Şekil 1'de gösterilmiştir. Burada Dolgu Boyutu, çekirdeğin bitişik görüntüyle çakışan kısmına karşılık gelir:
kernelSize/2.
formatOptions
patchSize, maxFileSize ve kernelSize parametreleri, ee.Export (JavaScript) veya ee.batch.Export (Python) çağrısına bir formatOptions sözlüğü aracılığıyla iletilir. Burada anahtarlar, Export'ya iletilen ek parametrelerin adlarıdır. TFRecord biçimine aktarılan bir resim için olası formatOptions
şunlardır:
| Mülk | Açıklama | Tür |
|---|---|---|
patchDimensions |
Dışa aktarma alanına döşenen boyutlar, sınırlayıcı kutudaki her pikseli tam olarak bir kez kaplar (yama boyutları, sınırlayıcı kutuyu eşit olarak bölmediği durumlar hariç. Bu durumda, en büyük x/y kenarları boyunca kenar döşemeleri bırakılır). Boyutlar 0'dan büyük olmalıdır. | Array<int>[2]. |
kernelSize |
Belirtilirse karolar, kenar boşluğu boyutlarına göre hem pozitif hem de negatif olarak arabelleğe alınır. Bu da komşu parçalar arasında çakışmaya neden olur. Belirtilmesi durumunda iki boyut (sırasıyla X ve Y) sağlanmalıdır. | 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 bir .tfrecord dosyasının bayt cinsinden maksimum boyutu (sıkıştırmadan önce). Daha küçük bir dosya boyutu, daha fazla parçalama (ve dolayısıyla daha fazla çıkış dosyası) ile sonuçlanır. | Tam sayı. Varsayılan: 1 GiB |
defaultValue |
Kısmen veya tamamen maskelenmiş bir pikselin her bandında ayarlanan değer ve kaynak pikseldeki dizi uzunluğunun özellik değerinin derinliğinden daha 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 pikselinin 3. dizinindeki değer). Tam sayı türündeki bantlar için kesirli kısım çıkarılı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 tensörlerin derinliğine eşleme. Diziler, belirtilen şekle uyması için kesilir veya varsayılan değerlerle doldurulur. Her dizi bandı için buna karşılık gelen bir giriş olmalıdır. | Array<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 çıkarılır. SequenceExamples, her bir parçadaki piksellerin satır öncelikli sırasına ve ardından dosya dizisindeki alan parçalarının satır öncelikli sırasına göre çıkarılır. | Boole. Varsayılan: false |
collapseBands |
Doğru ise tüm bantlar tek bir 3D tensörde birleştirilir ve görüntüdeki ilk bandın adını alır. Tüm bantlar, tüm bantlar içinde bu sıradaki en uzak türe bağlı olarak sırasıyla baytlara, int64'lere ve ardından kayan değerlere yükseltilir. tensor_depths belirtildiği sürece dizi bantlarına izin verilir. | Boole. Varsayılan: false |
maskedThreshold |
Bir yamada izin verilen maksimum maskelenmiş piksel oranı. Bu sınırı aşan yamalar dosyalara yazılmak yerine silinir. Bu alan 1 dışında bir değere ayarlanırsa JSON yardımcı dosyası oluşturulmaz. Varsayılan olarak 1 değerine ayarlanır. | Float. Varsayılan: 1 |
TFRecord "mixer" dosyası
TFRecord'a aktarma yaptığınızda Earth Engine, TFRecord dosyalarınızla birlikte "karıştırıcı" adı verilen bir yardımcı dosya oluşturur. Bu, yamaların mekansal düzenini (yani coğrafi referanslandırmayı) tanımlamak için kullanılan basit bir JSON dosyasıdır. Bu dosya, sonraki bölümde açıklandığı gibi görüntülerle ilgili yapılan tahminleri yüklemek için gereklidir.
Zaman serisi dışa aktarılıyor
Hem Examples hem de SequenceExamples'a resim dışa aktarma desteklenir. Örneklere dışa aktardığınızda dışa aktarma bölgesi parçalara bölünür ve bu parçalar, her bandın kendi özelliği olacak şekilde (collapseBands belirtmediğiniz sürece) satır öncelikli sırada belirli sayıda .tfrecord dosyasına aktarılır. SequenceExamples'a 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 ve ardından orijinal dışa aktarma bölgesindeki parçaların satır öncelikli sırasında olur (emin olmadığınız durumlarda her zaman satır öncelikli sırada olacağını varsayın).
Not: Bir görüntünün tüm skaler bantları SequenceExample bağlamına paketlenirken dizi bantları gerçek dizi verileri haline gelir.
Dizi Bantları
Bir resim TFRecord biçimine aktarıldığında dizi bantları dışa aktarılabilir. Dizi bantlarının dışa aktarılması, SequenceExample'ların "FeatureList"lerini doldurmanın ve normal Example'lara aktarırken 3D tensörler oluşturmanın bir yolunu sağlar. Dizi bantlarının uzunluklarının/derinliklerinin nasıl yönetildiği hakkında bilgi için yukarıdaki tabloda collapseBands ve/veya tensorDepths bölümüne bakın. Not: collapseBands kullanımı ve SequenceExamples'a aktarma (sequenceData parametresinin ayarlanması), tüm bantların piksel başına tek bir zaman serisine daraltılmasına neden olur.
TFRecord'ları Earth Engine'e yükleme
Earth Engine'e tabloları (yalnızca komut satırı) ve görüntüleri TFRecord dosyaları olarak yükleyebilirsiniz. Tablolar için daha önce açıklanan bire bir ilişki ters yönde (yani tf.train.Example -> ee.Feature) geçerlidir.
Görüntü yükleme
Dışa aktarılan görüntülerle ilgili tahminler 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 çakışan kısmının (Şekil 1'deki Dolgu Boyutu), dışa aktarılan bölgenin bitişik kapsamını oluşturmak için silineceğini unutmayın. Tahminler, orijinal olarak dışa aktarılan resim örneklerinizle aynı sayıda ve sırada bir tf.train.Example dizisi olarak düzenlenmelidir (rastgele sayıda dosya arasında bile).