TFRecord — это двоичный формат для эффективного кодирования длинных последовательностей прото tf.Example . Файлы TFRecord легко загружаются TensorFlow через пакет tf.data
, как описано здесь и здесь . На этой странице описывается, как Earth Engine выполняет преобразование между форматами ee.FeatureCollection
или ee.Image
и TFRecord.
Экспорт данных в TFRecord
Вы можете экспортировать таблицы ( ee.FeatureCollection
) или изображения ( ee.Image
) в файлы TFRecord на Google Диске или в облачном хранилище. Конфигурация экспорта зависит от того, что вы экспортируете, как описано ниже. Все числа, экспортированные из 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», «покров»). Обратите внимание, что размер списков с плавающей запятой равен [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]
). Если вы экспортируете 2D- или 3D-массивы (например, фрагменты изображений), вам следует указать форму ваших фрагментов во время анализа, например shape=[16, 16]
для фрагмента размером 16x16 пикселей.
Экспорт изображений
При экспорте изображения данные упорядочиваются по каналам, высоте и ширине (CHW). Экспорт можно разделить на несколько файлов TFRecord, каждый из которых содержит один или несколько патчей размера patchSize
, указанного пользователем при экспорте. Размер файлов в байтах указывается пользователем в параметре maxFileSize
. Между каждым патчем и каждым tf.train.Example
в результирующем файле TFRecord имеется соответствие 1:1. Каждая полоса изображения хранится как отдельный 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 соответствует части ядра, перекрывающей соседнее изображение:

kernelSize/2
. formatOptions
Параметры patchSize
, maxFileSize
и kernelSize
передаются в вызов ee.Export
(JavaScript) или ee.batch.Export
(Python) через словарь formatOptions
, где ключи — это имена дополнительных параметров, передаваемых в Export
. Возможные formatOptions
для изображения, экспортированного в формат TFRecord:
Свойство | Описание | Тип |
---|---|---|
patchDimensions | Размеры, наложенные на область экспорта, покрывающие каждый пиксель в ограничивающей рамке ровно один раз (кроме случаев, когда размеры патча не делят ограничивающую рамку поровну, и в этом случае граничные плитки вдоль наибольших краев x/y будут отброшены). Размеры должны быть > 0. | Массив<int>[2]. |
kernelSize | Если указано, плитки будут буферизованы по размерам полей как в положительном, так и в отрицательном направлении, что приведет к перекрытию соседних фрагментов. Если указано, необходимо указать два размера (X и Y соответственно). | Массив<int>[2]. По умолчанию: [1, 1] |
compressed | Если это правда, файлы .tfrecord сжимаются с помощью gzip и добавляются суффикс «.gz». | Логическое значение. По умолчанию: правда |
maxFileSize | Максимальный размер экспортируемой записи .tfrecord (до сжатия) в байтах. Меньший размер файла приведет к большему сегментированию (и, следовательно, к большему количеству выходных файлов). | Межд. По умолчанию: 1 ГиБ |
defaultValue | Значение, установленное в каждой полосе пикселя, который частично или полностью замаскирован, и значение, установленное для каждого значения в выходном 3D-объекте, созданном из полосы массива, где длина массива в исходном пикселе была меньше глубины значения признака (т. е. значение в индексе 3 пикселя массива длиной 2 в полосе массива с соответствующей глубиной объекта, равной 3). Дробная часть удаляется для полос целочисленного типа и ограничивается диапазоном типа полосы. По умолчанию 0. | Межд. По умолчанию: 0 |
tensorDepths | Сопоставление названий полос входного массива с глубиной создаваемых ими трехмерных тензоров. Массивы будут усечены или дополнены значениями по умолчанию, чтобы соответствовать указанной форме. Для каждой полосы массива должна быть соответствующая запись. | Массив<int>[]. По умолчанию: [] |
sequenceData | Если это правда, каждый пиксель выводится как SequenceExample, сопоставляющий скалярные полосы с контекстом и полосы массива с последовательностями примера. SequenceExamples выводятся в порядке строк пикселей в каждом патче, а затем в порядке строк фрагментов области в последовательности файлов. | Логическое значение. По умолчанию: ложь |
collapseBands | Если это правда, все каналы будут объединены в один 3D-тензор, получивший имя первого канала на изображении. Все полосы преобразуются в байты, int64, а затем плавают в этом порядке в зависимости от типа, самого дальнего в этой последовательности во всех полосах. Банды массива разрешены, если указан tensor_eeps. | Логическое значение. По умолчанию: ложь |
maskedThreshold | Максимально допустимая доля замаскированных пикселей в патче. Патчи, превышающие это допустимое значение, будут удалены, а не записаны в файлы. Если в этом поле установлено любое значение, кроме 1, дополнительный компонент JSON не будет создан. По умолчанию 1. | Плавать. По умолчанию: 1 |
Файл «микшера» TFRecord
Когда вы экспортируете в TFRecord, Earth Engine создаст дополнительный файл с вашими файлами TFRecord, называемый «микшер». Это простой файл JSON, используемый для определения пространственного расположения патчей (т. е. географической привязки). Этот файл необходим для загрузки прогнозов, сделанных на основе изображений, как описано в следующем разделе .
Экспорт временных рядов
Поддерживается экспорт изображений как в примеры, так и в SequenceExamples. При экспорте в «Примеры» регион экспорта разрезается на патчи, и эти патчи экспортируются в порядке строк в некоторое количество файлов .tfrecord, где каждая полоса имеет свою собственную функцию (если вы не укажете collapseBands
). При экспорте в SequenceExamples будет экспортирован попиксельный SequenceExample, при этом эти SequenceExamples будут располагаться в порядке строк внутри патча, а затем в порядке строк в исходном регионе экспорта (если вы когда-либо не уверены, всегда предполагайте, что в некоторой емкости все будет в порядке строк). Примечание. Любые скалярные полосы изображения будут упакованы в контекст SequenceExample, а полосы массива станут фактическими данными последовательности.
Массив полос
Полосы массива можно экспортировать, когда изображение экспортируется в формат TFRecord. Экспорт каналов массива позволяет заполнять «Списки объектов» SequenceExamples, а также создавать трехмерные тензоры при экспорте в обычные примеры. Информацию о том, как управляются длины/глубина полос массива, см. в collapseBands
и/или tensorDepths
в таблице выше. Примечание. Использование collapseBands
и экспорт в SequenceExamples (поэтому установка параметра sequenceData
) приведет к тому, что все каналы будут свернуты в один временной ряд для каждого пикселя.
Загрузка TFRecords в Earth Engine
Вы можете загружать таблицы (только из командной строки ) и изображения в Earth Engine в виде файлов TFRecord. Для таблиц описанное ранее соотношение 1:1 применяется в обратном направлении (т. е. tf.train.Example
-> ee.Feature
).
Загрузка изображений
Если вы создаете прогнозы на основе экспортированных изображений, предоставьте микшер при загрузке прогнозов (в виде файлов TFRecord), чтобы получить изображения с географической привязкой. Обратите внимание, что перекрывающаяся часть патчей (размер заполнения на рисунке 1) будет отброшена, что приведет к одновременному покрытию экспортируемой области. Прогнозы должны быть организованы в виде последовательности tf.train.Example
того же номера и порядка, что и исходные примеры экспортированных изображений (даже между произвольным количеством файлов).