在 Google Earth Engine 中将图像数组导出到 TFRecord
Exporting image array to TFRecord in Google Earth Engine
我想将 3 个 Landsat 图像(每个 12 个波段)的集合转换为单个图像数组,然后以 TFRecord 格式导出。我使用了下面的代码。我的输入集合名为 images
。 imageT
是累积的图像,从零波段开始,最后被丢弃。最终 imageOfSeries
图像的每个像素包含一个大小为 3x12:
的矩阵
var imageT = ee.Image(0)
images = images.map(function(image){
return image.toArray();
})
var accumulate = function(image, imageT) {
return(ee.Image(imageT).addBands(image))
};
var imageOfSeries = ee.Image(images.iterate(accumulate, imageT))
.slice(1).toArray(1).matrixTranspose()
Export.image.toDrive({
image: imageOfSeries,
description: 'imageOfSeriesExample',
scale: 30,
region: geometry,
fileFormat: 'TFRecord',
formatOptions: {
patchDimensions: [10,10],
tensorDepths: [3,12]
}
});
但是 GEE returns 在 运行 导出任务时出错并说 Arrays must have dimensions = 1
。
我怎样才能完成我的任务?我还需要了解更多关于如何在这种情况下解码 TFRecord 文件的信息,为此我在 GEE 教程中找不到任何示例。
要执行您想要的操作,您需要展平导出矩阵:导出到 TFRecord 仅支持一维数组(正如错误所指出的)。目前,EE 不支持直接数组展平,并且希望每个展平的数组元素都有标签。
张量深度也需要数组波段的一维长度。
假设您的图像只有一个阵列波段,这应该有效(详细说明):
var imageT = ee.Image(0)
images = images.map(function(image){
return image.toArray();
})
var accumulate = function(image, imageT) {
return(ee.Image(imageT).addBands(image))
};
var imageOfSeries = ee.Image(images.iterate(accumulate, imageT))
.slice(1).toArray(1).matrixTranspose()
imageOfSeriesFlattened = imageOfSeries
.arrayFlatten([
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
['13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24'],
['25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36']])
.toArray();
Export.image.toDrive({
image: imageOfSeriesFlattened,
description: 'imageOfSeriesExample',
scale: 30,
region: geometry,
fileFormat: 'TFRecord',
formatOptions: {
patchDimensions: [10,10],
tensorDepths: [36]
}
});
我想将 3 个 Landsat 图像(每个 12 个波段)的集合转换为单个图像数组,然后以 TFRecord 格式导出。我使用了下面的代码。我的输入集合名为 images
。 imageT
是累积的图像,从零波段开始,最后被丢弃。最终 imageOfSeries
图像的每个像素包含一个大小为 3x12:
var imageT = ee.Image(0)
images = images.map(function(image){
return image.toArray();
})
var accumulate = function(image, imageT) {
return(ee.Image(imageT).addBands(image))
};
var imageOfSeries = ee.Image(images.iterate(accumulate, imageT))
.slice(1).toArray(1).matrixTranspose()
Export.image.toDrive({
image: imageOfSeries,
description: 'imageOfSeriesExample',
scale: 30,
region: geometry,
fileFormat: 'TFRecord',
formatOptions: {
patchDimensions: [10,10],
tensorDepths: [3,12]
}
});
但是 GEE returns 在 运行 导出任务时出错并说 Arrays must have dimensions = 1
。
我怎样才能完成我的任务?我还需要了解更多关于如何在这种情况下解码 TFRecord 文件的信息,为此我在 GEE 教程中找不到任何示例。
要执行您想要的操作,您需要展平导出矩阵:导出到 TFRecord 仅支持一维数组(正如错误所指出的)。目前,EE 不支持直接数组展平,并且希望每个展平的数组元素都有标签。
张量深度也需要数组波段的一维长度。
假设您的图像只有一个阵列波段,这应该有效(详细说明):
var imageT = ee.Image(0)
images = images.map(function(image){
return image.toArray();
})
var accumulate = function(image, imageT) {
return(ee.Image(imageT).addBands(image))
};
var imageOfSeries = ee.Image(images.iterate(accumulate, imageT))
.slice(1).toArray(1).matrixTranspose()
imageOfSeriesFlattened = imageOfSeries
.arrayFlatten([
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
['13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24'],
['25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36']])
.toArray();
Export.image.toDrive({
image: imageOfSeriesFlattened,
description: 'imageOfSeriesExample',
scale: 30,
region: geometry,
fileFormat: 'TFRecord',
formatOptions: {
patchDimensions: [10,10],
tensorDepths: [36]
}
});