Collocated Irradiance Network 实战指南:CERES 点扩散函数权重计算与 GOES-16 ABI 辐照度数据加载
人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本指南围绕 collocated_irradiance_network 包展开它配套论文《Estimates Of Broadband Upwelling Irradiance From GOES-16 ABI》发布用于解决用 GOES-16 ABI 窄带成像估计宽带上行辐照度这一遥感问题中不可或缺的协同定位collocation环节。读完本文你将掌握三件事如何用纯 NumPy 向量化实现 CERES 仪器的点扩散函数PSF权重计算、如何解析训练/验证用的 TFRecord 数据、以及如何加载模型输出的辐照度zarr 格式用于气候现象研究。一、项目背景为什么需要 CERES 与 GOES-16 的协同定位CERESClouds and the Earths Radiant Energy System是测量地球辐射收支尤其是宽带辐照度的卫星仪器而 GOES-16 搭载的 ABIAdvanced Baseline Imager则以高时空分辨率提供窄带多通道观测。要训练从 ABI 窄带图像估计宽带辐照度的模型就必须把 CERES 的辐射测量值与 ABI 的像素对应起来——这就是本包名称中 collocated协同定位的含义。CERES 脚印footprint覆盖的地面范围随观测几何变化很大远大于 GOES-16 ABI 单个像素2km 标称分辨率、10–15 分钟刷新率。因此每个 CERES 脚印会覆盖一片 ABI 像素需要用点扩散函数为每个像素分配权重。仓库中的 ceres_footprint.py 正是对这一过程的实现其数学依据是 CERES 仪器的算法理论文档ATBD即代码 docstring 中引用的 atbd-cer-09实现了其中 Figure 4.4-1、4.4-3、4.4-9 与 Table 4.4-2 对应的公式。二、仓库结构总览文件作用ceres_footprint.pyCERES 点扩散函数的向量化 NumPy 实现ceres_footprint_test.py单元测试用 ATBD 的 Table 4.4-2 与 Figure 4.4-9 基准数据验证实现Collocated_Irradiance_Network_data_loading.ipynbColab 笔记本演示读取 TFRecord 训练/验证数据与加载 zarr 辐照度输出requirements.txt依赖absl-py、numpy1.21.5run.sh一键脚本创建虚拟环境、安装依赖并运行单元测试README.md包说明三、CERES 点扩散函数的向量化实现3.1 物理常量与坐标体系实现中定义了一组与 CERES 观测几何直接相关的常量见 ceres_footprint.py常量值含义EARTH_RADIUS_KM6367地球半径kmSATELLITE_HEIGHT_KM705卫星轨道高度kmOPTICAL_FOV_CONSTANT_A0.65光学视场常量对应 ATBD Figure 4.4-1CENTROID_OFFSET0.96质心偏移度对应 ATBD 第 19 页底部及 Figure 4.4-3整个实现围绕卫星 → CERES 脚印质心 → GOES 像素的三方几何关系展开全程使用向量化 NumPy 运算因此可以一次性为任意数量的位置如整片 ABI 像素网格快速计算 PSF 权重而无需逐像素循环。3.2 核心调用链summation_weights()是面向用户的主入口内部调用链如下normalize() → Vector3() → satellite_centered_unit_vectors() → footprint_internal_coords() → delta_prime_f() / delta_prime_b() / big_f() → point_spread_function() → summation_weights()归一化3.3 逐函数详解normalize(latitude_degrees, longitude_degrees)将纬度钳制到 [-90, 90]把经度用np.around实现的 remainder 运算平移到 [-180, 180]保证后续三角计算数值稳定。Vector3(latitude_degrees, longitude_degrees)把经纬度转换为地心三维单位向量x cosθ·cosφy sinθ·cosφz sinφ支持传入数组从而一次性构造整批向量。satellite_centered_unit_vectors(...)接收 GOES 像素经纬度、星下点sub-satellite point经纬度和脚印质心经纬度返回y_hat_prime从卫星指向脚印质心的单位向量z_hat_prime沿扫描along-scan即 delta方向的轴y_hat_prime_goes从卫星指向各 GOES 像素的单位向量。计算过程中通过余弦定理推导卫星到各点的距离rho见 ceres_footprint.py再以叉积构造正交基。footprint_internal_coords(...)把单位向量转换为脚印内部坐标系下的两个角坐标delta沿扫描方向与beta跨扫描方向对应 ATBD 公式 4.4-6、4.4-7、4.4-8。需要注意由于文档说明 PSF 关于沿扫描轴delta 轴对称beta在这里被取了绝对值。delta_prime_f(beta)/delta_prime_b(beta)分别返回沿扫描光学视场的前向、后向边界对应 Figure 4.4-1 左侧的几何关系。边界由OPTICAL_FOV_CONSTANT_A决定当beta超出2 * A时返回np.nan表示该角度已超出视场。big_f(ksi)实现 ATBD 公式 4.4-2 的F(ksi)使用文档给出的拟合系数a1 1.84205 a2 -0.22502 b1 1.47034 b2 0.45904 c1 1.98412point_spread_function(delta_prime, beta)实现公式 4.4-1 的 PSF。注意该函数接收的是delta_prime已叠加CENTROID_OFFSET偏移而非原始delta输入必须为二维数组函数内有断言检查。函数用np.where分段处理|beta| 2A处权重为 0在视场边界之间用big_f的差分计算权重。summation_weights(goes_lats, goes_lngs, subsat_lat, subsat_lng, centroid_lat, centroid_lng, vz_rate_of_change)端到端主入口。它先算出每个 GOES 像素的(delta, beta)再根据扫描方向做符号修正叠加质心偏移得到delta_prime调用point_spread_function后按权重和归一化。归一化假设传入的像素集合覆盖了目标功率截断的 100%若要归一化到其他截断阈值如 96.34%可参照测试中的做法weights / (np.sum(weights) / cutoff_percentage)。其中vz_rate_of_change参数值得特别说明正值表示扫描视场正在远离星下点nadir负值表示正在靠近星下点。ATBD 给出的 PSF 是针对向星下点移动的情况因此远离时要将delta取反见 ceres_footprint.py。3.4 使用示例以测试中 Table 4.4-2 的第 4 行组地心角 γ12.22°、95% 功率截断为模板可以这样对一片 GOES 像素网格计算权重import numpy as np from collocated_irradiance_network import ceres_footprint num_bins 801 d_ell_delta 212 # 沿扫描方向地面尺度 (km)取自 Table 4.4-2 edge_degrees d_ell_delta / 50 centroid_lat, centroid_lng 0.0, 12.22 # CERES 脚印质心 subsat_lat, subsat_lng 0.0, 0.0 # 星下点 # 纬度从 edge 向 -edge 递减保证绘图时北方朝上 plot_lats np.linspace(centroid_lat edge_degrees, centroid_lat - edge_degrees, num_bins) plot_lngs np.linspace(centroid_lng - edge_degrees, centroid_lng edge_degrees, num_bins) # 注意 meshgrid 的入参顺序是 (x, y) 即 (经度, 纬度) mesh_lngs, mesh_lats np.meshgrid(plot_lngs, plot_lats) weights ceres_footprint.summation_weights( mesh_lats, mesh_lngs, subsat_lat, subsat_lng, centroid_lat, centroid_lng, vz_rate_of_change0.0)如果后续要接入 PyTorch / JAX 等其他模型框架只需把goes_lats、goes_lngs替换为任意形状的坐标数组像素可任意分布返回的weights与输入同形状可直接作为监督信号或加权掩码使用。四、单元测试以 ATBD 基准验证实现正确性ceres_footprint_test.py 是本包用测试当文档的关键README 明确建议see the unittest for usage examples测试不仅验证正确性也是最佳使用范例。4.1 功率截断PowerCutoff测试定义了一个PowerCutoff枚举直接取自 ATBD Table 4.4-2 中X% 功率所包含的角度范围HALF50% 功率delta_min-0.88delta_max0.52beta_max1.08NINETY_FIVE95% 功率delta_min-1.25delta_max1.35beta_max1.274.2 test_table442验证观测几何该测试参数化覆盖 4 组基准数据对应 Table 4.4-2 的多个行组每组给出地心角 γ、功率截断、质心距星下点的地面距离ell、脚印沿扫描方向长度d_ell_delta与跨扫描方向长度d_ell_betaγ (度)功率截断质心地面距离 (km)d_ell_delta (km)d_ell_beta (km)0.0150%0.017270.0195%0.0323112.2295%1357.72127114.5895%1621.132882测试在质心周围构造 801×801 的网格用footprint_internal_coords算出(delta, beta)再统计截断范围内的地面距离并与表中数值比对。由于网格离散化会引入少量观测几何误差而脚印边缘的权重本就严重衰减不影响模型使用断言容忍度设为4km 以内见 ceres_footprint_test.py。4.3 test_figure449验证 PSF 数值test_figure449直接把 PSF 计算结果与 ATBD Figure 4.4-9 中公布的 8×8 权重矩阵w_ij对比容差atol0.00007。该测试使用与 Table 4.4-2 略有不同的截断1.32°、96.34% 功率并且为了精确复现图中的权重用数值积分逼近公式 4.4-18——每个角度 bin 内部做 100×100 的细网格采样再求和。测试注释同时指出对机器学习用途而言在每个角度 bin 内单点采样得到的权重通常已经足够精确。4.4 运行测试仓库提供了 run.sh在包根目录执行即可一键完成环境准备与测试virtualenv -p python3 . source ./bin/activate pip install -r collocated_irradiance_network/requirements.txt python -m collocated_irradiance_network.ceres_footprint_test测试基于 absl 的parameterized.TestCase直接以模块方式运行手动运行同样支持例如python -m collocated_irradiance_network.ceres_footprint_test五、读取训练/验证 TFRecord 数据Collocated_Irradiance_Network_data_loading.ipynb 演示了如何用任意模型架构不限于论文原始模型试验训练/验证数据。数据托管在 Google Cloud Storage 的公开存储桶gs://upwelling_irradiance/下但读取前需要通过 Google Colab 登录认证from google.colab import auth auth.authenticate_user()5.1 特征 Schema每个 TFRecord 样本包含以下特征见笔记本中的spec字典字符串张量特征需二次解析为浮点张量surface_type_index、surface_type_percent_coverage、psf_weights、goes_lats、goes_lngs以及goes_channel_1至goes_channel_16GOES-16 ABI 的 16 个波段标量特征goes_timestampint64、ceres_timestampint64、ceres_olrfloat32出射长波辐射、ceres_rsrfloat32反射短波辐射元特征meta featuresceres_latitude、ceres_longitude、ceres_viewing_zenith、ceres_relative_azimuth、ceres_solar_zenith、calculated_solar_zenithfloat32用于分析模型在数据子集上的偏差其中psf_weights就是第三节算出的协同定位权重与goes_lats/goes_lngs一一对应把如何把 ABI 像素聚合成 CERES 脚印辐照度直接固化进了数据集。5.2 解析流程解析分两步先用tf.io.parse_example按 schema 解出原始字段再用tf.io.parse_tensor(..., out_typetf.float32)把字符串字段还原为浮点张量全程用tf.data的AUTOTUNE并行加速import tensorflow as tf spec { surface_type_index: tf.io.FixedLenFeature([], tf.string), surface_type_percent_coverage: tf.io.FixedLenFeature([], tf.string), psf_weights: tf.io.FixedLenFeature([], tf.string), goes_lats: tf.io.FixedLenFeature([], tf.string), goes_lngs: tf.io.FixedLenFeature([], tf.string), goes_timestamp: tf.io.FixedLenFeature([], tf.int64), ceres_timestamp: tf.io.FixedLenFeature([], tf.int64), ceres_olr: tf.io.FixedLenFeature([], tf.float32), ceres_rsr: tf.io.FixedLenFeature([], tf.float32), } for channel in range(1, 17): spec[fgoes_channel_{channel}] tf.io.FixedLenFeature([], tf.string) def _parse_examples(serialized): return tf.io.parse_example(serialized, spec) validation_dataset tf.data.TFRecordDataset( gs://upwelling_irradiance/ceres_goes/2022_08_11_1660270622/ training_and_validation_data/before_20190402/ validation.tfrecords-00000-of-00100) validation_dataset validation_dataset.map( _parse_examples, num_parallel_callstf.data.AUTOTUNE) # 追加元特征 META_FEATURE_NAMES ( ceres_latitude, ceres_longitude, ceres_viewing_zenith, ceres_relative_azimuth, ceres_solar_zenith, calculated_solar_zenith) for feature_name in META_FEATURE_NAMES: spec[feature_name] tf.io.FixedLenFeature([], tf.float32) def _parse_tensors(features): for feature_name in features: if spec[feature_name].dtype tf.string: features[feature_name] tf.io.parse_tensor( features[feature_name], out_typetf.float32) return features validation_dataset validation_dataset.map( _parse_tensors, num_parallel_callstf.data.AUTOTUNE) for features in validation_dataset.take(1): break存储桶路径中的版本号2022_08_11_1660270622CERES_GOES_VERSION是数据发布版本标记文件按before_20190402等时间切分每份 shard 形如validation.tfrecords-00000-of-00100。需要说明的是示例路径来自仓库内笔记本实际使用时应以公开存储桶中当前存在的版本与 shard 为准。六、加载模型输出的辐照度zarr 格式模型输出的辐照度以zarr格式发布可用xarray直接打开适合研究受益于 GOES-16 ABI 时空分辨率2km 标称、10–15 分钟刷新的气候现象——例如日变化diurnal cycle分析、云辐射效应等。笔记本中的完整流程为# 需要额外安装 # !pip install xarray[complete] # !pip install gcsfs import xarray import matplotlib.pyplot as plt CERES_GOES_VERSION 2022_08_11_1660270622 coin xarray.open_zarr( fgs://upwelling_irradiance/ceres_goes/{CERES_GOES_VERSION}/ f2018/021/16/s20180211630395_olr, consolidatedTrue) coin该示例打开的是 2018 年第 021 天、第 16 个扫描条带scene的出射长波辐射OLR预测结果文件名为s20180211630395_olrconsolidatedTrue用于加速 zarr 元数据读取。数据集中包含predicted_olr变量可直接可视化plt.figure(figsize(15, 15)) plt.imshow(coin.predicted_olr, cmapmagma)从路径结构可以看出数据组织方式版本号/年份/儒略日/条带号/场景名这种分块组织便于按条带按场景加载与 GOES-16 ABI 的 10–15 分钟刷新节奏相匹配可用于拼接连续时间序列研究辐射场的时空演变。七、依赖与运行环境核心依赖requirements.txt 仅需absl-py与numpy1.21.5PSF 部分零第三方重依赖、纯 NumPy 实现易于集成到任意 ML 训练管线数据读取TFRecord 部分需要tensorflowzarr 部分需要xarray、gcsfs均为 Colab 笔记本中的安装项验证方式运行 run.sh 或直接执行python -m collocated_irradiance_network.ceres_footprint_test以 ATBD 基准数据Table 4.4-2、Figure 4.4-9确认几何计算与 PSF 数值的正确性。八、小结collocated_irradiance_network 以最小化的代码量覆盖了GOES-16 ABI → CERES 宽带辐照度研究链路的三个关键环节向量化 CERES PSF 权重计算任意位置快速可用且有 ATBD 基准测试背书、TFRecord 训练数据解析16 波段 表面类型 PSF 权重 标签与元特征齐备、zarr 辐照度输出加载可直接用于气候现象研究。对于想复现论文或在其基础上换用其他模型架构的开发者仓库既提供了可直接调用的 ceres_footprint.py也通过 单元测试 和 Colab 笔记本 给出了可复制的使用范式。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐【免费下载】 点扩散函数在MATLAB中的计算与应用【matlab下载】点扩散函数在MATLAB中的计算与应用 概述 点扩散函数Point Spread Function, PSF是光学成像领域的一个核心概念它定义了理想点光StarRocks JSON 数据类型完全指南存储、加载、查询与函数运算实战StarRocks JSON 数据类型完全指南存储、加载、查询与函数运算实战 本篇技术指南围绕 StarRocks 2.2.0 起引入的 JSON 数据类型展数据库OLAP数据仓库大数据湖仓一体数据分析WTF-Solidity 极简教程第 16 讲Solidity 函数重载Overloading原理与实战指南WTF Solidity 极简教程第 16 讲Solidity 函数重载Overloading原理与实战指南 本文基于 WTF Solidity 仓库西班示例工程区块链教程上一篇如何解决qui的数据库高级问题性能调优和扩展的终极指南下一篇OpenPCDet与ROS导航栈集成实现自主避障功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考