TFRecord dan Earth Engine

TFRecord adalah format biner untuk mengenkode urutan panjang proto 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 ee.FeatureCollection atau ee.Image dan format 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 apa yang Anda ekspor seperti yang dijelaskan di bawah. Semua angka yang diekspor dari Earth Engine ke TFRecord dipaksa 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 Anda mengekspor tabel dengan array di 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 pembacaan fitur skalar (yaitu shape=[1]). Jika Anda 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 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 * tinggi patch. Daftar yang disatukan 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 ubin tumpang-tindih dengan ubin 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. Susunan 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. formatOptions yang mungkin untuk gambar yang diekspor ke format TFRecord adalah:

PropertiDeskripsiJenis
patchDimensions Dimensi yang disusun di atas area ekspor, yang mencakup setiap piksel dalam kotak pembatas tepat satu kali (kecuali jika dimensi patch tidak membagi kotak pembatas secara merata, sehingga ubin batas di sepanjang tepi x/y terbesar akan dihapus). Dimensi harus > 0. Array<int>[2].
kernelSize Jika ditentukan, ubin akan di-buffer oleh dimensi margin secara positif dan negatif, sehingga menghasilkan tumpang-tindih antara patch yang berdekatan. Jika ditentukan, dua dimensi harus diberikan (masing-masing X dan Y). Array<int>[2]. Default: [1, 1]
compressed Jika benar, kompresi file .tfrecord dengan gzip dan tambahkan 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 seluruhnya, dan nilai yang ditetapkan di setiap nilai dalam fitur 3D output yang dibuat dari band array dengan panjang array pada piksel sumber kurang dari kedalaman nilai fitur (yaitu, nilai pada indeks 3 piksel array dengan panjang 2 dalam band array dengan kedalaman fitur yang sesuai, yaitu 3). Bagian pecahan dihapus untuk band jenis bilangan bulat, dan dibatasi ke rentang jenis band. Default-nya adalah 0. Int. Default: 0
tensorDepths Pemetaan dari nama band array input ke kedalaman tensor 3D yang dibuatnya. Array akan dipotong, atau diisi dengan nilai default agar sesuai dengan bentuk yang ditentukan. Untuk setiap band array, harus ada 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 baris utama piksel di setiap patch, lalu berdasarkan urutan baris utama patch area dalam urutan file. Boolean. Default: false
collapseBands Jika true, semua band akan digabungkan menjadi satu tensor 3D, dengan menggunakan nama band pertama dalam gambar. Semua band dipromosikan ke byte, int64, lalu float 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 yang diizinkan dalam sebuah patch. Patch yang melebihi kuota ini akan dihapus, bukan ditulis ke file. Jika kolom ini ditetapkan ke nilai selain 1, file bantuan JSON tidak akan dibuat. Default-nya adalah 1. Mengambang. Default: 1

File “mixer” TFRecord

Saat Anda mengekspor ke TFRecord, Earth Engine akan membuat file bantuan 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 citra seperti yang dijelaskan di bagian berikutnya.

Mengekspor Deret Waktu

Ekspor gambar ke Examples dan SequenceExamples didukung. Saat Anda mengekspor ke Examples, region ekspor 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 SequenceExample tersebut dalam urutan baris utama dalam patch, lalu dalam urutan baris utama patch di region ekspor asli (jika Anda tidak yakin, selalu asumsikan bahwa hal-hal akan berada dalam urutan baris utama dalam kapasitas tertentu). Catatan: setiap band skalar gambar akan dikemas ke dalam konteks SequenceExample, sementara band array akan menjadi data urutan yang sebenarnya.

Tali Smartwatch Array

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

Mengupload TFRecord 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 sebaliknya (yaitu tf.train.Example -> ee.Feature).

Mengupload gambar

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