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:

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