TFRecord dan Earth Engine

TFRecord adalah format biner untuk mengenkode urutan panjang protos tf.Example secara efisien. File TFRecord mudah dimuat oleh TensorFlow melalui paket tf.data seperti yang dijelaskan di sini dan di sini. Halaman ini menjelaskan cara Earth Engine mengonversi antara format ee.FeatureCollection atau ee.Image dan TFRecord.

Mengekspor data ke TFRecord

Anda dapat mengekspor tabel (ee.FeatureCollection) atau gambar (ee.Image) ke file TFRecord di Google Drive atau Cloud Storage. Konfigurasi ekspor bergantung pada hal yang Anda ekspor seperti yang dijelaskan di bawah. Semua angka yang diekspor dari Earth Engine ke TFRecord dikonversi menjadi jenis float.

Mengekspor tabel

Saat mengekspor ee.FeatureCollection ke file TFRecord, ada korespondensi 1:1 antara setiap ee.Feature dalam tabel dan setiap tf.train.Example (yaitu setiap data) dalam file TFRecord. Setiap properti ee.Feature dienkode sebagai tf.train.Feature dengan daftar float yang sesuai dengan angka atau ee.Array yang disimpan di properti. Jika mengekspor tabel dengan array dalam properti, Anda harus memberi tahu TensorFlow bentuk array saat dibaca. Tabel yang diekspor ke file TFRecord akan selalu dikompresi dengan jenis kompresi GZIP. Anda selalu mendapatkan tepat satu file TFRecord untuk setiap ekspor.

Contoh berikut menunjukkan penguraian data dari tabel properti skalar yang diekspor ('B2',...,'B7', 'landcover'). Perhatikan bahwa dimensi daftar float adalah [1] dan jenisnya adalah 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))
        

Perhatikan bahwa contoh ini mengilustrasikan fitur skalar pembacaan (yaitu shape=[1]). Jika mengekspor array 2D atau 3D (misalnya patch gambar), Anda akan menentukan bentuk patch pada waktu penguraian, misalnya shape=[16, 16] untuk patch piksel 16x16.

Mengekspor gambar

Saat Anda mengekspor gambar, data akan diurutkan sebagai saluran, tinggi, lebar (CHW). Ekspor dapat dibagi menjadi beberapa file TFRecord dengan setiap file berisi satu atau beberapa patch berukuran patchSize, yang ditentukan pengguna dalam ekspor. Ukuran file dalam byte ditentukan pengguna dalam parameter maxFileSize. Ada korespondensi 1:1 antara setiap patch dan setiap tf.train.Example dalam file TFRecord yang dihasilkan. Setiap band gambar disimpan sebagai tf.train.Feature terpisah di setiap tf.train.Example, dengan panjang daftar float yang disimpan di setiap fitur adalah lebar patch * tinggi. Daftar yang diratakan dapat dibagi menjadi beberapa piksel individual seperti yang ditunjukkan dalam contoh ini. Atau, bentuk patch yang diekspor dapat dipulihkan seperti dalam contoh ini.

Untuk membantu mengurangi efek tepi, patch yang diekspor dapat tumpang-tindih. Secara khusus, Anda dapat menentukan kernelSize yang akan menghasilkan ubin berukuran:

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

Setiap kartu tumpang-tindih dengan kartu yang berdekatan sebesar [kernelSize[0]/2, kernelSize[1]/2]. Akibatnya, kernel berukuran kernelSize yang berpusat pada piksel tepi patch berukuran patchSize berisi data yang sepenuhnya valid. Pengaturan spasial patch dalam ruang diilustrasikan oleh Gambar 1, dengan Dimensi Padding sesuai dengan bagian kernel yang tumpang-tindih dengan gambar yang berdekatan:

Diagram gambar TFRecord
Gambar 1. Cara patch gambar diekspor. Dimensi Padding adalah kernelSize/2.

formatOptions

Parameter patchSize, maxFileSize, dan kernelSize diteruskan ke panggilan ee.Export (JavaScript) atau ee.batch.Export (Python) melalui kamus formatOptions, dengan kunci adalah nama parameter tambahan yang diteruskan ke Export. Kemungkinan formatOptions untuk gambar yang diekspor ke format TFRecord adalah:

PropertiDeskripsiJenis
patchDimensions Dimensi yang disusun bertingkat di area ekspor, yang mencakup setiap piksel dalam kotak pembatas tepat sekali (kecuali jika dimensi patch tidak membagi kotak pembatas secara merata dalam hal ini ubin batas di sepanjang tepi x/y terbesar akan dihapus). Dimensi harus > 0. Array<int>[2].
kernelSize Jika ditentukan, ubin akan dibuffer oleh dimensi margin secara positif dan negatif, sehingga menyebabkan tumpang-tindih di antara patch yang berdekatan. Jika ditentukan, dua dimensi harus disediakan (masing-masing X dan Y). Array<int>[2]. Default: [1, 1]
compressed Jika benar, mengompresi file .tfrecord dengan gzip dan menambahkan akhiran ".gz" Boolean. Default: true
maxFileSize Ukuran maksimum, dalam byte, untuk .tfrecord yang diekspor (sebelum kompresi). Ukuran file yang lebih kecil akan menghasilkan sharding yang lebih besar (dan, dengan demikian, lebih banyak file output). Int. Default: 1 GiB
defaultValue Nilai yang ditetapkan di setiap band piksel yang disamarkan sebagian atau sepenuhnya, dan nilai yang ditetapkan pada setiap nilai dalam fitur 3D output yang dibuat dari band array dengan panjang array di piksel sumber kurang dari kedalaman nilai fitur (yaitu nilai pada indeks 3 dari piksel array dengan panjang 2 di band array dengan kedalaman fitur yang sesuai sebesar 3). Bagian pecahan dihapus untuk rentang jenis bilangan bulat, dan dikencangkan ke rentang jenis rentang. Default-nya adalah 0. Int. Default: 0
tensorDepths Pemetaan dari nama band array input ke kedalaman tensor 3D yang dibuatnya. Array akan terpotong, atau diisi dengan nilai default agar sesuai dengan bentuk yang ditentukan. Untuk setiap band array, ini harus memiliki entri yang sesuai. Array<int>[]. Default: []
sequenceData Jika benar, setiap piksel akan di-output sebagai SequenceExample yang memetakan band skalar ke konteks dan band array ke urutan contoh. SequenceExamples adalah output dalam urutan piksel baris utama di setiap patch, lalu menurut urutan patch area baris utama dalam urutan file. Boolean. Default: false
collapseBands Jika true (benar), semua band akan digabungkan menjadi satu tensor 3D, dengan nama band pertama dalam gambar. Semua band dipromosikan ke byte, int64, lalu mengambang dalam urutan tersebut, bergantung pada jenis yang paling jauh dalam urutan tersebut dalam semua band. Band array diizinkan selama tensor_depths ditentukan. Boolean. Default: false
maskedThreshold Proporsi maksimum piksel yang disamarkan dalam patch yang diizinkan. Patch yang melebihi izin ini akan dihapus, bukan ditulis ke file. Jika kolom ini ditetapkan ke selain 1, sidecar JSON tidak akan dihasilkan. Default-nya adalah 1. Mengambang. Default: 1

File “mixer” TFRecord

Saat Anda mengekspor ke TFRecord, Earth Engine akan membuat sidecar dengan file TFRecord Anda yang disebut "mixer". Ini adalah file JSON sederhana yang digunakan untuk menentukan pengaturan spasial patch (yaitu georeferensi). File ini diperlukan untuk mengupload prediksi yang dibuat pada gambar seperti yang dijelaskan di bagian berikutnya.

Mengekspor Deret Waktu

Ekspor gambar ke Examples dan SequenceExamples didukung. Saat Anda mengekspor ke Examples, wilayah ekspor akan dipotong menjadi patch dan patch tersebut diekspor dalam urutan baris utama ke sejumlah file .tfrecord dengan setiap band memiliki fiturnya sendiri (kecuali jika Anda menentukan collapseBands). Saat Anda mengekspor ke SequenceExamples, SequenceExample per piksel akan diekspor, dengan SequenceExamples tersebut dalam urutan baris utama dalam patch, lalu dalam urutan baris utama patch di wilayah ekspor asli (jika Anda tidak yakin, selalu asumsikan bahwa semuanya akan berada dalam urutan baris utama dalam kapasitas tertentu). Catatan: setiap band skalar gambar akan dikemas ke dalam konteks SequenceExample, sedangkan band array akan menjadi data urutan yang sebenarnya.

Array Band

Band array dapat diekspor saat gambar diekspor ke format TFRecord. Ekspor band array menyediakan cara untuk mengisi “FeatureLists” SequenceExamples, dan cara untuk membuat tensor 3D saat mengekspor ke Contoh reguler. Untuk informasi tentang cara mengelola panjang/kedalaman band array, lihat collapseBands dan/atau tensorDepths dalam tabel di atas. Catatan: penggunaan collapseBands dan ekspor ke SequenceExamples (sehingga menetapkan parameter sequenceData) akan menyebabkan semua band diciutkan menjadi satu deret waktu per piksel.

Mengupload TFRecords ke Earth Engine

Anda dapat mengupload tabel (khusus command line) dan gambar ke Earth Engine sebagai file TFRecord. Untuk tabel, hubungan 1:1 yang dijelaskan sebelumnya berlaku dalam arah terbalik (yaitu tf.train.Example -> ee.Feature).

Mengupload gambar

Jika Anda membuat prediksi pada gambar yang diekspor, berikan mixer saat Anda mengupload prediksi (sebagai file TFRecord) untuk mendapatkan gambar yang digeoreferensikan. Perhatikan bahwa bagian patch yang tumpang-tindih (Dimensi Padding pada Gambar 1) akan dihapus sehingga menghasilkan cakupan yang berdekatan dari region yang diekspor. Prediksi harus diatur sebagai urutan tf.train.Example dengan jumlah dan urutan yang sama dengan contoh gambar yang diekspor awalnya (bahkan di antara jumlah file arbitrer).