TFRecord เป็นรูปแบบไบนารีสําหรับการเข้ารหัสลําดับ tf.Example
protos แบบยาวอย่างมีประสิทธิภาพ TensorFlow สามารถโหลดไฟล์ TFRecord ได้อย่างง่ายดายผ่านแพ็กเกจ tf.data
ตามที่อธิบายไว้ที่นี่และที่นี่
หน้านี้อธิบายวิธีที่ Earth Engine แปลงระหว่างรูปแบบ ee.FeatureCollection
หรือ ee.Image
กับรูปแบบ TFRecord
การส่งออกข้อมูลไปยัง TFRecord
คุณสามารถส่งออกตาราง (ee.FeatureCollection
) หรือรูปภาพ (ee.Image
) ไปยังไฟล์ TFRecord ใน Google ไดรฟ์หรือ Cloud Storage การกำหนดค่าการส่งออกจะขึ้นอยู่กับสิ่งที่คุณส่งออกตามที่อธิบายไว้ด้านล่าง ระบบจะบังคับให้ตัวเลขทั้งหมดที่ส่งออกจาก Earth Engine ไปยัง TFRecord เป็นประเภท float
การส่งออกตาราง
เมื่อส่งออก ee.FeatureCollection
ไปยังไฟล์ TFRecord จะมีการจับคู่ 1:1 ระหว่าง ee.Feature
แต่ละรายการในตารางกับ tf.train.Example
แต่ละรายการ (นั่นคือระเบียนแต่ละรายการ) ในไฟล์ TFRecord พร็อพเพอร์ตี้แต่ละรายการของ ee.Feature
ได้รับการเข้ารหัสเป็น tf.train.Feature
ที่มีรายการตัวเลขทศนิยมซึ่งสอดคล้องกับตัวเลขหรือ ee.Array
ที่เก็บไว้ในพร็อพเพอร์ตี้ หากส่งออกตารางที่มีอาร์เรย์ในพร็อพเพอร์ตี้ คุณจะต้องบอก TensorFlow เกี่ยวกับรูปร่างของอาร์เรย์เมื่ออ่าน ตารางที่ส่งออกไปยังไฟล์ TFRecord จะมีการบีบอัดด้วยประเภทการบีบอัด GZIP เสมอ คุณจะได้รับไฟล์ TFRecord 1 ไฟล์สําหรับการส่งออกแต่ละครั้ง
ตัวอย่างต่อไปนี้แสดงการแยกวิเคราะห์ข้อมูลจากตารางพร็อพเพอร์ตี้เชิงสเกลาร์ที่ส่งออก ('B2',...,'B7', 'landcover') โปรดทราบว่ามิติข้อมูลของรายการลอยคือ [1]
และประเภทคือ 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))
โปรดทราบว่าตัวอย่างนี้แสดงการอ่านฟีเจอร์สเกลาร์ (shape=[1]
) หากคุณส่งออกอาร์เรย์ 2 มิติหรือ 3 มิติ (เช่น พาร์ทช์รูปภาพ) คุณจะต้องระบุรูปร่างของพาร์ทช์ ณ เวลาแยกวิเคราะห์ เช่น shape=[16, 16]
สำหรับพาร์ทช์พิกเซล 16x16
การส่งออกรูปภาพ
เมื่อส่งออกรูปภาพ ระบบจะจัดเรียงข้อมูลเป็นช่องทาง ความสูง ความกว้าง (CHW) ระบบอาจแยกการส่งออกออกเป็นไฟล์ TFRecord หลายไฟล์ โดยแต่ละไฟล์จะมีแพตช์ขนาด patchSize
อย่างน้อย 1 รายการ ซึ่งผู้ใช้ระบุไว้ในการส่งออก ขนาดของไฟล์ในหน่วยไบต์คือขนาดที่ผู้ใช้ระบุไว้ในพารามิเตอร์ maxFileSize
แต่ละแพตช์จะเชื่อมโยงกับ tf.train.Example
แต่ละรายการในไฟล์ TFRecord ที่ได้ 1:1 ระบบจะจัดเก็บแต่ละย่านของภาพแยกกันโดยเป็น tf.train.Feature
ใน tf.train.Example
แต่ละรายการ โดยความยาวของรายการประเภท float ที่เก็บไว้ในฟีเจอร์แต่ละรายการคือความกว้าง * ความสูงของแพทช์ รายการที่ผสานแล้วจะแยกออกเป็นพิกเซลเดี่ยวๆ ได้หลายรายการตามที่แสดงในตัวอย่างนี้
หรือจะกู้คืนรูปร่างของแพทช์ที่ส่งออกดังที่แสดงในตัวอย่างนี้ก็ได้
แพตช์ที่ส่งออกสามารถซ้อนทับกันได้เพื่อช่วยลดความคมชัดของขอบ โดยเฉพาะอย่างยิ่ง คุณสามารถระบุ kernelSize
ซึ่งจะส่งผลให้การ์ดมีขนาดดังนี้
[patchSize[0] + kernelSize[0], patchSize[1] + kernelSize[1]]
แต่ละการ์ดจะซ้อนทับการ์ดที่อยู่ติดกัน [kernelSize[0]/2, kernelSize[1]/2]
ด้วยเหตุนี้ เมล็ดขนาด kernelSize
ที่กึ่งกลางอยู่ที่พิกเซลขอบของแพทช์ขนาด patchSize
จึงมีข้อมูลที่ถูกต้องทั้งหมด การจัดเรียงเชิงพื้นที่ของแพทช์ในอวกาศแสดงอยู่ในรูปที่ 1 โดยที่มิติข้อมูลการกรอกข้อมูลสอดคล้องกับส่วนของ Kernel ที่ซ้อนทับกับรูปภาพที่อยู่ติดกัน

kernelSize/2
formatOptions
ระบบจะส่งพารามิเตอร์ patchSize
, maxFileSize
และ kernelSize
ไปยังการเรียก ee.Export
(JavaScript) หรือ ee.batch.Export
(Python) ผ่านพจนานุกรม formatOptions
โดยที่คำที่เป็นคีย์คือชื่อพารามิเตอร์เพิ่มเติมที่ส่งไปยัง Export
formatOptions
ที่เป็นไปได้สำหรับรูปภาพที่ส่งออกในรูปแบบ TFRecord มีดังนี้
พร็อพเพอร์ตี้ | คำอธิบาย | ประเภท |
---|---|---|
patchDimensions |
มิติข้อมูลที่วางซ้อนกันในพื้นที่การส่งออก ซึ่งครอบคลุมทุกพิกเซลในขอบเขตการกําหนด 1 ครั้งเท่านั้น (ยกเว้นในกรณีที่มิติข้อมูลแพทช์ไม่ได้แบ่งขอบเขตการกําหนดอย่างสม่ำเสมอ ซึ่งในกรณีนี้ระบบจะทิ้งไทล์ขอบตามขอบ x/y ที่ใหญ่ที่สุด) มิติข้อมูลต้องมากกว่า 0 | Array<int>[2] |
kernelSize |
หากระบุไว้ ระบบจะบัฟเฟอร์ไทล์ตามขนาดของระยะขอบทั้งเชิงบวกและเชิงลบ ซึ่งจะทำให้การซ้อนทับกันระหว่างแพตช์ที่อยู่ติดกัน หากระบุ คุณต้องระบุมิติข้อมูล 2 รายการ (X และ Y ตามลำดับ) | Array<int>[2] ค่าเริ่มต้น: [1, 1] |
compressed |
หากเป็น "จริง" ระบบจะบีบอัดไฟล์ .tfrecord ด้วย gzip และใส่นามสกุล ".gz" ต่อท้าย | บูลีน ค่าเริ่มต้น: true |
maxFileSize |
ขนาดสูงสุดเป็นไบต์ของไฟล์ .tfrecord ที่ส่งออก (ก่อนการบีบอัด) ไฟล์ที่มีขนาดเล็กลงจะส่งผลให้มีการแยกส่วนมากขึ้น (และทำให้ไฟล์เอาต์พุตมีจำนวนมากขึ้น) | Int. ค่าเริ่มต้น: 1 GiB |
defaultValue |
ค่าที่ตั้งไว้ในแต่ละย่านของพิกเซลที่มีการมาสก์บางส่วนหรือทั้งหมด และค่าที่ตั้งไว้ที่แต่ละค่าในองค์ประกอบ 3 มิติเอาต์พุตที่สร้างจากย่านอาร์เรย์ที่ความยาวอาร์เรย์ที่พิกัดต้นทางน้อยกว่าความลึกของค่าองค์ประกอบ (เช่น ค่าที่ดัชนี 3 ของพิกเซลอาร์เรย์ที่มีความยาว 2 ในย่านอาร์เรย์ที่มีความลึกขององค์ประกอบที่เกี่ยวข้อง 3) ระบบจะละทิ้งส่วนที่เป็นทศนิยมสำหรับย่านความถี่ประเภทจำนวนเต็ม และจำกัดให้อยู่ในช่วงของประเภทย่านความถี่ ค่าเริ่มต้นคือ 0 | Int. ค่าเริ่มต้น: 0 |
tensorDepths |
การแมปจากชื่อของแถบอาร์เรย์อินพุตไปยังความลึกของเทนเซอร์ 3 มิติที่สร้างขึ้น ระบบจะตัดอาร์เรย์ให้สั้นลงหรือเพิ่มค่าเริ่มต้นเพื่อปรับให้เข้ากับรูปแบบที่ระบุ แต่ละย่านความถี่ของอาร์เรย์ต้องมีรายการที่เกี่ยวข้อง | Array<int>[] ค่าเริ่มต้น: [] |
sequenceData |
หากเป็นจริง ระบบจะแสดงผลพิกเซลแต่ละพิกเซลเป็น SequenceExample ที่แมปแถบสเกลาร์กับบริบท และแถบอาร์เรย์กับลําดับของตัวอย่าง ระบบจะแสดงผล SequenceExamples ตามลําดับแถวของพิกเซลในแต่ละแพตช์ จากนั้นตามลําดับแถวของแพตช์พื้นที่ในลําดับไฟล์ | บูลีน ค่าเริ่มต้น: เท็จ |
collapseBands |
หากเป็นค่า "จริง" ระบบจะรวมย่านความถี่ทั้งหมดให้เป็นเทนเซอร์ 3 มิติรายการเดียว โดยจะใช้ชื่อของย่านความถี่แรกในรูปภาพ ระบบจะเลื่อนระดับแบนด์ทั้งหมดเป็นไบต์, int64 แล้วเป็นตัวเลขทศนิยมตามลำดับนั้น ทั้งนี้ขึ้นอยู่กับประเภทที่อยู่ไกลที่สุดในลําดับนั้นภายในแบนด์ทั้งหมด ระบบอนุญาตให้มีแถวของอาร์เรย์ตราบใดที่มีการระบุ tensor_depths | บูลีน ค่าเริ่มต้น: เท็จ |
maskedThreshold |
สัดส่วนพิกเซลที่มีการมาสก์สูงสุดที่อนุญาตในแพตช์ ระบบจะทิ้งแพตช์ที่เกินจำนวนที่อนุญาตนี้แทนที่จะเขียนลงในไฟล์ หากตั้งค่าช่องนี้เป็นค่าอื่นที่ไม่ใช่ 1 ระบบจะไม่สร้างไฟล์แนบ JSON ค่าเริ่มต้นคือ 1 | ลอย ค่าเริ่มต้น: 1 |
ไฟล์ "มิกเซอร์" ของ TFRecord
เมื่อคุณส่งออกไปยัง TFRecord แล้ว Earth Engine จะสร้างไฟล์ Sidecar ที่มีไฟล์ TFRecord ที่เรียกว่า "Mixer" ซึ่งเป็นไฟล์ JSON ธรรมดาที่ใช้กำหนดการจัดเรียงเชิงพื้นที่ของแพทช์ (เช่น การระบุพิกัดภูมิศาสตร์) ไฟล์นี้จําเป็นสําหรับการอัปโหลดการคาดการณ์ที่ทําในภาพตามที่อธิบายไว้ในส่วนถัดไป
การส่งออกอนุกรมเวลา
ระบบรองรับการส่งออกรูปภาพไปยังทั้ง Examples และ SequenceExamples เมื่อคุณส่งออกไปยัง Examples ระบบจะตัดพื้นที่ส่งออกออกเป็นแพตช์และส่งออกแพตช์เหล่านั้นตามลําดับแถวหลักไปยังไฟล์ .tfrecord จํานวนหนึ่ง โดยแต่ละย่านความถี่จะมีฟีเจอร์เป็นของตัวเอง (เว้นแต่คุณจะระบุ collapseBands
) เมื่อคุณส่งออกไปยัง SequenceExamples ระบบจะส่งออก SequenceExample ต่อพิกเซล โดยจัดเรียง SequenceExample เหล่านั้นตามลําดับแถวหลักภายในแพตช์ จากนั้นจัดเรียงตามลําดับแถวหลักของแพตช์ในพื้นที่ส่งออกเดิม (หากไม่แน่ใจ ให้ถือว่าข้อมูลจะอยู่ในลําดับแถวหลักเสมอ)
หมายเหตุ: ระบบจะแพ็กแบนด์สเกลาร์ของรูปภาพลงในบริบทของ SequenceExample ส่วนแบนด์อาร์เรย์จะกลายเป็นข้อมูลลำดับจริง
แถบอาร์เรย์
แถบอาร์เรย์จะส่งออกได้เมื่อส่งออกรูปภาพในรูปแบบ TFRecord การส่งออกแถบอาร์เรย์เป็นวิธีป้อนข้อมูล "FeatureLists" ของ SequenceExamples และเป็นวิธีสร้างเทนเซอร์ 3 มิติเมื่อส่งออกไปยัง Examples ปกติ ดูข้อมูลเกี่ยวกับวิธีจัดการความยาว/ความลึกของย่านความถี่ของอาร์เรย์ได้ที่ collapseBands
และ/หรือ tensorDepths
ในตารางด้านบน หมายเหตุ: การใช้ collapseBands
และส่งออกไปยัง SequenceExamples (การตั้งค่าพารามิเตอร์ sequenceData
) จะส่งผลให้แถบทั้งหมดยุบเป็นอนุกรมเวลาเดียวต่อพิกเซล
การอัปโหลด TFRecord ไปยัง Earth Engine
คุณสามารถอัปโหลดตาราง (บรรทัดคำสั่งเท่านั้น) และรูปภาพไปยัง Earth Engine เป็นไฟล์ TFRecord สำหรับตาราง ความสัมพันธ์แบบ 1:1 ที่อธิบายไว้ก่อนหน้านี้จะมีผลในทิศทางย้อนกลับ (เช่น tf.train.Example
-> ee.Feature
)
การอัปโหลดภาพ
หากคุณสร้างการคาดการณ์จากภาพถ่ายที่ส่งออก ให้ระบุมิกเซอร์เมื่ออัปโหลดการคาดการณ์ (เป็นไฟล์ TFRecord) เพื่อรับภาพถ่ายที่อ้างอิงตามภูมิศาสตร์ โปรดทราบว่าระบบจะทิ้งส่วนที่ทับซ้อนกันของแพตช์ (มิติข้อมูลการกรอกข้อมูลในรูปภาพ 1) เพื่อให้ได้พื้นที่ครอบคลุมต่อเนื่องกันของภูมิภาคที่ส่งออก การคาดการณ์ควรจัดเรียงเป็นtf.train.Example
ลำดับที่มีจำนวนและลำดับเดียวกันกับตัวอย่างรูปภาพที่ส่งออกครั้งแรก (แม้จะเป็นไฟล์จำนวนเท่าใดก็ได้)