TFRecord و Earth Engine

TFRecord یک قالب دودویی برای کدبندی کارآمد توالی‌های طولانی از tf.Example protos است. فایل‌های 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، تناظر ۱:۱ بین هر ee.Feature در جدول و هر tf.train.Example (یعنی هر سابقه) در فایل TFRecord وجود دارد. هر ویژگی ee.Feature به‌صورت tf.train.Feature با فهرستی از اعداد اعشاری متناظر با عدد یا ee.Array ذخیره‌شده در ویژگی کدگذاری می‌شود. اگر جدولی را با آرایه‌هایی در ویژگی‌ها صادر می‌کنید، باید شکل آرایه را هنگام خواندن به TensorFlow بگویید. جدولی که به فایل TFRecord صادر می‌شود همیشه با نوع فشرده‌سازی GZIP فشرده می‌شود. همیشه دقیقاً یک فایل TFRecord برای هر صادر کردن دریافت می‌کنید.

مثال زیر تجزیه داده‌ها را از جدول صادرشده ویژگی‌های اسکالر ('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]) را نشان می‌دهد. اگر آرایه‌های دوبعدی یا سه‌بعدی (مثلاً تکه‌های تصویر) را صادر می‌کنید، باید شکل تکه‌هایتان را در زمان تجزیه مشخص کنید، مثلاً shape=[16, 16] برای یک تکه ۱۶×۱۶ پیکسلی.

درحال صادر کردن تصاویر

وقتی تصویری را صادر می‌کنید، داده‌ها به‌صورت کانال، ارتفاع، عرض (CHW) مرتب می‌شوند. ممکن است برونداد به چند فایل TFRecord تقسیم شود و هر فایل حاوی یک یا چند وصله با اندازه patchSize باشد که کاربر در برونداد مشخص کرده است. اندازه فایل‌ها به بایت توسط کاربر در پارامتر maxFileSize مشخص می‌شود. بین هر وصله و هر 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 قرار دارد، حاوی داده‌های کاملاً معتبر است. آرایش فضایی تکه‌ها در فضا در شکل ۱ نشان داده شده است، که در آن «بُعد حاشیه‌گذاری» با بخشی از هسته که با تصویر مجاور هم‌پوشانی دارد مطابقت دارد:

نمودار تصویر TFRecord
شکل ۱. نحوه صادر کردن تکه‌های تصویر. بعد حاشیه داخلی kernelSize/2 است.

formatOptions

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

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

فایل «میکسر» TFRecord

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

درحال صادر کردن سری زمانی

صادر کردن تصویر به Examples و SequenceExamples پشتیبانی می‌شود. When you export to Examples, the export region is cut into patches and those patches are exported in row-major order to some number of .tfrecord files with each band its own feature (unless you specify collapseBands). When you export to SequenceExamples, a SequenceExample per-pixel will be exported, with those SequenceExamples in row-major order within a patch, and then in row-major order of patches in the original export region (if you’re ever unsure, always assume things will be in row-major order in some capacity). توجه: هر باند اسکالر تصویر در بافت SequenceExample بسته‌بندی می‌شود، درحالی‌که باندهای آرایه به داده‌های توالی واقعی تبدیل می‌شوند.

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

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

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

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

درحال بارگذاری تصاویر

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