[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-ucam-eo--tessera":3,"tool-ucam-eo--tessera":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",147882,2,"2026-04-09T11:32:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":77,"owner_url":78,"languages":79,"stars":88,"forks":89,"last_commit_at":90,"license":91,"difficulty_score":92,"env_os":93,"env_gpu":94,"env_ram":95,"env_deps":96,"category_tags":100,"github_topics":101,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":106,"updated_at":107,"faqs":108,"releases":142},5974,"ucam-eo\u002Ftessera","tessera","[CVPR26] TESSERA is a foundation model that can process time-series satellite imagery for applications such as land classification and canopy height prediction. Developed at the University of Cambridge, it enables efficient extraction of temporal patterns from Earth observation","TESSERA 是一款由剑桥大学研发的开源基础模型，专为处理时间序列卫星影像而设计。它能够将全球范围内 10 米分辨率的地球观测数据，压缩为包含丰富时空信息的 128 维特征表示，广泛应用于土地分类、树冠高度预测、栖息地映射及碳核算等领域。\n\n面对卫星数据体量巨大、常受云层遮挡且标注样本稀缺的挑战，TESSERA 提供了一种高效的解决方案。其核心创新在于利用“巴洛孪生（Barlow Twins）”自监督学习技术，强制对齐同一地点不同时间的无云样本，从而生成能完整代表整个时间序列（包括缺失观测）的嵌入向量。这种方法不仅有效克服了云污染干扰，还保留了传统方法容易丢失的季节性物候信号，让研究人员能更敏锐地捕捉生态系统动态和环境变化。\n\nTESSERA 特别适合遥感领域的研究人员、数据科学家及开发者使用。它不仅支持直接调用预计算好的全球年度特征数据，大幅降低计算门槛，还提供开源代码供用户自定义训练和扩展。作为目前首个兼具开放性、全球覆盖能力与分析就绪特性的基础模型，TESSERA 在保持数据主权的同时，显著提升了从海量卫星数据中提取有价值洞察的效率与准确度。","# Temporal Embeddings of Surface Spectra for Earth Representation and Analysis (TESSERA) [CVPR2026]\n\u003Cdiv align=\"center\">\n    \u003Ca href=\"#readme-top\">\n        \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_90066ced7694.png\" alt=\"Banner\">\n    \u003C\u002Fa>\n    \u003Cbr \u002F>\n    \u003Cp align=\"center\">\n        \u003Ca href=\"https:\u002F\u002Fgeotessera.org\u002F\">Project Website 🌐\u003C\u002Fa> &nbsp;&nbsp;&nbsp;&nbsp;\n        \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFrankFeng-23\u002Fbtfm_project\u002Fissues\">Report Bugs 🛠️\u003C\u002Fa> &nbsp;&nbsp;&nbsp;&nbsp;\n        \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFrankFeng-23\u002Fbtfm_project\u002Fissues\">Request Features 💡\u003C\u002Fa>\n    \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003C!--  ![Version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fversion-alpha-red) -->\n![PyPI version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fgeotessera?label=PyPI%20version&color=blue)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)\n\n\n# Table of Contents\n\n  - Learning about TESSERA\n      - [Introduction](#introduction)\n      - [Papers](#Papers)\n      - [Podcast](https:\u002F\u002Fwww.satellite-image-deep-learning.com\u002Fp\u002Ftessera-a-temporal-foundation-model)\n      - [Presentations](#presentations)\n      - [License](#License)\n  - Using TESSERA\n      - [Acceptable Use Policy](#AUP)\n      - [Accessing Precomputed Embeddings](#global-embeddings-access)\n      - [Creating Your Own Embeddings](#creating-your-own-embeddings)\n      - [Downstream Tasks](#downstream-tasks)\n      - [TESSERA Users Group](#tessera-users-group)\n  - Additional information\n      - [Team](#team)\n      - [Contact](#contact)\n      - [Citation](#citation)\n      - [Acknowledgments](#acknowledgments)\n      - [Star History](#star-history)\n\n# Learning about TESSERA\n## Introduction\n\nSatellite remote sensing enables a wide range of downstream applications, including habitat mapping, carbon accounting, and strategies for conservation and sustainable land use. However, satellite time series are voluminous and often cloud-corrupted, making them challenging to use: the scientific community's ability to extract actionable insights is often constrained by the scarcity of labelled training datasets and the computational burden of processing temporal data. The key insight behind our work, due to [Dr. Clement Atzberger](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fclement-atzberger-8abb8065\u002F) is that forcing auto-encoder embeddings derived from two cloud-free random samples of satellite time series to align using [Barlow Twins](https:\u002F\u002Fproceedings.mlr.press\u002Fv139\u002Fzbontar21a\u002Fzbontar21a.pdf) results in an embedding that represents the entire time series, including the missing observations.\n\nThis idea is the key behind TESSERA, an open foundation model that preserves per-pixel spectral-temporal signals in 128-dimensional latent representations at 10-meter resolution globally. It uses self-supervised learning to summarise petabytes of Earth observation data. We compare our work with state-of-the-art task-specific models and other foundation models in five diverse downstream tasks and find that TESSERA closely matches or outperforms these baselines. By preserving temporal phenological signals that are typically lost in conventional approaches, TESSERA enables new insights into ecosystem dynamics, agricultural food systems, and environmental change detection. Moreover, our open-source implementation supports reproducibility and extensibility, while the privacy-preserving design allows researchers to maintain data sovereignty.\n\nTo our knowledge, TESSERA is unprecedented in its ease of use, scale, and accuracy: no other foundation model provides analysis-ready outputs, is open, and provides global, annual coverage at 10m resolution using only spectral-temporal features at pixel level.\n\nHere are some visualization results of the TESSERA representation map (using the first three channels as RGB):\n\n![repr_demo](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_884e63530245.png)\n\n## Papers\nHere are publications and preprints related to TESSERA, listed chronologically:\n* Lisaius, M. C., Blake, A., Keshav, S., & Atzberger, C. (2024). Using Barlow Twins to Create Representations From Cloud-Corrupted Remote Sensing Time Series. IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, 17, 13162–13168. IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing. https:\u002F\u002Fdoi.org\u002F10.1109\u002FJSTARS.2024.3426044\n\n* Z. Feng, C. Atzberger, S. Jaffer, J. Knezevic, S. Sormunen, R. Young, M.C. Lisaius, M. Immitzer, T. Jackson, J. Ball, D.A. Coomes, A. Madhavapeddy, A. Blake, S. Keshav (2025), [TESSERA: Temporal Embeddings of Surface Spectra for Earth Representation and Analysis](https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.20380), To Appear, CVPR 2026. ArXiv reprint. https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.20380\n\n* Lisaius, M. C., Blake, A., Atzberger, C., & Keshav, S. (2026). Towards improved crop type classification: A compact embedding approach suitable for small fields. Accepted in Proceedings of the ISPRS Conference 2026. International Society for Photogrammetry and Remote Sensing.\n\n* Z. Feng, C. Atzberger, S. Jaffer, J. Knezevic, S. Sormunen, R. Young, M.C. Lisaius, M. Immitzer, T. Jackson, J. Ball, D.A. Coomes, A. Madhavapeddy, A. Blake, S. Keshav, (2026) [Applications of the TESSERA Geospatial Foundation Model to Diverse Environmental Mapping Tasks](http:\u002F\u002Fssrn.com\u002Fabstract=6142416), SSRN preprint. http:\u002F\u002Fssrn.com\u002Fabstract=6142416\n  \n* Young, R., & Keshav, S. (2026). Interpolation of GEDI Biomass Estimates with Calibrated Uncertainty Quantification, arXiv preprint. https:\u002F\u002Fdoi.org\u002F10.48550\u002FArXiv.2601.16834\n  \n* Lisaius, M. C., Keshav, S., Blake, A., & Atzberger, C. (2026). Embedding-based Crop Type Classification in the Groundnut Basin of Senegal (arXiv:2601.16900). ArXiv preprint. https:\u002F\u002Fdoi.org\u002F10.48550\u002FarXiv.2601.16900\n\n* Ball, J.G.C, Wicklein J.A. , Feng, Z.,  Knezevic, J.,  Jaffer, S., Atzberger, C.,  Dalponte, M., and Coomes, D. Geospatial foundation models enable data-efficient tree species mapping in temperate montane forests, BioArxiv, https:\u002F\u002Fdoi.org\u002F10.64898\u002F2026.02.23.707022\n\n## Presentations\n\n* [TESSERA overview in AI for Good seminar](https:\u002F\u002Fwww.youtube.com\u002Flive\u002F9yrpwFrwbGY), Frank Feng, Jan 22, 2026\n* [TESSERA: Precomputed FAIR Global Pixel Embeddings for Earth Representation and Analysis](https:\u002F\u002Fwww.grss-ieee.org\u002Fevent\u002Ftessera-precomputed-fair-global-pixel-embeddings-for-earth-representation-and-analysis\u002F) IEEE GRSS Talk, Frank Feng, 12 December, 2025\n* [2-slide summary (PPTX)](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002Fzjo4trov0z2qnmdeitng0\u002FCRI-2slide.pptx?rlkey=5kkojiknt6hdn2zplzlotqnbt&st=ezafh67n&dl=0) for CRI Flash Talks, S. Keshav, October 7, 2025\n* Foundation model overview (PPTX) for Ecology Groups meeting, University of Cambridge, DAB, James Ball, October 6, 2025\n* [TESSERA overview presentation with a focus on ecological applications](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002F8xvanw3kk586lp1ld31kd\u002Fmaryland_talk_slides.pdf?rlkey=osyhtk1kc2pcj81iel0u32lub&st=6kedpwv6&dl=0) (PDF) University of Maryland, Frank Feng, October 1, 2025\n* [TESSERA overview presentation](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002F0rsq4wkao3c7fgwljd8ec\u002FJCU-tesserav2.pptx?rlkey=ccutcxgwi068c09n20t1yi549&st=13if23b3&dl=0) (PPTX) James Cook University, S. Keshav, September 29, 2025\n* [TESSERA overview presentation](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002F1p7nabvlvie8fzyomkx7w\u002Fdab_talk_slides.pdf?rlkey=ym3d44o80mbrdkasyzct9kzi5&st=ozvwczs7&dl=0) University of Cambridge, DAB, Frank Feng, May 20, 2025\n* [Self-supervised learning for earth observation](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002Fzjo4trov0z2qnmdeitng0\u002FCRI-2slide.pptx?rlkey=5kkojiknt6hdn2zplzlotqnbt&st=ezafh67n&dl=0) (PPTX) S. Keshav, Exeter, April 2025\n\n## License\n\nTESSERA software is released under the standard MIT license. Embeddings and model weights are released under the [CC0](https:\u002F\u002Fcreativecommons.org\u002Fpublicdomain\u002Fzero\u002F1.0\u002F) license: essentially, \nthey can be freely used for both commercial and non-commercial purposes. Although we do not legally require attribution,\nwe do request it.\n\n# Using TESSERA\n\n\u003Ca id=\"global-embeddings-access\">\u003C\u002Fa>\n\n## Accessing Embeddings using GeoTessera (recommended)\n\nWe have generated embeddings for the whole globe at 10m resolution for 2024.\nThese can be downloaded and used for downstream applications, saving significant computational time and resources, using \nthe [GeoTessera](https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Fgeotessera) library. \nWe will progressively extending coverage backwards year by year until 2017. The current coverage map is below:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_01f166cb764b.png\"> \n\n## TESSERA Users Group\n\nInterested users are invited to join our [Zulip](https:\u002F\u002Feeg.zulipchat.com\u002Flogin\u002F) discussion groups.\n\n\n# Creating Your Own Embeddings\n\nIf you would like to use our software to create your own embeddings, please follow the instructions below. Note that this is a comptuationally challenging task and you will need access to significant computational and storage resources. \n\n## Hardware Requirements\n\n### 1. Storage Requirements\n\nRunning this pipeline requires substantial storage space. Although the pipeline cleans up some intermediate files after processing, the downloaded raw Sentinel-2 and Sentinel-1 files will still occupy considerable disk space. For example, processing a 100km×100km area from 2022 to output a TESSERA Representation map (10m resolution) requires at least 1TB of storage.\n\n### 2. Memory Requirements\n\nWe use preprocessed data, initially from Microsoft Planetary Computer. However, the next generation of embeddings will use OPERA from ASF DAAC. In either case, most of the geo-preprocessing has been done. Still, we recommend having at least 128GB of RAM.\n\n### 3. CPU and GPU\n\nThe pipeline has no strict requirements for CPU and GPU, but more CPU cores and more powerful GPUs can significantly speed up inference. When processing a 110km×110km area from 2022, our tests using a 128-core CPU and a single NVIDIA A30 GPU for inference (CPU and GPU each handling 50% of the inference) took approximately 10 hours to complete.\n\n### 4. Operating System\n\nFor the data preprocessing pipeline, we support almost all Linux systems. For Windows, we recommend using WSL. We do not support MacOS at this point.\n\nFor the model inference part, we have only tested it on Linux and Windows WSL, and they are working.\n\n## Data Preprocessing\n\n### Overview\n_**We strongly recommend that you quickly review the entire tutorial before running the pipeline.**_\n\nIn this step, we stack a full year of Sentinel-1 and Sentinel-2 data along the time dimension to generate a composite. For Sentinel-2, the composite shape is (T,H,W,B), where T is the number of valid observations in that year, and B is the number of bands (we selected 10 bands). For Sentinel-1, we extracted both ascending and descending orbit data. Taking the ascending orbit as an example, the composite shape is (T',H,W,B'), where T' is the number of valid ascending observations in that year, and B' is 2 because we only obtain VV and VH bands.\n\nWe initially sourced Sentinel-1 and Sentinel-2 data from Microsoft's Planetary Computer:\n- Sentinel-1 data source: https:\u002F\u002Fplanetarycomputer.microsoft.com\u002Fdataset\u002Fsentinel-1-rtc\n- Sentinel-2 data source: https:\u002F\u002Fplanetarycomputer.microsoft.com\u002Fdataset\u002Fsentinel-2-l2a\n\nThe new generation of embeddings will use OPERA from ASF DAAC: \n- Sentinel-1 data source:  https:\u002F\u002Fregistry.opendata.aws\u002Fnasa-operal2rtc-s1v1\u002F \n- Sentinel-2 data source: https:\u002F\u002Fregistry.opendata.aws\u002Fsentinel-2-l2a-cogs\u002F\n\nCurrently, our pipeline only accepts TIFF format input. The resolution of the input ROI TIFF can vary (e.g., 30m), but the pipeline will **always generate Sentinel-1 and Sentinel-2 outputs at the configured `RESOLUTION`** (default 10m) while keeping the **ROI extent\u002Fbounds identical**. For valid ROI areas within the TIFF, the value is 1; otherwise, it's 0. If you only have a shapefile, that's fine too - we provide a `convert_shp_to_tiff.py` script.\n\n### Download Source Code\n\nFirst, create an empty working directory:\n\n```bash\nmkdir tessera_project\ncd tessera_project\ngit clone https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera.git\n```\n\nFor easier pipeline operation, we recommend placing the data output directory at the same level as `tessera_infer` and `tessera_preprocessing`:\n\n```\ntessera_project\n ┣ tessera_infer\n ┣ tessera_preprocessing\n ┣ my_data\n   ┣ roi.shp (your shapefile)\n   ┗ roi.tiff (we recommend generating this using convert_shp_to_tiff.py)\n```\n\nThe `roi.tiff` can be generated using `convert_shp_to_tiff.py` located in `tessera_preprocessing\u002Fconvert_shp_to_tiff.py`. To use it, simply specify the path to your shapefile in the main function, and it will output a TIFF with the same name in the same directory.\n\n⚠️Notice: _If your ROI is relatively large, for example 100 km × 100 km, we strongly recommend pre-splitting the TIFF into smaller sections no larger than 20 km × 20 km. Then process each small TIFF file sequentially in the pipeline. An excessively large ROI may cause issues with backend tile providers_\n\n### Python Environment\n\nWe need some geographic processing packages (fortunately, we won't be using GDAL, as configuring the environment is a nightmare) and some machine learning packages (PyTorch, but you'll need to install this yourself since the hardware on each computer is different). We've put some common packages in `requirements.txt`, which you can install as follows:\n\n```bash\npip install -r requirements.txt\n```\nNote: If you are in a managed environment, you may need to install a venv first, using \n```bash\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\n```\n\n### Script Configuration\n\nFirst, navigate to the `tessera_preprocessing` folder:\n\n```bash\ncd tessera_preprocessing\n```\n\nThen edit the file s1_s2_downloader.sh to point to the ROI TIFF file, the output and temporary directories, and the data source:\n\n```bash\n# === Basic Configuration ===\nINPUT_TIFF=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fdata_dir\u002Froi.tiff\"\nOUT_DIR=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fdata_dir\"\n\nexport TEMP_DIR=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Ftemp_dir\"     # Temporary file directory\n\nmkdir -p \"$OUT_DIR\"\n\n# Python environment path\nPYTHON_ENV=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fpython_env\u002Fbin\u002Fpython\"\n\n# === Sentinel-1 & Sentinel-2 Processing Configuration ===\nYEAR=2022 # Range [2017-2025]\nRESOLUTION=10.0  # Output resolution (meters). ROI TIFF can be any resolution; extent is preserved.\n\n# === Data Source Configuration ===\n# mpc: Microsoft Planetary Computer (sentinel-1-rtc, sentinel-2-l2a)\n# aws: AWS Open Data backends (S1=OPERA RTC-S1 via ASF\u002FCMR + ASF Earthdata Cloud COGs, S2=Earth-search Sentinel-2 L2A COGs)\nDATA_SOURCE=\"mpc\"   # choices: mpc\u002Faws\n```\n\nNote: `RESOLUTION` controls output pixel size. The pipeline keeps the ROI bounds fixed and resamples the ROI mask into the output grid.\n\n### AWS Credentials (only needed when `DATA_SOURCE=\"aws\"`)\nSentinel-2 on Earth-search is public and **does not require credentials**.\n\nSentinel-1 OPERA RTC-S1 is accessed via ASF Earthdata Cloud (COG over HTTPS). You need an Earthdata Login token:\n- **Create an Earthdata account**: via [NASA Earthdata Login](https:\u002F\u002Furs.earthdata.nasa.gov\u002Fhome).\n- **Approve Application**: After registering your account, you can go to the Applications tab and add Alaska Satellite Facility Data Access to the list of approved applications.\n- **Obtain an EDL Bearer token \u002F JWT** by clicking **Generate Token** and store it locally (do not commit it).\n\nRecommended (simple + explicit):\n\n```bash\nnano ~\u002F.edl_bearer_token\n# paste token, save+exit (Ctrl-O Enter, then Ctrl-X)\nchmod 600 ~\u002F.edl_bearer_token\n```\n\nThe AWS S1 downloader will use this token to read COGs from ASF Earthdata Cloud.\n\nIf you want to retrieve temporary S3 credentials (advanced; usually not required for this pipeline), see ASF guidance:\n- `https:\u002F\u002Fcumulus.asf.alaska.edu\u002Fs3credentialsREADME`\n\nBelow the above configuration, there are some additional configurations that you can modify according to your computer's performance.\n\nFirst, give permission to `s1_s2_downloader.sh`:\n\n```bash\nchmod +x s1_s2_downloader.sh\n```\n\nThen, we can run:\n\n```bash\nbash s1_s2_downloader.sh\n```\n\nDue to network conditions, processing some tiles may time out. Our script includes sophisticated timeout management to avoid these issues. However, sometimes some tiles may still fail. Running the above command again usually resolves this.\n\nIf all Sentinel-1 and Sentinel-2 data are generated correctly, they can be stacked along the time dimension. For this step, we use two Rust-generated executables, making it very fast. You can open `s1_s2_stacker.sh` and edit the following:\n\n```bash\n# === Basic Configuration ===\nBASE_DIR=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fdata_dir\"\nOUT_DIR=\"${BASE_DIR}\u002Fdata_processed\"\nDOWNSAMPLE_RATE=1\n```\n\nNormally, we don't modify `DOWNSAMPLE_RATE`, which keeps it from performing any downsampling during stacking. The `BASE_DIR` in the above snippet is the same as the `OUT_DIR` you modified in `s1_s2_downloader.sh`.\n\nSimilarly, give permission to `s1_s2_stacker.sh`:\n\n```bash\nchmod +x s1_s2_stacker.sh\n```\n\nThen you can execute the stacking:\n\n```bash\nbash s1_s2_stacker.sh\n```\n\nAfter success, you will get some `.npy` files in `\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fdata_dir\u002Fdata_processed`. Usually, these `.npy` files are quite large, so we will patchify them into smaller, more manageable units.\n\nExecute:\n\n```bash\npython dpixel_retiler.py \\\n    --tiff_path \u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fdata_dir\u002Froi.tif \\\n    --d_pixel_dir \u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fdata_dir\u002Fdata_processed \\\n    --patch_size 500 \\\n    --out_dir \u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fdata_dir\u002Fretiled_d_pixel \\\n    --num_workers 16 \\\n    --overwrite \\\n    --block_size 2000\n```\n\nYou can change the above `patch_size` and `block_size` yourself. The above configuration is a recommended configuration for a TIFF with a shape of (5000,5000) and a 10m resolution.\n\nIf the above code runs smoothly, you can get some subfolders in `my_data\u002Fretiled_d_pixel`.\n\n## Inference\n\n### Overview\n\nOnce the data preprocessing is complete, we can start inference. Before proceeding, please check if there are subfolders in the `my_data\u002Fretiled_d_pixel` folder like:\n```\nretiled_d_pixel\n ┣ 0_3500_500_4000\n ┣ 0_4000_500_4500\n ┣ 0_4500_500_5000\n ┣ 0_5000_500_5500\n ┣ 0_5500_500_6000\n ┣ 0_6000_500_6500\n```\n\nEach subfolder should contain the following files:\n```\n0_3500_500_4000\n ┣ bands.npy\n ┣ doys.npy\n ┣ masks.npy\n ┣ roi.tiff\n ┣ sar_ascending.npy\n ┣ sar_ascending_doy.npy\n ┣ sar_descending.npy\n ┗ sar_descending_doy.npy\n```\n\nIf these files exist, you can start inference. Otherwise, check if the first step completed successfully.\n\nInference requires PyTorch. Since each system may have slightly different CUDA versions, we can't provide a Docker-encapsulated Python environment like we did for data preprocessing. Fortunately, the Python environment for inference is much simpler to configure than for data preprocessing, as it doesn't use geographic processing packages like GDAL or SNAP.\n\n### Pytorch Preparation\n\nIf you haven't installed Pytorch, you can refer to the steps below. Otherwise, you can ignore this section.\n\nFirst, check your system's CUDA version:\n\n```bash\nnvidia-smi\n```\n\nThen visit https:\u002F\u002Fpytorch.org\u002F and select the appropriate version to install based on your CUDA version, for example:\n\n```bash\npip install torch torchvision torchaudio --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n```\n\n### Model Weight\n\nNext, download the model weights from [Google Drive](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F18RPptbUkCIgUfw1aMdMeOrFML_ZVMszn?usp=sharing) and place the `.pt` file in the `tessera_infer\u002Fcheckpoints` directory:\n\n```\ntessera_infer\n ┗ checkpoints\n     ┗ best_model_fsdp_20250427_084307.pt\n ┗ configs\n ┗ src\n```\n\n_**Note that the checkpoint mentioned above is an early-stage model, which natively generates float32 embeddings. Therefore, this model is not the one used to generate the int8 embeddings in the geotessera library. We will soon deploy the specific checkpoint that was used to create the geotessera embeddings into the full pipeline.**_\n\n### QAT Model Weight (Quantized Output)\n\nFor quantized inference, use the QAT checkpoint from [Google Drive](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HJ92aS5ERXMLfSFYJ4m3OKycJJdC1QvO\u002Fview?usp=sharing) and place it in `tessera_infer_QAT\u002Fcheckpoints`:\n\n```\ntessera_infer_QAT\n ┣ checkpoints\n ┃   ┗ best_model_fsdp_20250608_220648_QAT.pt\n ┣ configs\n ┗ src\n```\n\nThe QAT pipeline outputs quantized embeddings as **int8 + scales**:\n- `tile_name.npy`: int8 embedding tensor, shape `(H, W, 128)`\n- `tile_name_scales.npy`: float32 scale map, shape `(H, W)`\n\n### Configure Bash Script\n\nTo simplify inference configuration, we provide `tessera_infer\u002Finfer_all_tiles.sh`. You only need to edit a few parameters:\n\na. Base data directory:\n```bash\nBASE_DATA_DIR=\"your_data_directory\"\n```\nThis is your data storage folder, the same as `BASE_DATA_DIR` in the previous bash, e.g., `\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data`\n\nb. Python environment:\n```bash\nexport PYTHON_ENV=\"your_python_path\"\n```\nWrite the absolute path to your Python environment here, e.g., `\u002Fhome\u002Fuser\u002Fanaconda3\u002Fenvs\u002Ftessera_env\u002Fbin\u002Fpython`\n\nc. CPU\u002FGPU split:\n```bash\nCPU_GPU_SPLIT=\"1:1\"  # Format: CPU:GPU ratio\n```\nThe script supports simultaneous inference using both CPU and GPU. This ratio specifies the proportion of `retiled_patches` each device will handle. Default is 1:1 (even split). For GPU-only inference, set to 0:1.\n\nd. CPU Related Settings\n\n```bash\nMAX_CONCURRENT_PROCESSES_CPU=20\n```\nMaximum number of CPU processes for tile inference. For example, if set to 20, it will process 20 tiles simultaneously.\n\n```bash\nAVAILABLE_CORES=$((TOTAL_CPU_CORES \u002F 2)) # Use 50% of the cores\n```\nNumber of CPU cores to use. Please modify this value if necessary to avoid consuming too many CPU resources!\n\ne. GPU Related Settings:\n```bash\nMAX_CONCURRENT_PROCESSES_GPU=1\n```\nMaximum number of GPU processes for inference. If the system has only 1 GPU, set this to 1.\n\n```bash\nGPU_BATCH_SIZE=1024  # Larger for GPU, if this takes too much memory, reduce it\n```\nNumber of samples to process at once during PyTorch inference. If this value consumes too much GPU memory or causes an OOM error on the GPU, please reduce it accordingly.\n\nf. Other Settings\nThere are other parameters available for configuration. Please adjust them as needed.\n\n### Start Inference\n\nOnce everything is ready, navigate to the `tessera_infer` folder:\n\n```bash\ncd tessera_infer\n```\n\nThen give permission to `infer_all_tiles.sh`:\n\n```bash\nchmod +x infer_all_tiles.sh\n```\n\nThen run it:\n\n```bash\nbash infer_all_tiles.sh\n```\n\nIf successful, you should see logs like:\n\n```\n(base) zf281@daintree:\u002Fscratch\u002Fzf281\u002Ftessera_project\u002Ftessera_infer$ bash infer_all_tiles.sh\n[INFO] Total CPU cores: 256, Using: 192\n[INFO] CPU:GPU split ratio = 1:1 (total: 2)\n\n==== SETUP DIRECTORIES ====\n[SUCCESS] Created necessary directories\n\n==== SCANNING TILES ====\n[INFO] Tile directory: \u002Fscratch\u002Fzf281\u002Fjovana\u002Fretiled_d_pixel\n[INFO] Output directory: \u002Fscratch\u002Fzf281\u002Fjovana\u002Frepresentation_retiled\n[SUCCESS] Found 226 tiles total\n[INFO] Sample tiles:\n  - 0_3500_500_4000\n  - 0_4000_500_4500\n  - 0_4500_500_5000\n  - ...\n```\n\nAt the same time, a `logs` folder will be generated in the `tessera_infer` folder with more detailed logging for each CPU and GPU process.\n\n### QAT Inference (CPU + GPU, with AMX auto-fallback)\n\nWe also provide a QAT inference pipeline in `tessera_infer_QAT`:\n\n```bash\ncd tessera_infer_QAT\nchmod +x infer_all_tiles.sh\nbash infer_all_tiles.sh\n```\n\nBefore running, edit these parameters in `tessera_infer_QAT\u002Finfer_all_tiles.sh`:\n\n```bash\nBASE_DATA_DIR=\"\u002Fabsolute_path_to_your_data_dir\"\nexport PYTHON_ENV=\"\u002Fabsolute_path_to_your_python\u002Fbin\u002Fpython\"\nCPU_GPU_SPLIT=\"1:1\"  # CPU:GPU ratio, e.g. 1:0 or 0:1\nCHECKPOINT_PATH=\"checkpoints\u002Fbest_model_fsdp_20250608_220648_QAT.pt\"\n```\n\nNotes:\n- QAT now supports both CPU and GPU inference in one run (ratio-based split, same style as `tessera_infer`).\n- On CPU, AMX is automatically detected and enabled when available.\n- If AMX is not available, it automatically falls back to default CPU inference.\n\n### Stitch Final Representation Map\n\nInference usually takes a long time, depending on your ROI size and hardware performance. Once completed, you can find many `.npy` files in `my_data\u002Frepresentation_retiled`:\n\n```\nrepresentation_retiled\n ┣ 0_3500_500_4000.npy\n ┣ 0_4000_500_4500.npy\n ┣ 0_4500_500_5000.npy\n ┣ 0_5000_500_5500.npy\n ┣ 0_5500_500_6000.npy\n ┣ 0_6000_500_6500.npy\n ┣ 0_6500_500_7000.npy\n ┣ 0_7000_500_7500.npy\n ┣ 1000_0_1500_500.npy\n ┣ 1000_1000_1500_1500.npy\n ┣ 1000_1500_1500_2000.npy\n ┣ 1000_2000_1500_2500.npy\n```\n\nThe final step is to stitch them together using `tessera_infer\u002Fstitch_tiled_representation.py`:\n\n```bash\npython stitch_tiled_representation.py \\\n--d_pixel_retiled_path \u002Fpath\u002Fto\u002Fd_pixel_retiled \\\n--representation_retiled_path \u002Fpath\u002Fto\u002Frepresentation_retiled \\\n--downstream_tiff \u002Fpath\u002Fto\u002Fdownstream.tiff \\\n--out_dir \u002Fpath\u002Fto\u002Foutput_directory\n```\n\nFor example:\n\n```bash\npython stitch_tiled_representation.py \\\n--d_pixel_retiled_path \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Fd_pixel_retiled \\\n--representation_retiled_path \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Frepresentation_retiled \\\n--downstream_tiff \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Fdownstream.tiff \\\n--out_dir \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\n```\n\nFinally, you'll get a stitched representation map in the `my_data` directory with the shape (H,W,128), where H and W match your initial `roi.tiff`. The representation map is a NumPy array. If you want to convert it to TIFF for viewing in software like QGIS, you can use the `tessera_infer\u002Fconvert_npy2tiff.py` script. Just modify the main function with:\n\n```python\nnpy_path = \"\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Fstitched_representation.npy\"  # Change to the actual npy file path\nref_tiff_path = \"\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Froi.tiff\"  # Change to the actual reference tiff file path\nout_dir = \"\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002F\"  # Change to the actual output directory\n```\n\n## Downstream tasks\n\nIf you want to reproduce the downstream tasks in the paper, you can visit https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera-downstream-task. There are many examples provided there.\n\n# Additional information\n\n## Team\n\n### Cambridge Faculty\n* [S. Keshav](https:\u002F\u002Fsvr-sk818-web.cl.cam.ac.uk\u002Fkeshav\u002Fwiki\u002Findex.php\u002FMain_Page)\n* [Anil Madhavapeddy](https:\u002F\u002Fanil.recoil.org)\n* [Sadiq Jaffer](https:\u002F\u002Ftoao.com)\n* [David Coomes](https:\u002F\u002Fwww.plantsci.cam.ac.uk\u002Fdirectory\u002Fdavid-coomes)\n\n### Postdoc\n* James Ball\n  \n### PhD\n* Madeleine Lisaius\n* Zhengpeng (Frank) Feng\n* Robin Young\n* Jovana Knezevic\n\n### Undergrad\n* Zejia Yang (Part II student, working with Frank Feng on MAE pretraining of spatial feature extractors)\n\n### Interns\n* Kenzy Soror (U. Waterloo, working with Robin Young)\n* Artyom Gabtraupov (U. Waterloo, working with Robin Young)\n* Gabriel Mahler (U. Cambridge, working with Anil Madhavapeddy and Silviu Petrovan on [hedgehog habitats and tracking](https:\u002F\u002Fanil.recoil.org\u002Fideas\u002Fhedgehog-mapping))\n* Leyu Pan (Imperial College, working with Frank Feng on text embeddings generated from OSM)\n\n### Collaborators\n* [Clement Atzberger](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fclement-atzberger-8abb8065\u002F?originalSubdomain=at), dClimate Labs\n* [Andrew Blake](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAndrew_Blake_(computer_scientist)), Mantle Labs\n\n### Visitors\n* Silja Sormunnen, Aalto University, Finland\n* Isabel Mansley (U. Edinburgh, working with David Coomes and Anil Madhavapeddy on [habitat mapping in Scotland](https:\u002F\u002Fanil.recoil.org\u002Fideas\u002Fcairngorms-connect-habitats)\n\n## Contact\n\nPlease direct your technical questions to Frank Feng (zf281@cam.ac.uk) or ask it on our [Zulip forum](https:\u002F\u002Feeg.zulipchat.com\u002Flogin\u002F). Non-technical questions can be sent to Prof. S. Keshav (sk818@cam.ac.uk).\n\n## Citation\n\nIf you use TESSERA in your research, please cite the [arXiv paper](https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.20380):\n\n```bibtex\n@misc{feng2025tesseratemporalembeddingssurface,\n      title={TESSERA: Temporal Embeddings of Surface Spectra for Earth Representation and Analysis}, \n      author={Zhengpeng Feng et al.},\n      year={2025},\n      eprint={2506.20380},\n      archivePrefix={arXiv},\n      primaryClass={cs.LG},\n      url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.20380}, \n}\n```\n\n## Acknowledgments\nWe would like to express our gratitude to UKRI and the [DAWN](https:\u002F\u002Fwww.hpc.cam.ac.uk\u002Fd-w-n) supercomputer team at Cambridge, for their generous support in this project. We also acknowledge support from [AMD](https:\u002F\u002Fwww.amd.com\u002Fen.html),  [Vultr](https:\u002F\u002Fwww.vultr.com\u002F), the [Dirac High Performance Computing Facility](https:\u002F\u002Fdirac.ac.uk), [Microsoft AI For Good Lab](https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002Fgroup\u002Fai-for-good-research-lab\u002F), Dr. Robert Sansom, [dClimate](https:\u002F\u002Fwww.dclimate.net\u002F), and [Amazon Web Services (AWS)](https:\u002F\u002Faws.amazon.com\u002F) under their AWS Open Data program (https:\u002F\u002Fopendata.aws\u002F). This work would not have been possible without their support, computational resources and technical assistance.  \n\n## Star History\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_8f328689087f.png)](https:\u002F\u002Fwww.star-history.com\u002F#ucam-eo\u002Ftessera&Date)\n\n## AUP\n\n### TESSERA Terms of Use and Ethical Guidelines\n\n### License\n\nTESSERA data and embeddings are made available under the **Creative Commons 0 International License [CC-0](https:\u002F\u002Fcreativecommons.org\u002Fpublic-domain\u002Fcc0\u002F)**. \nThis means you are free to:\n\n* **Share** — copy and redistribute the material in any medium or format\n* **Adapt** — remix, transform, and build upon the material for any purpose, even commercially\n\n### Purpose and Intended Uses\n\nTESSERA was developed to advance scientific research and support environmental monitoring, conservation, sustainable agriculture, and understanding of Earth systems. We designed this tool to enable:\n\n* Scientific research and education\n* Environmental monitoring and conservation\n* Agricultural and food security analysis\n* Climate change research and adaptation planning\n* Sustainable land use and resource management\n* Public interest applications that benefit society and the environment\n\n### Ethical Guidelines\n\nWhile the CC0 license permits broad use, we strongly encourage users to consider the ethical implications of their work. These ethical guidelines are advisory and do not impose legally enforceable restrictions. We request that users:\n\n**Act Responsibly:**\n* Consider privacy implications when analyzing specific locations\n* Respect the rights and dignity of affected communities\n* Be mindful of potential dual-use concerns\n\n**Be Transparent:**\n* Accurately represent the data's characteristics (annual resolution, 10m spatial resolution)\n* Acknowledge limitations in your applications\n* Do not misrepresent TESSERA's capabilities\n\n**Support Positive Impact:**\n* Consider how your work contributes to societal benefit\n* Engage with affected communities when appropriate\n* Share findings that advance public knowledge\n\n### Data Characteristics\n\nUsers should understand that TESSERA provides:\n* **Annual temporal resolution** — data represents yearly summaries, not real-time or high-frequency monitoring\n* **10-meter spatial resolution** — suitable for landscape-scale analysis\n* **Spectral-temporal embeddings** — compressed representations, not raw imagery\n\nPlease accurately represent these characteristics in your work.\n\n### Community Standards\n\nWe encourage responsible use and welcome community feedback. If you have concerns about potential applications or suggestions for improving these guidelines, please contact us.\n\nWe reserve the right to update these guidelines based on community input and emerging considerations, though such updates do not retroactively affect the CC-0 license under which data is released.\n\n### Contact\n\nFor questions or feedback: Email sk818@cam.ac.uk\n\n---\n\n*Last updated: February 25, 2026*\n\n","# 用于地球表征与分析的表面光谱时序嵌入（TESSERA）[CVPR2026]\n\u003Cdiv align=\"center\">\n    \u003Ca href=\"#readme-top\">\n        \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_90066ced7694.png\" alt=\"Banner\">\n    \u003C\u002Fa>\n    \u003Cbr \u002F>\n    \u003Cp align=\"center\">\n        \u003Ca href=\"https:\u002F\u002Fgeotessera.org\u002F\">项目官网 🌐\u003C\u002Fa> &nbsp;&nbsp;&nbsp;&nbsp;\n        \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFrankFeng-23\u002Fbtfm_project\u002Fissues\">报告漏洞 🛠️\u003C\u002Fa> &nbsp;&nbsp;&nbsp;&nbsp;\n        \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFrankFeng-23\u002Fbtfm_project\u002Fissues\">请求功能 💡\u003C\u002Fa>\n    \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003C!--  ![Version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fversion-alpha-red) -->\n![PyPI版本](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fgeotessera?label=PyPI%20version&color=blue)\n![许可证](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)\n\n\n# 目录\n\n  - 了解TESSERA\n      - [简介](#introduction)\n      - [论文](#Papers)\n      - [播客](https:\u002F\u002Fwww.satellite-image-deep-learning.com\u002Fp\u002Ftessera-a-temporal-foundation-model)\n      - [演示文稿](#presentations)\n      - [许可证](#License)\n  - 使用TESSERA\n      - [可接受使用政策](#AUP)\n      - [访问预计算嵌入](#global-embeddings-access)\n      - [创建您自己的嵌入](#creating-your-own-embeddings)\n      - [下游任务](#downstream-tasks)\n      - [TESSERA用户组](#tessera-users-group)\n  - 其他信息\n      - [团队](#team)\n      - [联系方式](#contact)\n      - [引用](#citation)\n      - [致谢](#acknowledgments)\n      - [星标历史](#star-history)\n\n# 了解TESSERA\n## 简介\n\n卫星遥感技术支持广泛的下游应用，包括生境制图、碳核算以及保护和可持续土地利用策略等。然而，卫星时间序列数据量庞大且常受云层干扰，这使得其使用颇具挑战：科学界提取可操作见解的能力往往受限于标注训练数据的稀缺性以及处理时序数据所需的巨大计算开销。我们工作的关键洞见——归功于[克莱门特·阿茨贝格博士](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fclement-atzberger-8abb8065\u002F)——在于，通过使用[Barlow Twins](https:\u002F\u002Fproceedings.mlr.press\u002Fv139\u002Fzbontar21a\u002Fzbontar21a.pdf)算法强制对来自卫星时间序列的两组无云随机样本所提取的自编码器嵌入进行对齐，最终得到的嵌入能够代表整个时间序列，包括缺失的观测数据。\n\n这一理念正是TESSERA的核心：它是一个开放的基础模型，在全球范围内以10米分辨率将每个像素的光谱—时序信号保存为128维潜在表示。该模型采用自监督学习方法，对数PB级的地球观测数据进行摘要化处理。我们在五个不同的下游任务中将我们的工作与最先进的特定任务模型及其他基础模型进行了比较，结果表明TESSERA的表现接近或优于这些基准模型。通过保留传统方法通常会丢失的时序物候信号，TESSERA为生态系统动态、农业粮食系统以及环境变化检测提供了新的洞见。此外，我们的开源实现支持结果的可重复性和扩展性，而隐私保护的设计则使研究人员能够保持数据主权。\n\n据我们所知，TESSERA在易用性、规模和准确性方面均属空前：目前尚无其他基础模型能够仅基于像素级别的光谱—时序特征，就提供分析就绪的输出、完全开放，并实现全球范围内的年度覆盖，且分辨率为10米。\n\n以下是TESSERA表征地图的一些可视化结果（使用前三个通道作为RGB）：\n\n![repr_demo](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_884e63530245.png)\n\n## 论文\n以下是与TESSERA相关的出版物和预印本，按时间顺序排列：\n* Lisaius, M. C., Blake, A., Keshav, S., & Atzberger, C. (2024). 利用Barlow Twins从云层干扰的遥感时间序列中创建表征。IEEE应用地球观测与遥感专题期刊，17卷，第13162–13168页。IEEE应用地球观测与遥感专题期刊。https:\u002F\u002Fdoi.org\u002F10.1109\u002FJSTARS.2024.3426044\n\n* Z. Feng, C. Atzberger, S. Jaffer, J. Knezevic, S. Sormunen, R. Young, M.C. Lisaius, M. Immitzer, T. Jackson, J. Ball, D.A. Coomes, A. Madhavapeddy, A. Blake, S. Keshav (2025), [TESSERA：用于地球表征与分析的表面光谱时序嵌入](https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.20380)，即将发表于CVPR 2026。ArXiv预印本。https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.20380\n\n* Lisaius, M. C., Blake, A., Atzberger, C., & Keshav, S. (2026). 向更完善的作物类型分类迈进：一种适用于小田块的紧凑嵌入方法。已被2026年ISPRS会议论文集接受。国际摄影测量与遥感学会。\n\n* Z. Feng, C. Atzberger, S. Jaffer, J. Knezevic, S. Sormunen, R. Young, M.C. Lisaius, M. Immitzer, T. Jackson, J. Ball, D.A. Coomes, A. Madhavapeddy, A. Blake, S. Keshav, (2026) [TESSERA地理空间基础模型在多样化环境制图任务中的应用](http:\u002F\u002Fssrn.com\u002Fabstract=6142416)，SSRN预印本。http:\u002F\u002Fssrn.com\u002Fabstract=6142416\n  \n* Young, R., & Keshav, S. (2026). 基于校准不确定度量化对GEDI生物量估算值的插值，ArXiv预印本。https:\u002F\u002Fdoi.org\u002F10.48550\u002FArXiv.2601.16834\n  \n* Lisaius, M. C., Keshav, S., Blake, A., & Atzberger, C. (2026). 基于嵌入的塞内加尔花生种植区作物类型分类（ArXiv:2601.16900）。ArXiv预印本。https:\u002F\u002Fdoi.org\u002F10.48550\u002FarXiv.2601.16900\n\n* Ball, J.G.C, Wicklein J.A. , Feng, Z.,  Knezevic, J.,  Jaffer, S., Atzberger, C.,  Dalponte, M., and Coomes, D. 地理空间基础模型助力温带山地森林中的数据高效树种制图，BioArxiv，https:\u002F\u002Fdoi.org\u002F10.64898\u002F2026.02.23.707022\n\n## 演示文稿\n\n* [TESSERA 在“AI 为善”研讨会上的概述](https:\u002F\u002Fwww.youtube.com\u002Flive\u002F9yrpwFrwbGY)，Frank Feng，2026年1月22日\n* [TESSERA：用于地球表征与分析的预计算 FAIR 全球像素嵌入](https:\u002F\u002Fwww.grss-ieee.org\u002Fevent\u002Ftessera-precomputed-fair-global-pixel-embeddings-for-earth-representation-and-analysis\u002F) IEEE GRSS 讲座，Frank Feng，2025年12月12日\n* [2页摘要（PPTX）](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002Fzjo4trov0z2qnmdeitng0\u002FCRI-2slide.pptx?rlkey=5kkojiknt6hdn2zplzlotqnbt&st=ezafh67n&dl=0) 用于 CRI 快闪演讲，S. Keshav，2025年10月7日\n* 基础模型概述（PPTX），剑桥大学生态学小组会议，DAB，James Ball，2025年10月6日\n* [TESSERA 概述演示文稿，重点介绍生态应用](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002F8xvanw3kk586lp1ld31kd\u002Fmaryland_talk_slides.pdf?rlkey=osyhtk1kc2pcj81iel0u32lub&st=6kedpwv6&dl=0)（PDF），马里兰大学，Frank Feng，2025年10月1日\n* [TESSERA 概述演示文稿](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002F0rsq4wkao3c7fgwljd8ec\u002FJCU-tesserav2.pptx?rlkey=ccutcxgwi068c09n20t1yi549&st=13if23b3&dl=0)（PPTX），詹姆斯库克大学，S. Keshav，2025年9月29日\n* [TESSERA 概述演示文稿](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002F1p7nabvlvie8fzyomkx7w\u002Fdab_talk_slides.pdf?rlkey=ym3d44o80mbrdkasyzct9kzi5&st=ozvwczs7&dl=0)，剑桥大学，DAB，Frank Feng，2025年5月20日\n* [面向地球观测的自监督学习](https:\u002F\u002Fwww.dropbox.com\u002Fscl\u002Ffi\u002Fzjo4trov0z2qnmdeitng0\u002FCRI-2slide.pptx?rlkey=5kkojiknt6hdn2zplzlotqnbt&st=ezafh67n&dl=0)（PPTX），S. Keshav，埃克塞特，2025年4月\n\n## 许可证\n\nTESSERA 软件采用标准的 MIT 许可证发布。嵌入和模型权重则采用 [CC0](https:\u002F\u002Fcreativecommons.org\u002Fpublicdomain\u002Fzero\u002F1.0\u002F) 许可证发布：本质上，它们可以自由地用于商业和非商业目的。尽管我们法律上并不要求署名，但我们仍希望得到署名。\n\n# 使用 TESSERA\n\n\u003Ca id=\"global-embeddings-access\">\u003C\u002Fa>\n\n## 使用 GeoTessera 访问嵌入（推荐）\n\n我们已为整个地球生成了 2024 年 10 米分辨率的嵌入数据。这些数据可以通过 [GeoTessera](https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Fgeotessera) 库下载并用于下游应用，从而节省大量的计算时间和资源。我们将逐步向后扩展覆盖范围，直至 2017 年。当前的覆盖地图如下：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_01f166cb764b.png\"> \n\n## TESSERA 用户组\n\n欢迎感兴趣的用户加入我们的 [Zulip](https:\u002F\u002Feeg.zulipchat.com\u002Flogin\u002F) 讨论群组。\n\n\n# 创建您自己的嵌入\n\n如果您想使用我们的软件创建自己的嵌入，请按照以下说明操作。请注意，这是一项计算上极具挑战性的任务，您需要访问大量的计算和存储资源。\n\n## 硬件要求\n\n### 1. 存储要求\n\n运行此流程需要大量的存储空间。尽管该流程在处理后会清理一些中间文件，但下载的原始 Sentinel-2 和 Sentinel-1 文件仍将占用相当大的磁盘空间。例如，处理 2022 年的一个 100km×100km 区域以输出 TESSERA 表征图（10m 分辨率）至少需要 1TB 的存储空间。\n\n### 2. 内存要求\n\n我们使用的是预处理数据，最初来自 Microsoft Planetary Computer。然而，下一代嵌入将使用 ASF DAAC 的 OPERA 数据。无论哪种情况，大部分地理预处理工作都已经完成。尽管如此，我们仍建议至少配备 128GB 的内存。\n\n### 3. CPU 和 GPU\n\n该流程对 CPU 和 GPU 没有严格的要求，但更多的 CPU 核心和更强大的 GPU 可以显著加快推理速度。在处理 2022 年的一个 110km×110km 区域时，我们的测试表明，使用 128 核 CPU 和单个 NVIDIA A30 GPU 进行推理（CPU 和 GPU 各承担 50% 的推理工作）大约需要 10 小时才能完成。\n\n### 4. 操作系统\n\n对于数据预处理流程，我们几乎支持所有 Linux 系统。对于 Windows，我们建议使用 WSL。目前我们不支持 MacOS。\n\n对于模型推理部分，我们仅在 Linux 和 Windows WSL 上进行了测试，并且运行正常。\n\n## 数据预处理\n\n### 概述\n_**我们强烈建议您在运行流程之前先快速浏览整个教程。**_\n\n在此步骤中，我们将一整年的 Sentinel-1 和 Sentinel-2 数据沿时间维度堆叠起来，生成一个合成图像。对于 Sentinel-2，合成图像的形状为 (T,H,W,B)，其中 T 是该年有效观测的数量，B 是波段数量（我们选择了 10 个波段）。对于 Sentinel-1，我们提取了上升和下降轨道的数据。以上升轨道为例，合成图像的形状为 (T',H,W,B')，其中 T' 是该年有效上升观测的数量，B' 为 2，因为我们只获取 VV 和 VH 波段。\n\n我们最初从 Microsoft Planetary Computer 获取 Sentinel-1 和 Sentinel-2 数据：\n- Sentinel-1 数据源：https:\u002F\u002Fplanetarycomputer.microsoft.com\u002Fdataset\u002Fsentinel-1-rtc\n- Sentinel-2 数据源：https:\u002F\u002Fplanetarycomputer.microsoft.com\u002Fdataset\u002Fsentinel-2-l2a\n\n新一代嵌入将使用 ASF DAAC 的 OPERA 数据：\n- Sentinel-1 数据源：https:\u002F\u002Fregistry.opendata.aws\u002Fnasa-operal2rtc-s1v1\u002F\n- Sentinel-2 数据源：https:\u002F\u002Fregistry.opendata.aws\u002Fsentinel-2-l2a-cogs\u002F\n\n目前，我们的流程仅接受 TIFF 格式的输入。输入 ROI TIFF 的分辨率可以不同（例如 30m），但流程会 **始终以配置的 `RESOLUTION`（默认 10m）生成 Sentinel-1 和 Sentinel-2 输出**，同时保持 **ROI 的范围\u002F边界完全一致**。对于 TIFF 中有效的 ROI 区域，值为 1；否则为 0。如果您只有 shapefile 文件也没关系——我们提供了一个 `convert_shp_to_tiff.py` 脚本。\n\n### 下载源代码\n\n首先，创建一个空的工作目录：\n\n```bash\nmkdir tessera_project\ncd tessera_project\ngit clone https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera.git\n```\n\n为了更方便地运行流程，我们建议将数据输出目录放在与 `tessera_infer` 和 `tessera_preprocessing` 同一层次的位置：\n\n```\ntessera_project\n ┣ tessera_infer\n ┣ tessera_preprocessing\n ┣ my_data\n   ┣ roi.shp（您的 shapefile）\n   ┗ roi.tiff（我们建议使用 convert_shp_to_tiff.py 生成）\n```\n\n`roi.tiff` 可以使用位于 `tessera_preprocessing\u002Fconvert_shp_to_tiff.py` 中的 `convert_shp_to_tiff.py` 脚本生成。要使用它，只需在主函数中指定您的 shapefile 路径，它就会在同一目录下输出同名的 TIFF 文件。\n\n⚠️注意：_如果您的 ROI 相对较大，例如 100 km × 100 km，我们强烈建议您事先将 TIFF 分割成不超过 20 km × 20 km 的小块。然后依次在流程中处理每个小 TIFF 文件。过大的 ROI 可能会导致后端瓦片提供商出现问题。_\n\n### Python 环境\n\n我们需要一些地理处理库（幸运的是，我们不会使用 GDAL，因为它的环境配置非常麻烦），以及一些机器学习库（PyTorch，不过你需要根据各自的硬件自行安装）。我们已经将一些常用包列在 `requirements.txt` 文件中，你可以通过以下命令进行安装：\n\n```bash\npip install -r requirements.txt\n```\n\n注意：如果你在一个受管环境中工作，可能需要先创建一个虚拟环境，使用以下命令：\n\n```bash\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\n```\n\n### 脚本配置\n\n首先，进入 `tessera_preprocessing` 文件夹：\n\n```bash\ncd tessera_preprocessing\n```\n\n然后编辑 `s1_s2_downloader.sh` 文件，设置 ROI 的 TIFF 文件路径、输出目录和临时目录，以及数据源：\n\n```bash\n# === 基本配置 ===\nINPUT_TIFF=\"\u002F绝对路径\u002F到\u002F你的\u002Fdata_dir\u002Froi.tiff\"\nOUT_DIR=\"\u002F绝对路径\u002F到\u002F你的\u002Fdata_dir\"\n\nexport TEMP_DIR=\"\u002F绝对路径\u002F到\u002F你的\u002Ftemp_dir\"     # 临时文件目录\n\nmkdir -p \"$OUT_DIR\"\n\n# Python 环境路径\nPYTHON_ENV=\"\u002F绝对路径\u002F到\u002F你的\u002Fpython_env\u002Fbin\u002Fpython\"\n\n# === Sentinel-1 和 Sentinel-2 处理配置 ===\nYEAR=2022 # 范围 [2017-2025]\nRESOLUTION=10.0  # 输出分辨率（米）。ROI TIFF 可以是任意分辨率；范围会保持不变。\n\n# === 数据源配置 ===\n# mpc: Microsoft Planetary Computer (sentinel-1-rtc, sentinel-2-l2a)\n# aws: AWS Open Data 后端 (S1=OPERA RTC-S1 通过 ASF\u002FCMR + ASF Earthdata Cloud COGs, S2=Earth-search Sentinel-2 L2A COGs)\nDATA_SOURCE=\"mpc\"   # 选项：mpc\u002Faws\n```\n\n注意：`RESOLUTION` 控制输出像素大小。该流程会固定 ROI 的边界，并将 ROI 掩膜重新采样到输出网格中。\n\n### AWS 凭证（仅当 `DATA_SOURCE=\"aws\"` 时需要）\nEarth-search 上的 Sentinel-2 是公开数据，**不需要凭证**。\n\nSentinel-1 OPERA RTC-S1 是通过 ASF Earthdata Cloud（COG over HTTPS）访问的。你需要一个 Earthdata Login 令牌：\n- **创建 Earthdata 账户**：通过 [NASA Earthdata Login](https:\u002F\u002Furs.earthdata.nasa.gov\u002Fhome)。\n- **批准应用**：注册账户后，可以前往“Applications”选项卡，将 Alaska Satellite Facility Data Access 添加到已批准的应用列表中。\n- **获取 EDL Bearer 令牌 \u002F JWT**：点击“Generate Token”，并将其存储在本地（不要提交）。\n\n推荐方式（简单且明确）：\n\n```bash\nnano ~\u002F.edl_bearer_token\n# 粘贴令牌，保存并退出（Ctrl-O Enter，然后 Ctrl-X）\nchmod 600 ~\u002F.edl_bearer_token\n```\n\nAWS S1 下载器会使用此令牌从 ASF Earthdata Cloud 读取 COG 文件。\n\n如果你想获取临时的 S3 凭证（进阶操作；通常此流程不需要），请参考 ASF 的指导文档：\n- `https:\u002F\u002Fcumulus.asf.alaska.edu\u002Fs3credentialsREADME`\n\n在上述配置下方，还有一些可以根据你计算机性能进行调整的额外配置。\n\n首先，为 `s1_s2_downloader.sh` 文件赋予执行权限：\n\n```bash\nchmod +x s1_s2_downloader.sh\n```\n\n然后，我们可以运行：\n\n```bash\nbash s1_s2_downloader.sh\n```\n\n由于网络条件的原因，某些瓦片的处理可能会超时。我们的脚本包含复杂的超时管理机制，以避免这些问题。然而，有时仍有一些瓦片会失败。再次运行上述命令通常可以解决这个问题。\n\n如果所有的 Sentinel-1 和 Sentinel-2 数据都正确生成，就可以沿时间维度进行堆叠。这一步我们使用两个由 Rust 生成的可执行文件，速度非常快。你可以打开 `s1_s2_stacker.sh` 并修改以下内容：\n\n```bash\n# === 基本配置 ===\nBASE_DIR=\"\u002F绝对路径\u002F到\u002F你的\u002Fdata_dir\"\nOUT_DIR=\"${BASE_DIR}\u002Fdata_processed\"\nDOWNSAMPLE_RATE=1\n```\n\n通常情况下，我们不会修改 `DOWNSAMPLE_RATE`，这样在堆叠过程中就不会进行下采样。上述代码中的 `BASE_DIR` 与你在 `s1_s2_downloader.sh` 中修改的 `OUT_DIR` 是相同的。\n\n同样地，为 `s1_s2_stacker.sh` 文件赋予执行权限：\n\n```bash\nchmod +x s1_s2_stacker.sh\n```\n\n然后你可以执行堆叠操作：\n\n```bash\nbash s1_s2_stacker.sh\n```\n\n成功后，你会在 `\u002F绝对路径\u002F到\u002F你的\u002Fdata_dir\u002Fdata_processed` 目录下得到一些 `.npy` 文件。通常这些 `.npy` 文件体积较大，因此我们会将它们分割成更小、更易管理的单元。\n\n执行以下命令：\n\n```bash\npython dpixel_retiler.py \\\n    --tiff_path \u002F绝对路径\u002F到\u002F你的\u002Fdata_dir\u002Froi.tif \\\n    --d_pixel_dir \u002F绝对路径\u002F到\u002F你的\u002Fdata_dir\u002Fdata_processed \\\n    --patch_size 500 \\\n    --out_dir \u002F绝对路径\u002F到\u002F你的\u002Fdata_dir\u002Fretiled_d_pixel \\\n    --num_workers 16 \\\n    --overwrite \\\n    --block_size 2000\n```\n\n你可以自行调整上述的 `patch_size` 和 `block_size`。以上配置是针对分辨率为 10 米、形状为 (5000,5000) 的 TIFF 文件的推荐配置。\n\n如果上述代码顺利运行，你将在 `my_data\u002Fretiled_d_pixel` 目录下得到一些子文件夹。\n\n## 推理\n\n### 概述\n\n一旦数据预处理完成，我们就可以开始推理了。在继续之前，请检查 `my_data\u002Fretiled_d_pixel` 文件夹中是否存在如下子文件夹：\n```\nretiled_d_pixel\n ┣ 0_3500_500_4000\n ┣ 0_4000_500_4500\n ┣ 0_4500_500_5000\n ┣ 0_5000_500_5500\n ┣ 0_5500_500_6000\n ┣ 0_6000_500_6500\n```\n\n每个子文件夹应包含以下文件：\n```\n0_3500_500_4000\n ┣ bands.npy\n ┣ doys.npy\n ┣ masks.npy\n ┣ roi.tiff\n ┣ sar_ascending.npy\n ┣ sar_ascending_doy.npy\n ┣ sar_descending.npy\n ┗ sar_descending_doy.npy\n```\n\n如果这些文件存在，就可以开始推理。否则，请检查第一步是否成功完成。\n\n推理需要 PyTorch。由于每个系统的 CUDA 版本可能略有不同，我们无法像数据预处理那样提供一个封装好的 Docker Python 环境。幸运的是，推理所需的 Python 环境比数据预处理要简单得多，因为它不使用 GDAL 或 SNAP 等地理处理库。\n\n### PyTorch 准备\n\n如果你尚未安装 PyTorch，可以参考以下步骤。否则，可以跳过本节。\n\n首先，检查你的系统 CUDA 版本：\n\n```bash\nnvidia-smi\n```\n\n然后访问 https:\u002F\u002Fpytorch.org\u002F，根据你的 CUDA 版本选择合适的版本进行安装，例如：\n\n```bash\npip install torch torchvision torchaudio --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n```\n\n### 模型权重\n\n接下来，从 [Google Drive](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F18RPptbUkCIgUfw1aMdMeOrFML_ZVMszn?usp=sharing) 下载模型权重，并将 `.pt` 文件放入 `tessera_infer\u002Fcheckpoints` 目录中：\n\n```\ntessera_infer\n ┗ checkpoints\n     ┗ best_model_fsdp_20250427_084307.pt\n ┗ configs\n ┗ src\n```\n\n_**请注意，上述检查点是一个早期阶段的模型，它原生生成 float32 嵌入。因此，这个模型并不是用于生成 geotessera 库中 int8 嵌入的那个模型。我们很快会将用于创建 geotessera 嵌入的具体检查点部署到完整的流水线中。**_\n\n### QAT 模型权重（量化输出）\n\n对于量化推理，请使用来自 [Google Drive](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HJ92aS5ERXMLfSFYJ4m3OKycJJdC1QvO\u002Fview?usp=sharing) 的 QAT 检查点，并将其放置在 `tessera_infer_QAT\u002Fcheckpoints` 目录下：\n\n```\ntessera_infer_QAT\n ┣ checkpoints\n ┃   ┗ best_model_fsdp_20250608_220648_QAT.pt\n ┣ configs\n ┗ src\n```\n\nQAT 流水线会输出量化后的嵌入，格式为 **int8 + 缩放值**：\n- `tile_name.npy`：int8 嵌入张量，形状为 `(H, W, 128)`\n- `tile_name_scales.npy`：float32 缩放图，形状为 `(H, W)`\n\n### 配置 Bash 脚本\n\n为了简化推理配置，我们提供了 `tessera_infer\u002Finfer_all_tiles.sh`。您只需编辑几个参数即可：\n\na. 基础数据目录：\n```bash\nBASE_DATA_DIR=\"your_data_directory\"\n```\n这是您的数据存储文件夹，与之前 Bash 脚本中的 `BASE_DATA_DIR` 相同，例如 `\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data`。\n\nb. Python 环境：\n```bash\nexport PYTHON_ENV=\"your_python_path\"\n```\n在此处填写您的 Python 环境的绝对路径，例如 `\u002Fhome\u002Fuser\u002Fanaconda3\u002Fenvs\u002Ftessera_env\u002Fbin\u002Fpython`。\n\nc. CPU\u002FGPU 分割：\n```bash\nCPU_GPU_SPLIT=\"1:1\"  # 格式：CPU:GPU 比例\n```\n该脚本支持同时使用 CPU 和 GPU 进行推理。此比例指定了每个设备将处理的 `retiled_patches` 的比例。默认为 1:1（均分）。如果仅使用 GPU 进行推理，则设置为 0:1。\n\nd. CPU 相关设置\n\n```bash\nMAX_CONCURRENT_PROCESSES_CPU=20\n```\n用于瓦片推理的最大 CPU 进程数。例如，若设置为 20，则会同时处理 20 个瓦片。\n\n```bash\nAVAILABLE_CORES=$((TOTAL_CPU_CORES \u002F 2)) # 使用 50% 的核心\n```\n要使用的 CPU 核心数。请根据需要调整此值，以避免占用过多的 CPU 资源！\n\ne. GPU 相关设置：\n```bash\nMAX_CONCURRENT_PROCESSES_GPU=1\n```\n用于推理的最大 GPU 进程数。如果系统中只有 1 个 GPU，则将其设置为 1。\n\n```bash\nGPU_BATCH_SIZE=1024  # 对于 GPU 可以更大，若占用内存过多则需降低\n```\nPyTorch 推理时一次处理的样本数量。如果该值占用过多 GPU 内存或导致 GPU OOM 错误，请相应地减少它。\n\nf. 其他设置\n还有其他可配置的参数，请根据需要进行调整。\n\n### 开始推理\n\n一切准备就绪后，进入 `tessera_infer` 文件夹：\n\n```bash\ncd tessera_infer\n```\n\n然后为 `infer_all_tiles.sh` 赋予执行权限：\n\n```bash\nchmod +x infer_all_tiles.sh\n```\n\n最后运行脚本：\n\n```bash\nbash infer_all_tiles.sh\n```\n\n如果成功，您将看到类似以下的日志：\n\n```\n(base) zf281@daintree:\u002Fscratch\u002Fzf281\u002Ftessera_project\u002Ftessera_infer$ bash infer_all_tiles.sh\n[INFO] 总 CPU 核心数：256，使用：192\n[INFO] CPU:GPU 分割比例 = 1:1（总计：2）\n\n==== 设置目录 ====\n[SUCCESS] 已创建必要目录\n\n==== 扫描瓦片 ====\n[INFO] 瓦片目录：\u002Fscratch\u002Fzf281\u002Fjovana\u002Fretiled_d_pixel\n[INFO] 输出目录：\u002Fscratch\u002Fzf281\u002Fjovana\u002Frepresentation_retiled\n[SUCCESS] 共找到 226 个瓦片\n[INFO] 示例瓦片：\n  - 0_3500_500_4000\n  - 0_4000_500_4500\n  - 0_4500_500_5000\n  - ...\n```\n\n同时，在 `tessera_infer` 文件夹中会生成一个 `logs` 文件夹，其中包含每个 CPU 和 GPU 进程的更详细日志。\n\n### QAT 推理（CPU + GPU，带 AMX 自动回退）\n\n我们还在 `tessera_infer_QAT` 中提供了 QAT 推理流水线：\n\n```bash\ncd tessera_infer_QAT\nchmod +x infer_all_tiles.sh\nbash infer_all_tiles.sh\n```\n\n在运行前，请编辑 `tessera_infer_QAT\u002Finfer_all_tiles.sh` 中的以下参数：\n\n```bash\nBASE_DATA_DIR=\"\u002Fabsolute_path_to_your_data_dir\"\nexport PYTHON_ENV=\"\u002Fabsolute_path_to_your_python\u002Fbin\u002Fpython\"\nCPU_GPU_SPLIT=\"1:1\"  # CPU:GPU 比例，例如 1:0 或 0:1\nCHECKPOINT_PATH=\"checkpoints\u002Fbest_model_fsdp_20250608_220648_QAT.pt\"\n```\n\n注意事项：\n- QAT 现在支持在一次运行中同时进行 CPU 和 GPU 推理（按比例分割，与 `tessera_infer` 的方式相同）。\n- 在 CPU 上，当可用时会自动检测并启用 AMX。\n- 如果 AMX 不可用，则会自动回退到默认的 CPU 推理。\n\n### 拼接最终表征地图\n\n推理通常需要较长时间，具体取决于您的 ROI 大小和硬件性能。完成推理后，您可以在 `my_data\u002Frepresentation_retiled` 中找到许多 `.npy` 文件：\n\n```\nrepresentation_retiled\n ┣ 0_3500_500_4000.npy\n ┣ 0_4000_500_4500.npy\n ┣ 0_4500_500_5000.npy\n ┣ 0_5000_500_5500.npy\n ┣ 0_5500_500_6000.npy\n ┣ 0_6000_500_6500.npy\n ┣ 0_6500_500_7000.npy\n ┣ 0_7000_500_7500.npy\n ┣ 1000_0_1500_500.npy\n ┣ 1000_1000_1500_1500.npy\n ┣ 1000_1500_1500_2000.npy\n ┣ 1000_2000_1500_2500.npy\n```\n\n最后一步是使用 `tessera_infer\u002Fstitch_tiled_representation.py` 将它们拼接在一起：\n\n```bash\npython stitch_tiled_representation.py \\\n--d_pixel_retiled_path \u002Fpath\u002Fto\u002Fd_pixel_retiled \\\n--representation_retiled_path \u002Fpath\u002Fto\u002Frepresentation_retiled \\\n--downstream_tiff \u002Fpath\u002Fto\u002Fdownstream.tiff \\\n--out_dir \u002Fpath\u002Fto\u002Foutput_directory\n```\n\n例如：\n\n```bash\npython stitch_tiled_representation.py \\\n--d_pixel_retiled_path \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Fd_pixel_retiled \\\n--representation_retiled_path \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Frepresentation_retiled \\\n--downstream_tiff \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Fdownstream.tiff \\\n--out_dir \u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\n```\n\n最终，您将在 `my_data` 目录中得到一张拼接后的表征地图，其形状为 (H,W,128)，其中 H 和 W 与您最初的 `roi.tiff` 匹配。该表征地图是一个 NumPy 数组。如果您想将其转换为 TIFF 格式以便在 QGIS 等软件中查看，可以使用 `tessera_infer\u002Fconvert_npy2tiff.py` 脚本。只需修改主函数如下：\n\n```python\nnpy_path = \"\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Fstitched_representation.npy\"  # 更改为实际的 npy 文件路径\nref_tiff_path = \"\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002Froi.tiff\"  # 更改为实际的参考 tiff 文件路径\nout_dir = \"\u002Fmaps\u002Fusr\u002Ftessera_project\u002Fmy_data\u002F\"  # 更改为实际的输出目录\n```\n\n## 下游任务\n\n如果您想复现论文中的下游任务，可以访问 https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera-downstream-task。那里提供了许多示例。\n\n# 附加信息\n\n## 团队\n\n### 剑桥大学教职人员\n* [S. Keshav](https:\u002F\u002Fsvr-sk818-web.cl.cam.ac.uk\u002Fkeshav\u002Fwiki\u002Findex.php\u002FMain_Page)\n* [Anil Madhavapeddy](https:\u002F\u002Fanil.recoil.org)\n* [Sadiq Jaffer](https:\u002F\u002Ftoao.com)\n* [David Coomes](https:\u002F\u002Fwww.plantsci.cam.ac.uk\u002Fdirectory\u002Fdavid-coomes)\n\n### 博士后\n* James Ball\n\n### 博士生\n* Madeleine Lisaius\n* Zhengpeng (Frank) Feng\n* Robin Young\n* Jovana Knezevic\n\n### 本科生\n* Zejia Yang（Part II 学生，与 Frank Feng 合作研究空间特征提取器的 MAE 预训练）\n\n### 实习生\n* Kenzy Soror（滑铁卢大学，与 Robin Young 合作）\n* Artyom Gabtraupov（滑铁卢大学，与 Robin Young 合作）\n* Gabriel Mahler（剑桥大学，与 Anil Madhavapeddy 和 Silviu Petrovan 合作，研究 [刺猬栖息地与追踪](https:\u002F\u002Fanil.recoil.org\u002Fideas\u002Fhedgehog-mapping)）\n* Pan Leyu（帝国理工学院，与 Frank Feng 合作，研究基于 OSM 生成的文本嵌入）\n\n### 合作伙伴\n* [Clement Atzberger](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fclement-atzberger-8abb8065\u002F?originalSubdomain=at)，dClimate Labs\n* [Andrew Blake](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAndrew_Blake_(computer_scientist))，Mantle Labs\n\n### 访问学者\n* Silja Sormunnen，芬兰阿尔托大学\n* Isabel Mansley（爱丁堡大学，与 David Coomes 和 Anil Madhavapeddy 合作，研究 [苏格兰栖息地 mapping](https:\u002F\u002Fanil.recoil.org\u002Fideas\u002Fcairngorms-connect-habitats)\n\n## 联系方式\n\n技术问题请发送至 Frank Feng（zf281@cam.ac.uk），或在我们的 [Zulip 论坛](https:\u002F\u002Feeg.zulipchat.com\u002Flogin\u002F) 提问。非技术类问题可发送至 S. Keshav 教授（sk818@cam.ac.uk）。\n\n## 引用\n如果您在研究中使用 TESSERA，请引用以下 arXiv 论文：\n\n```bibtex\n@misc{feng2025tesseratemporalembeddingssurface,\n      title={TESSERA: 地表光谱的时间嵌入用于地球表征与分析}, \n      author={Zhengpeng Feng 等},\n      year={2025},\n      eprint={2506.20380},\n      archivePrefix={arXiv},\n      primaryClass={cs.LG},\n      url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.20380}, \n}\n```\n\n## 致谢\n我们衷心感谢 UKRI 以及剑桥大学的 [DAWN](https:\u002F\u002Fwww.hpc.cam.ac.uk\u002Fd-w-n) 超级计算机团队对本项目的慷慨支持。同时，我们也感谢 [AMD](https:\u002F\u002Fwww.amd.com\u002Fen.html)、[Vultr](https:\u002F\u002Fwww.vultr.com\u002F)、[Dirac 高性能计算设施](https:\u002F\u002Fdirac.ac.uk)、[微软 AI For Good 实验室](https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002Fgroup\u002Fai-for-good-research-lab\u002F)、Robert Sansom 博士、[dClimate](https:\u002F\u002Fwww.dclimate.net\u002F) 以及 [亚马逊云服务 (AWS)](https:\u002F\u002Faws.amazon.com\u002F) 在其 AWS Open Data 计划（https:\u002F\u002Fopendata.aws\u002F）下的支持。没有他们的支持、计算资源和技术协助，这项工作将无法实现。\n\n## 星标历史\n[![星标历史图](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_readme_8f328689087f.png)](https:\u002F\u002Fwww.star-history.com\u002F#ucam-eo\u002Ftessera&Date)\n\n## 使用条款\n### TESSERA 使用条款与伦理准则\n\n### 许可协议\nTESSERA 数据和嵌入以 **知识共享零协议 [CC-0](https:\u002F\u002Fcreativecommons.org\u002Fpublic-domain\u002Fcc0\u002F)** 的形式提供。这意味着您可以：\n\n* **分享**——以任何媒介或格式复制并重新分发该材料\n* **改编**——为任何目的（包括商业用途）混编、转换或在此基础上进行创作\n\n### 目的与预期用途\nTESSERA 的开发旨在推动科学研究，并支持环境监测、生态保护、可持续农业以及对地球系统的理解。我们设计此工具是为了实现以下目标：\n* 科学研究与教育\n* 环境监测与保护\n* 农业与粮食安全分析\n* 气候变化研究与适应规划\n* 可持续土地利用与资源管理\n* 有益于社会和环境的公共利益应用\n\n### 伦理准则\n尽管 CC0 许可允许广泛使用，但我们强烈建议用户考虑其工作的伦理影响。这些伦理准则仅供参考，并不构成具有法律约束力的限制。我们请求用户：\n\n**负责任地行动：**\n* 在分析特定地点时，考虑隐私影响\n* 尊重受影响社区的权利与尊严\n* 注意潜在的双重用途问题\n\n**保持透明：**\n* 准确描述数据的特性（年度分辨率、10 米空间分辨率）\n* 承认您在应用中的局限性\n* 不要歪曲 TESSERA 的能力\n\n**支持积极影响：**\n* 考虑您的工作如何促进社会福祉\n* 在适当情况下与受影响社区沟通\n* 分享能够增进公众知识的研究成果\n\n### 数据特性\n用户应了解，TESSERA 提供：\n* **年度时间分辨率**——数据代表每年的汇总信息，而非实时或高频监测\n* **10 米空间分辨率**——适用于景观尺度的分析\n* **光谱-时间嵌入**——是压缩后的表示形式，而非原始影像\n\n请在您的工作中准确反映这些特性。\n\n### 社区标准\n我们鼓励负责任地使用，并欢迎社区反馈。如果您对潜在的应用有任何担忧，或对改进这些准则有建议，请随时与我们联系。\n我们保留根据社区意见和新出现的情况更新这些准则的权利，但此类更新不会追溯性地影响以 CC-0 许可发布的数据。\n\n### 联系方式\n如有疑问或反馈，请发送邮件至 sk818@cam.ac.uk。\n\n---\n\n*最后更新：2026年2月25日*","# TESSERA 快速上手指南\n\nTESSERA 是一个开源的地球表征基础模型，能够生成全球 10 米分辨率的时空嵌入向量（Embeddings）。它利用自监督学习处理海量卫星时间序列数据（Sentinel-1\u002F2），有效解决云层遮挡问题，适用于栖息地映射、碳核算及环境监测等下游任务。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下硬件和系统要求。由于涉及大规模遥感数据处理，对计算资源有较高需求。\n\n### 系统要求\n*   **操作系统**: 推荐 **Linux**。Windows 用户请使用 **WSL** (Windows Subsystem for Linux)。**暂不支持 macOS**。\n*   **内存 (RAM)**: 建议至少 **128GB**。\n*   **存储**: 需要大量磁盘空间。例如，处理 100km×100km 区域的一年数据并生成 10m 分辨率结果，至少需要 **1TB** 存储空间（用于存放原始 Sentinel 数据及中间文件）。\n*   **计算单元**:\n    *   **CPU**: 核心数越多越好（测试环境为 128 核）。\n    *   **GPU**: 推荐高性能 NVIDIA GPU（如 A30）。CPU 和 GPU 可协同工作加速推理。\n    *   *参考性能*: 处理 110km×110km 区域（2022 年数据）约需 10 小时（128 核 CPU + 单张 A30 GPU）。\n\n### 前置依赖\n*   Python 环境（建议 3.8+）\n*   Git\n*   访问微软 Planetary Computer 或 AWS Open Data 的网络权限（用于下载 Sentinel-1\u002F2 原始数据）\n\n## 安装步骤\n\n### 1. 获取源代码\n创建项目目录并克隆仓库：\n\n```bash\nmkdir tessera_project\ncd tessera_project\ngit clone https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera.git\ncd tessera\n```\n\n### 2. 安装依赖\n进入目录后，建议使用虚拟环境安装所需 Python 包。虽然原文未列出具体 `requirements.txt` 命令，通常标准操作如下：\n\n```bash\n# 创建虚拟环境\npython -m venv venv\nsource venv\u002Fbin\u002Factivate  # Windows 用户使用: venv\\Scripts\\activate\n\n# 安装依赖 (假设项目包含 requirements.txt)\npip install -r requirements.txt\n```\n\n> **注意**: 若需使用预计算的全球嵌入向量而非自行生成，推荐直接安装 [`geotessera`](https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Fgeotessera) 库，这将大幅节省计算资源：\n> ```bash\n> pip install geotessera\n> ```\n\n## 基本使用\n\nTESSERA 主要有两种使用模式：直接使用预计算的全局嵌入（推荐大多数用户），或自行运行流水线生成自定义嵌入。\n\n### 模式一：使用预计算嵌入 (推荐)\n如果您只需要 2024 年全球 10m 分辨率的嵌入数据，请使用 `geotessera` 库直接下载和使用，无需本地训练或处理原始卫星数据。\n\n```python\nimport geotessera\n\n# 示例：加载指定区域的预计算嵌入\n# 具体 API 请参考 geotessera 文档，此处为概念演示\nembeddings = geotessera.load_embeddings(\n    bbox=[min_lon, min_lat, max_lon, max_lat],\n    year=2024\n)\n```\n\n### 模式二：自行生成嵌入 (高级用户)\n如果您需要处理特定年份（2017-2023）或特定区域的数据，请运行本地预处理和推理流水线。\n\n#### 1. 数据准备\n流水线支持输入 **GeoTIFF** 或 **Shapefile**。\n*   **ROI 定义**: 输入文件的分辨率可任意（如 30m），但输出将强制重采样为配置的 `RESOLUTION`（默认 10m）。\n*   **格式转换**: 如果只有 Shapefile，使用提供的脚本转换：\n    ```bash\n    python convert_shp_to_tiff.py input.shp output.tif\n    ```\n    *注：ROI 区域内像素值为 1，区域外为 0。*\n\n#### 2. 运行流水线\n数据源默认配置为微软 Planetary Computer (Sentinel-1 RTC 和 Sentinel-2 L2A)。新一代版本将支持 ASF DAAC (OPERA)。\n\n确保输入数据为 TIFF 格式后，执行主脚本（具体脚本名称请参考仓库内最新文档，通常为 `run_pipeline.py` 或类似入口）：\n\n```bash\n# 示例命令结构，具体参数请参考仓库内配置文件\npython run_inference.py \\\n    --roi_path path\u002Fto\u002Fyour\u002Froi.tif \\\n    --year 2022 \\\n    --resolution 10 \\\n    --output_dir .\u002Fresults\n```\n\n**处理流程说明：**\n1.  **数据堆叠**: 自动下载并堆叠全年 Sentinel-1 (升降轨 VV\u002FVH) 和 Sentinel-2 (10 个波段) 数据。\n2.  **云处理**: 利用 Barlow Twins 算法对齐无云样本，生成包含缺失观测信息的 128 维潜在表示。\n3.  **输出生成**: 生成与分析就绪的 Representation Map。\n\n---\n*提示：自行生成嵌入计算密集且耗时，请确保拥有足够的存储和算力资源。对于大多数研究和应用案例，优先推荐使用预计算的全球嵌入数据。*","某省级农业监测中心正试图利用卫星时间序列数据，对全省冬小麦种植区进行精准的物候期识别与产量预估。\n\n### 没有 tessera 时\n- **数据清洗耗时巨大**：面对海量且常被云层遮挡的卫星影像，团队需花费数周编写复杂算法去云插值，仍难以还原完整的作物生长曲线。\n- **标注样本严重匮乏**：训练高精度模型依赖大量人工标注的历史地块数据，但现有带标签数据集稀缺，导致模型泛化能力差，无法覆盖全省多样地貌。\n- **计算资源不堪重负**：处理 PB 级的时序遥感数据需要昂贵的 GPU 集群支持，常规方法难以在有限算力下完成全域 10 米分辨率的特征提取。\n- **关键物候信号丢失**：传统静态图像分析或简单平均法往往抹平了作物随季节变化的细微光谱特征，导致无法精准判断拔节、抽穗等关键农时。\n\n### 使用 tessera 后\n- **自动修复时序缺失**：tessera 基于自监督学习，能直接从含云的原生时间序列中提取特征，无需繁琐的去云预处理即可生成包含完整生长周期的嵌入向量。\n- **小样本实现高精度**：借助其预训练的 128 维全局基础模型，团队仅需少量本地标注数据微调，即可在下游任务中达到甚至超越专用模型的分类精度。\n- **开箱即用的全球覆盖**：直接调用 tessera 生成的分析就绪型嵌入数据，瞬间完成全省 10 米分辨率的特征映射，将原本数月的计算工程缩短至小时级。\n- **保留动态生态指纹**：tessera 独特地保留了像素级的时间物候信号，使系统能敏锐捕捉作物生长的细微变化，显著提升了产量预测与灾害预警的准确性。\n\ntessera 通过让机器“看懂”卫星影像的时间维度，将原本高门槛的地球观测数据分析变成了高效、低成本的标准化流程。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fucam-eo_tessera_884e6353.png","ucam-eo","Cambridge Centre for Earth Observation","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fucam-eo_a3ddf82e.png","Cambridge University and partner organisations are conducting research on the remote sensing of environmental change",null,"https:\u002F\u002Feo.conservation.cam.ac.uk","https:\u002F\u002Fgithub.com\u002Fucam-eo",[80,84],{"name":81,"color":82,"percentage":83},"Python","#3572A5",80.3,{"name":85,"color":86,"percentage":87},"Shell","#89e051",19.7,537,50,"2026-04-09T12:42:57","MIT",4,"Linux, Windows (通过 WSL)","非严格必需，但推荐使用以加速推理。测试环境使用单张 NVIDIA A30 GPU。","推荐 128GB",{"notes":97,"python":98,"dependencies":99},"1. 不支持 macOS 原生运行，Windows 用户建议使用 WSL。\n2. 存储需求巨大：处理 100km×100km 区域（2022 年数据）生成 10m 分辨率结果至少需要 1TB 存储空间，用于存放下载的 Sentinel-1\u002F2 原始文件及中间文件。\n3. 计算资源参考：在 128 核 CPU 和单张 NVIDIA A30 GPU 协作下，处理 110km×110km 区域约需 10 小时。\n4. 数据源主要来自 Microsoft Planetary Computer 或 AWS Open Data (Sentinel-1\u002F2)，输入支持 TIFF 格式或 Shapefile（需转换）。","未说明",[98],[14,15],[102,103,104,105],"foundation-models","machine-learning","remote-sensing","satellite-imagery","2026-03-27T02:49:30.150509","2026-04-10T04:29:17.552029",[109,114,119,124,128,133,138],{"id":110,"question_zh":111,"answer_zh":112,"source_url":113},27082,"在使用 Tessera 处理大区域并拼接结果时，为什么会出现明显的拼接伪影（seamlines），如何解决？","这是当前 QAT（量化感知训练）版本模型的已知局限性。建议尝试使用非 QAT 版本的检查点（checkpoint）看是否仍有此问题。如果问题依然存在，建议等待即将发布的 v1.1 模型（预计两周内发布），该新版本已完美解决了拼接伪影问题。此外，有用户指出将配置中的 `S1_MIN_COVERAGE` 设置为 0.01 也有助于减轻此类伪影。","https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera\u002Fissues\u002F17",{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},27083,"Tessera 模型权重文件的许可证是什么？","模型权重是在 CC0（公共领域贡献）许可下发布的，这一点已在项目的 Readme.md 文件中明确说明。这与代码的 MIT 许可证或数据\u002F嵌入的 CC-BY-4.0 许可证不同。","https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera\u002Fissues\u002F5",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},27084,"Tessera 如何处理 Sentinel-1 RTC 数据中的散斑噪声（speckle）？是否有专门的去噪步骤？","Tessera 没有应用任何显式的去散斑滤波器。散斑抑制是通过模型在时空维度上的表示学习隐式处理的。预处理方面，数据源（如 Microsoft Planetary Computer）已经对 SAR 数据进行了大量预处理，Tessera 主要进行数值转换，例如将振幅转换为分贝（dB）并进行缩放。","https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera\u002Fissues\u002F14",{"id":125,"question_zh":126,"answer_zh":127,"source_url":123},27085,"Sentinel-1 数据的空间分辨率是如何对齐的？OPERA RTC 数据是 30m 还是 10m？","从 AWS 管道获取的 OPERA Sentinel-1 数据原生分辨率即为 10 米。文档中提到的 30 米分辨率通常是指用于地形校正的数字高程模型（DEM）产品，而不是最终的 SAR 像素大小。因此， pipeline 直接使用 10m 的 SAR 数据生成 10m 的嵌入，无需将 30m 数据重采样到 10m。",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},27086,"从 Microsoft Planetary Computer (MPC) 切换到 AWS OPERA 数据源时，是否需要修改预处理函数或模型的均值\u002F标准差参数？","虽然两个数据源的 TIFF 值范围可能看起来不同，但测试表明生成的嵌入余弦相似度高于 0.96，几乎没有明显差异。因此，通常不需要更改预处理函数或模型统计参数。不过，为了严谨起见，官方仍推荐优先使用 MPC 作为数据源，AWS 仅作为提供更多选择的备选方案。","https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera\u002Fissues\u002F12",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},27087,"运行下载器脚本处理大面积区域时出现 Exit Code 137 错误，是什么原因？","Exit Code 137 通常表示进程因内存不足（Out Of Memory, OOM）被系统杀死。这在大面积处理任务中很常见。解决方法是调整并行分区数量和每个工人的内存限制。可以参考以下配置示例进行调整：\n# Sentinel-1 配置示例\nS1_PARTITIONS=12                   # S1 并行分区数\nS1_TOTAL_WORKERS=6                # S1 Dask 工人总数\nS1_WORKER_MEMORY=4                 # 每个 S1 工人的内存 (GB)\nS1_CHUNKSIZE=1024                  # S1 stackstac 块大小\nS1_MIN_COVERAGE=0.01               # 最小有效像素覆盖率 (%), 设为 0.01 可减轻伪影","https:\u002F\u002Fgithub.com\u002Fucam-eo\u002Ftessera\u002Fissues\u002F8",{"id":139,"question_zh":140,"answer_zh":141,"source_url":123},27088,"Tessera 的时间窗口（temporal window）是固定的还是可配置的？支持跨年序列吗？","虽然默认情况下嵌入是使用年度时间窗口生成的，但时间窗口在推理时是可以配置的。用户可以实验连续多年或跨年的序列。模型设计允许灵活的时间输入，不仅限于训练时固定的一年序列。",[]]