TFRecord و Earth Engine

TFRecord یک فرمت باینری برای رمزگذاری موثر دنباله های طولانی پروتوهای tf.Example است. فایل های TFRecord به راحتی توسط TensorFlow از طریق بسته tf.data بارگذاری می شوند که در اینجا و اینجا توضیح داده شده است. این صفحه نحوه تبدیل Earth Engine بین قالب ee.FeatureCollection یا ee.Image و TFRecord را توضیح می دهد.

صادرات داده به TFRecord

می‌توانید جداول ( ee.FeatureCollection ) یا تصاویر ( ee.Image ) را به فایل‌های TFRecord در Google Drive یا Cloud Storage صادر کنید. پیکربندی صادرات به آنچه در زیر توضیح داده شده است بستگی دارد. همه اعداد صادر شده از Earth Engine به TFRecord به نوع شناور اجباری می شوند.

در حال صادرات جداول

هنگام صادرات یک ee.FeatureCollection به یک فایل TFRecord، یک تناظر 1:1 بین هر ee.Feature در جدول و هر tf.train.Example (یعنی هر رکورد) در فایل TFRecord وجود دارد. هر ویژگی ee.Feature به عنوان یک tf.train.Feature با لیستی از شناورهای مربوط به تعداد یا ee.Array ذخیره شده در ویژگی کدگذاری می شود. اگر جدولی را با آرایه ها در ویژگی ها صادر می کنید، باید شکل آرایه را هنگام خواندن به TensorFlow بگویید. جدولی که به فایل TFRecord صادر می شود همیشه با نوع فشرده سازی GZIP فشرده می شود. شما همیشه دقیقاً یک فایل TFRecord برای هر صادرات دریافت می کنید.

مثال زیر تجزیه داده ها را از یک جدول صادراتی از ویژگی های اسکالر نشان می دهد ('B2',...,'B7', 'landcover'). توجه داشته باشید که بعد لیست های float [1] و نوع آن tf.float32 است:

پایتون

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 است که کاربر در صادرات مشخص شده است. اندازه فایل ها بر حسب بایت توسط کاربر در پارامتر maxFileSize مشخص شده است. یک تناظر 1:1 بین هر پچ و هر tf.train.Example در فایل TFRecord حاصل وجود دارد. هر باند از تصویر به عنوان یک tf.train.Feature جداگانه در هر tf.train.Example ذخیره می شود، جایی که طول لیست شناور ذخیره شده در هر ویژگی، عرض * ارتفاع وصله است. همانطور که در این مثال نشان داده شده است، لیست های مسطح را می توان به چندین پیکسل جداگانه تقسیم کرد. یا شکل پچ صادر شده را می توان مانند این مثال بازیابی کرد.

برای کمک به کاهش اثرات لبه، وصله های صادر شده می توانند همپوشانی داشته باشند. به طور خاص، شما می توانید یک kernelSize تعیین کنید که منجر به کاشی هایی با اندازه می شود:

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

هر کاشی با [kernelSize[0]/2, kernelSize[1]/2] روی کاشی‌های مجاور همپوشانی دارد. در نتیجه، یک هسته با اندازه kernelSize که در مرکز یک پیکسل لبه یک پچ با اندازه patchSize قرار دارد، حاوی داده‌های کاملاً معتبری است. آرایش فضایی وصله ها در فضا در شکل 1 نشان داده شده است، جایی که Padding Dimension مربوط به بخشی از هسته است که روی تصویر مجاور همپوشانی دارد:

نمودار تصویری TFRecord
شکل 1. وصله های تصویر چگونه صادر می شوند. بعد Padding kernelSize/2 است.

formatOptions

پارامترهای patchSize ، maxFileSize و kernelSize از طریق فرهنگ لغت formatOptions به فراخوانی ee.Export (جاوا اسکریپت) یا ee.batch.Export (Python) منتقل می‌شوند، جایی که کلیدها نام پارامترهای اضافی هستند که به Export ارسال می‌شوند. formatOptions ممکن برای یک تصویر صادر شده به فرمت TFRecord عبارتند از:

اموال توضیحات تایپ کنید
patchDimensions ابعاد بر روی ناحیه صادرات کاشی شده است، که هر پیکسل در جعبه مرزی را دقیقاً یک بار پوشش می دهد (به جز زمانی که ابعاد وصله جعبه مرزی را به طور مساوی تقسیم نمی کند که در این صورت کاشی های حاشیه در امتداد بزرگترین لبه های x/y رها می شوند). ابعاد باید > 0 باشد. آرایه<int>[2].
kernelSize اگر مشخص شود، کاشی‌ها با ابعاد حاشیه هم به صورت مثبت و هم منفی بافر می‌شوند و در نتیجه بین تکه‌های همسایه همپوشانی ایجاد می‌شود. در صورت مشخص شدن، باید دو بعد (به ترتیب X و Y) ارائه شود. آرایه<int>[2]. پیش فرض: [1، 1]
compressed اگر درست باشد، فایل‌های tfrecord. را با gzip فشرده می‌کند و پسوند «.gz» را اضافه می‌کند. بولی. پیش فرض: درست است
maxFileSize حداکثر اندازه، بر حسب بایت، برای یک tfrecord صادر شده (قبل از فشرده سازی). اندازه فایل کوچکتر باعث به اشتراک گذاری بیشتر (و بنابراین، فایل های خروجی بیشتر) می شود. بین المللی پیش فرض: 1 گیگابایت
defaultValue مقدار تنظیم شده در هر باند از یک پیکسل که تا حدی یا به طور کامل پوشانده شده است، و مقدار تنظیم شده در هر مقدار در یک ویژگی خروجی سه بعدی ساخته شده از یک باند آرایه که در آن طول آرایه در پیکسل مبدأ کمتر از عمق مقدار ویژگی بود (یعنی مقدار شاخص 3 یک پیکسل آرایه به طول 2 در یک باند آرایه با عمق ویژگی 3 مربوطه). قسمت کسری برای باندهای نوع صحیح حذف می شود و به محدوده نوع باند بسته می شود. پیش‌فرض 0 است. بین المللی پیش فرض: 0
tensorDepths نقشه برداری از نام باندهای آرایه ورودی به عمق تانسورهای سه بعدی که ایجاد می کنند. آرایه‌ها کوتاه می‌شوند یا با مقادیر پیش‌فرض برای تناسب با شکل مشخص‌شده پر می‌شوند. برای هر باند آرایه، این باید یک ورودی مربوطه داشته باشد. آرایه<int>[]. پیش فرض: []
sequenceData اگر درست باشد، هر پیکسل به عنوان یک SequenceExample باندهای اسکالر را به متن و باندهای آرایه را به دنباله‌های مثال نگاشت می‌کند. SequenceExamples به ترتیب ردیف اصلی پیکسل ها در هر پچ، و سپس به ترتیب ردیف اصلی وصله های ناحیه در دنباله فایل خروجی می شوند. بولی. پیش فرض: نادرست
collapseBands اگر درست باشد، همه باندها در یک تانسور سه بعدی ترکیب می شوند و نام اولین باند در تصویر را به خود می گیرند. همه باندها به بایت‌ها، int64 ارتقا می‌یابند، سپس به ترتیب بسته به نوع دورتر در آن توالی در همه باندها شناور می‌شوند. باندهای آرایه تا زمانی مجاز هستند که tensor_depths مشخص شده باشد. بولی. پیش فرض: نادرست
maskedThreshold حداکثر نسبت مجاز پیکسل های پوشانده شده در یک پچ. وصله هایی که بیش از این مقدار مجاز هستند به جای نوشته شدن در فایل ها حذف می شوند. اگر این فیلد روی چیزی جز 1 تنظیم شود، سایدکار JSON تولید نخواهد شد. پیش فرض 1 است. شناور. پیش فرض: 1

فایل "میکسر" TFRecord

هنگامی که به TFRecord صادر می کنید، Earth Engine یک سایدکار با فایل های TFRecord شما به نام "میکسر" تولید می کند. این یک فایل JSON ساده است که برای تعریف آرایش فضایی وصله ها (یعنی ارجاع جغرافیایی) استفاده می شود. این فایل برای آپلود پیش‌بینی‌های انجام شده روی تصاویر همانطور که در بخش بعدی توضیح داده شده است، مورد نیاز است.

صادرات سری زمانی

صادرات تصویر به Examples و SequenceExamples پشتیبانی می شود. وقتی به Examples صادر می‌کنید، منطقه صادرات به وصله‌ها بریده می‌شود و آن وصله‌ها به ترتیب ردیف اصلی به تعدادی فایل tfrecord. با هر باند ویژگی خاص خود صادر می‌شوند (مگر اینکه collapseBands مشخص کنید). هنگامی که به SequenceExamples صادر می کنید، یک SequenceExample در هر پیکسل صادر می شود، با آن SequenceExample ها به ترتیب ردیف اصلی در یک وصله، و سپس به ترتیب ردیف اصلی وصله ها در منطقه صادرات اصلی (اگر همیشه مطمئن نیستید، همیشه فرض کنید که چیزها در یک ردیف به ترتیب در مقداری ظرفیت خواهند بود). توجه: هر باند اسکالر یک تصویر در متن SequenceExample بسته می شود، در حالی که باندهای آرایه به داده های توالی واقعی تبدیل می شوند.

باندهای آرایه

هنگامی که یک تصویر به فرمت TFRecord صادر می شود، باندهای آرایه قابل صادرات هستند. صادرات باندهای آرایه وسیله‌ای برای پر کردن «FeatureLists» SequenceExamples و راهی برای ایجاد تانسورهای سه بعدی هنگام صادرات به نمونه‌های معمولی فراهم می‌کند. برای اطلاعات در مورد نحوه مدیریت طول/عمق باندهای آرایه، collapseBands و/یا tensorDepths را در جدول بالا ببینید. توجه: استفاده از collapseBands و صادرات به SequenceExamples (بنابراین تنظیم پارامتر sequenceData ) منجر به جمع شدن همه باندها به یک سری زمانی در هر پیکسل می شود.

بارگذاری TFRecords در Earth Engine

می توانید جداول (فقط خط فرمان ) و تصاویر را به عنوان فایل های TFRecord در Earth Engine آپلود کنید. برای جداول، رابطه 1:1 که قبلاً توضیح داده شد در جهت معکوس اعمال می شود (یعنی tf.train.Example -> ee.Feature ).

در حال آپلود تصاویر

اگر پیش‌بینی‌هایی را روی تصاویر صادر شده ایجاد می‌کنید، هنگام آپلود پیش‌بینی‌ها (به عنوان فایل‌های TFRecord) برای به دست آوردن تصاویر جغرافیایی مرجع، میکسر را تهیه کنید. توجه داشته باشید که قسمت همپوشانی وصله ها (بعد بالشتک در شکل 1) دور ریخته می شود تا منجر به پوشش محدود منطقه صادراتی شود. پیش‌بینی‌ها باید به‌عنوان یک دنباله tf.train.Example با همان تعداد و ترتیبی که نمونه‌های تصویر اصلی صادر شده شما (حتی بین تعداد دلخواه فایل) مرتب شوند.