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:
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:
| Properti | Deskripsi | Jenis |
|---|---|---|
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).