Web Analytics

tessera

⭐ 491 stars Japanese by ucam-eo

地球表面スペクトルの時間的埋め込みによる表現と解析(TESSERA) [CVPR2026]

Banner

バグ報告 🛠️   •   機能リクエスト 💡

PyPI version License

目次

TESSERAについて学ぶ

はじめに

衛星リモートセンシングは、生息地マッピング、炭素アカウンティング、保全および持続可能な土地利用の戦略など、多様な下流アプリケーションを可能にします。 しかし、衛星時系列データは膨大で、しばしば雲により汚染されており、利用が困難です。科学コミュニティが実用的な洞察を引き出す能力は、ラベル付き学習データセットの不足や時系列データ処理の計算負荷によって制約されることが多いです。 我々の研究の鍵となる洞察は、Dr. Clement Atzberger によるもので、衛星時系列の2つの雲のないランダムサンプルから得られた自己符号化器の埋め込みを、Barlow Twins を用いて整合させることにより、欠損観測を含む時系列全体を表現する埋め込みが得られるというものです。

このアイデアは、TESSERAの鍵であり、TESSERAは、10メートル解像度でピクセルごとのスペクトル・時間信号を128次元の潜在表現に保存するオープンな基盤モデルです。 自己教師あり学習を用いてペタバイト級の地球観測データを要約します。 我々は、最先端のタスク特化モデルや他の基盤モデルと5つの多様な下流タスクで比較し、TESSERAがこれらのベースラインに匹敵または上回ることを示しました。 従来の手法で失われがちな時間的な植物生理学的信号を保存することで、TESSERAは生態系の動態、農業食料システム、および環境変化検出に新たな洞察をもたらします。 さらに、我々のオープンソース実装は再現性と拡張性をサポートし、プライバシー保護設計により研究者がデータ主権を維持できます。

我々の知る限り、TESSERAは使いやすさ、規模、精度において前例がなく、他の基盤モデルは分析準備済みの出力を提供せず、オープンでなく、ピクセルレベルのスペクトル・時間特徴のみを用いて10m解像度の全球年次カバレッジを提供していません。

以下はTESSERAの表現マップの可視化結果(一番目から三番目のチャネルをRGBとして使用)です:

repr_demo

論文

以下はTESSERAに関連する出版物およびプレプリントを年代順に示します:

プレゼンテーション

ライセンス

TESSERAソフトウェアは標準のMITライセンスの下でリリースされています。埋め込みベクトルおよびモデルの重みはCC0ライセンスの下でリリースされています:基本的に、 商用・非商用の両方で自由に使用可能です。法的には帰属表示を要求していませんが、表示をお願いしています。

TESSERAの使用方法

GeoTesseraを使った埋め込みへのアクセス(推奨)

2024年の10m解像度で地球全体の埋め込みを生成しています。 これらはダウンロードして下流のアプリケーションで使用可能で、大幅な計算時間とリソースの節約が可能です。 GeoTesseraライブラリを使用してください。 2017年まで年ごとにカバレッジを遡って拡張していく予定です。現在のカバレッジマップは以下の通りです:

TESSERAユーザーグループ

興味のあるユーザーは、Zulipのディスカッショングループに参加してください。

独自の埋め込みの作成

当社のソフトウェアを使って独自の埋め込みを作成したい場合は、以下の手順に従ってください。 これは計算的に非常に負荷の高い作業であり、十分な計算リソースとストレージリソースへのアクセスが必要です。

ハードウェア要件

1. ストレージ要件

このパイプラインの実行には大量のストレージ容量が必要です。パイプラインは処理後に一部の中間ファイルを削除しますが、ダウンロードした生のSentinel-2およびSentinel-1ファイルはかなりのディスク容量を占有します。 例えば、2022年の100km×100km範囲を処理してTESSERA表現マップ(10m解像度)を出力するには、最低でも1TBのストレージが必要です。

2. メモリ要件

Microsoft Planetary Computerからの前処理済みデータを使用しています。ただし次世代の埋め込みはASF DAACのOPERAを使用予定です。いずれの場合も多くの地理的前処理は済んでいます。 それでも、最低128GBのRAMを推奨します。

3. CPUおよびGPU

パイプラインにCPUやGPUの厳密な要件はありませんが、CPUコア数が多く、より強力なGPUがあれば推論速度は大幅に向上します。 2022年の110km×110km範囲を処理した際、128コアCPUとNVIDIA A30 GPU1台を使い(CPUとGPUが推論をそれぞれ50%ずつ担当)、約10時間かかりました。

4. オペレーティングシステム

データ前処理パイプラインについては、ほぼすべてのLinuxシステムをサポートしています。Windowsの場合はWSLの使用を推奨します。現時点ではMacOSはサポートしていません。

モデル推論部分については、LinuxとWindows WSLでのみテストしており、正常に動作しています。

データ前処理

概要

_パイプラインを実行する前に、チュートリアル全体を速やかに確認することを強く推奨します。_

このステップでは、1年間分のSentinel-1とSentinel-2のデータを時間軸に沿って積み重ねてコンポジットを生成します。Sentinel-2のコンポジットの形状は (T,H,W,B) で、Tはその年の有効な観測回数、Bはバンド数(10バンドを選択)です。Sentinel-1は上昇軌道と下降軌道のデータを抽出しました。上昇軌道を例にとると、コンポジットの形状は (T',H,W,B') で、T'はその年の有効な上昇観測回数、B'は2で、VVとVHバンドのみ取得しています。

当初、Sentinel-1およびSentinel-2データはMicrosoftのPlanetary Computerから取得しました:

新世代の埋め込みはASF DAACのOPERAを使用します: 現在、パイプラインはTIFF形式の入力のみ受け付けています。入力ROI TIFFの解像度は異なる場合があります(例:30m)が、パイプラインは常に設定された RESOLUTION(デフォルト10m)でSentinel-1およびSentinel-2の出力を生成し、ROIの範囲/境界は同一に保ちます。TIFF内の有効なROI領域の値は1、そうでない場合は0です。シェイプファイルのみでも問題ありません。convert_shp_to_tiff.pyスクリプトを提供しています。

ソースコードのダウンロード

まず、空の作業ディレクトリを作成します:

mkdir tessera_project
cd tessera_project
git clone https://github.com/ucam-eo/tessera.git
パイプラインの操作を容易にするために、データ出力ディレクトリを tessera_infer および tessera_preprocessing と同じ階層に配置することを推奨します:

tessera_project
 ┣ tessera_infer
 ┣ tessera_preprocessing
 ┣ my_data
   ┣ roi.shp (your shapefile)
   ┗ roi.tiff (we recommend generating this using convert_shp_to_tiff.py)

roi.tifftessera_preprocessing/convert_shp_to_tiff.py にある convert_shp_to_tiff.py を使って生成できます。使用するには、メイン関数にシェイプファイルのパスを指定するだけで、同じディレクトリに同じ名前のTIFFが出力されます。

⚠️注意:_ROIが比較的大きい場合、例えば100 km × 100 kmの場合、TIFFを20 km × 20 km以下の小さいセクションに事前に分割することを強く推奨します。その後、パイプラインで各小さなTIFFファイルを順次処理してください。過度に大きなROIはバックエンドのタイルプロバイダーに問題を引き起こす可能性があります_

Python環境

地理処理用のパッケージ(幸いなことにGDALは使いません。環境構築が非常に難しいため)と機械学習用のパッケージ(PyTorch。ただし、各コンピュータのハードウェアが異なるため、これはご自身でインストールしてください)が必要です。共通のパッケージを requirements.txt にまとめてありますので、以下のようにインストールできます:

pip install -r requirements.txt
注意: 管理された環境にいる場合は、最初にvenvをインストールする必要があるかもしれません。
python3 -m venv venv
source venv/bin/activate

スクリプトの設定

まず、tessera_preprocessing フォルダに移動します:

cd tessera_preprocessing

次に、ファイル s1_s2_downloader.sh を編集して、ROI TIFF ファイル、出力および一時ディレクトリ、データソースを指定します:

# === Basic Configuration ===
INPUT_TIFF="/absolute/path/to/your/data_dir/roi.tiff"
OUT_DIR="/absolute/path/to/your/data_dir"

export TEMP_DIR="/absolute/path/to/your/temp_dir" # Temporary file directory

mkdir -p "$OUT_DIR"

Python environment path

PYTHON_ENV="/absolute/path/to/your/python_env/bin/python"

=== Sentinel-1 & Sentinel-2 Processing Configuration ===

YEAR=2022 # Range [2017-2025] RESOLUTION=10.0 # Output resolution (meters). ROI TIFF can be any resolution; extent is preserved.

=== Data Source Configuration ===

mpc: Microsoft Planetary Computer (sentinel-1-rtc, sentinel-2-l2a)

aws: AWS Open Data backends (S1=OPERA RTC-S1 via ASF/CMR + ASF Earthdata Cloud COGs, S2=Earth-search Sentinel-2 L2A COGs)

DATA_SOURCE="mpc" # choices: mpc/aws

注意:RESOLUTION は出力ピクセルサイズを制御します。パイプラインはROIの境界を固定し、ROIマスクを出力グリッドに再サンプリングします。

AWS認証情報(DATA_SOURCE="aws" の場合のみ必要)

Earth-search上のSentinel-2は公開されており、認証情報は不要です。

Sentinel-1 OPERA RTC-S1はASF Earthdata Cloud(HTTPS経由のCOG)からアクセスします。Earthdataログイントークンが必要です:

推奨(シンプルかつ明示的):

nano ~/.edl_bearer_token

paste token, save+exit (Ctrl-O Enter, then Ctrl-X)

chmod 600 ~/.edl_bearer_token

AWS S1 ダウンローダーは、このトークンを使用して ASF Earthdata Cloud から COG を読み取ります。

一時的な S3 資格情報を取得したい場合(高度な操作であり、通常このパイプラインでは不要です)、ASF のガイダンスを参照してください:

上記の設定の下には、コンピュータの性能に応じて変更可能な追加設定があります。

まず、s1_s2_downloader.sh に実行権限を付与します:

chmod +x s1_s2_downloader.sh

次に、以下を実行できます:

bash s1_s2_downloader.sh
ネットワーク状況により、一部のタイルの処理がタイムアウトすることがあります。弊社のスクリプトにはこれらの問題を回避する高度なタイムアウト管理が含まれています。しかし、時折一部のタイルが失敗することがあります。上記のコマンドを再度実行すると通常は解決します。

Sentinel-1 および Sentinel-2 のすべてのデータが正しく生成されると、それらを時間軸に沿ってスタックできます。このステップでは、Rustで生成された2つの実行可能ファイルを使用しており、とても高速です。s1_s2_stacker.sh を開き、以下を編集してください:

# === Basic Configuration ===
BASE_DIR="/absolute/path/to/your/data_dir"
OUT_DIR="${BASE_DIR}/data_processed"
DOWNSAMPLE_RATE=1
通常、DOWNSAMPLE_RATE は変更せず、スタッキング中にダウンサンプリングを行わないようにします。上記スニペットの BASE_DIR は、s1_s2_downloader.sh で変更した OUT_DIR と同じです。

同様に、s1_s2_stacker.sh にも権限を付与します:

chmod +x s1_s2_stacker.sh

次に、スタッキングを実行できます:

bash s1_s2_stacker.sh
成功すると、/absolute/path/to/your/data_dir/data_processed にいくつかの .npy ファイルが生成されます。通常、これらの .npy ファイルは非常に大きいため、小さくて扱いやすい単位にパッチ化します。

実行してください:

python dpixel_retiler.py \
    --tiff_path /absolute/path/to/your/data_dir/roi.tif \
    --d_pixel_dir /absolute/path/to/your/data_dir/data_processed \
    --patch_size 500 \
    --out_dir /absolute/path/to/your/data_dir/retiled_d_pixel \
    --num_workers 16 \
    --overwrite \
    --block_size 2000

上記の patch_sizeblock_size はご自身で変更可能です。上記の設定は、形状が (5000,5000) で解像度が10mのTIFFに推奨される設定です。

上記のコードが正常に実行されると、my_data/retiled_d_pixel にいくつかのサブフォルダが作成されます。

推論

概要

データ前処理が完了したら、推論を開始できます。進める前に、my_data/retiled_d_pixel フォルダに以下のようなサブフォルダが存在するか確認してください:

retiled_d_pixel
 ┣ 0_3500_500_4000
 ┣ 0_4000_500_4500
 ┣ 0_4500_500_5000
 ┣ 0_5000_500_5500
 ┣ 0_5500_500_6000
 ┣ 0_6000_500_6500
各サブフォルダには、以下のファイルが含まれている必要があります:

0_3500_500_4000
 ┣ bands.npy
 ┣ doys.npy
 ┣ masks.npy
 ┣ roi.tiff
 ┣ sar_ascending.npy
 ┣ sar_ascending_doy.npy
 ┣ sar_descending.npy
 ┗ sar_descending_doy.npy
これらのファイルが存在する場合、推論を開始できます。存在しない場合は、最初のステップが正常に完了したか確認してください。

推論にはPyTorchが必要です。システムごとにCUDAのバージョンが若干異なるため、データ前処理で行ったようなDockerにカプセル化されたPython環境は提供できません。幸いにも、推論用のPython環境はGDALやSNAPのような地理処理パッケージを使用しないため、データ前処理よりもはるかに簡単に構成できます。

Pytorchの準備

まだPytorchをインストールしていない場合は、以下の手順を参照してください。既にインストール済みの場合は、このセクションを無視できます。

まず、システムのCUDAバージョンを確認してください:

nvidia-smi

次に https://pytorch.org/ にアクセスし、CUDAのバージョンに基づいて適切なバージョンを選択してインストールしてください。例えば:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

モデルウェイト

次に、Googleドライブからモデルウェイトをダウンロードし、.ptファイルを tessera_infer/checkpoints ディレクトリに配置します:

tessera_infer
 ┗ checkpoints
     ┗ best_model_fsdp_20250427_084307.pt
 ┗ configs
 ┗ src

_上記で言及したチェックポイントは初期段階のモデルであり、ネイティブにfloat32埋め込みを生成します。したがって、このモデルはgeotesseraライブラリでint8埋め込みを生成するために使用されたものではありません。geotessera埋め込みを作成するために使用された特定のチェックポイントを近日中に完全なパイプラインに展開する予定です。_

Bashスクリプトの設定

推論設定を簡素化するために、tessera_infer/infer_all_tiles.shを提供しています。編集する必要があるのは数パラメータだけです:

a. ベースデータディレクトリ:

BASE_DATA_DIR="your_data_directory"
これはデータストレージフォルダで、前回のbashのBASE_DATA_DIRと同じです。例:/maps/usr/tessera_project/my_data

b. Python環境:

export PYTHON_ENV="your_python_path"
ここにPython環境への絶対パスを書いてください。例:/home/user/anaconda3/envs/tessera_env/bin/python

c. CPU/GPU 分割:

CPU_GPU_SPLIT="1:1"  # Format: CPU:GPU ratio
スクリプトはCPUとGPUの両方を使用した同時推論をサポートしています。この比率は各デバイスが処理するretiled_patchesの割合を指定します。デフォルトは1:1(均等分割)です。GPUのみで推論する場合は0:1に設定してください。

d. CPU 関連の設定

MAX_CONCURRENT_PROCESSES_CPU=20
タイル推論のための最大CPUプロセス数。例えば、20に設定すると、20個のタイルを同時に処理します。

AVAILABLE_CORES=$((TOTAL_CPU_CORES / 2)) # Use 50% of the cores
使用するCPUコアの数。CPUリソースの過剰消費を避けるため、必要に応じてこの値を変更してください!

e. GPU 関連設定:

MAX_CONCURRENT_PROCESSES_GPU=1
推論のためのGPUプロセスの最大数。システムにGPUが1台しかない場合は、これを1に設定してください。

GPU_BATCH_SIZE=1024  # Larger for GPU, if this takes too much memory, reduce it
PyTorch推論時に一度に処理するサンプル数。この値がGPUメモリを過剰に消費したり、GPUでOOMエラーを引き起こす場合は、適宜減らしてください。

f. その他の設定 設定可能な他のパラメータもあります。必要に応じて調整してください。

推論の開始

すべて準備が整ったら、tessera_inferフォルダに移動してください:

cd tessera_infer

次に、infer_all_tiles.shに実行権限を与えます:

chmod +x infer_all_tiles.sh

それから実行します:

bash infer_all_tiles.sh

成功すると、次のようなログが表示されます:

(base) zf281@daintree:/scratch/zf281/tessera_project/tessera_infer$ bash infer_all_tiles.sh
[INFO] Total CPU cores: 256, Using: 192
[INFO] CPU:GPU split ratio = 1:1 (total: 2)

==== SETUP DIRECTORIES ==== [SUCCESS] Created necessary directories

==== SCANNING TILES ==== [INFO] Tile directory: /scratch/zf281/jovana/retiled_d_pixel [INFO] Output directory: /scratch/zf281/jovana/representation_retiled [SUCCESS] Found 226 tiles total [INFO] Sample tiles:

  • 0_3500_500_4000
  • 0_4000_500_4500
  • 0_4500_500_5000
  • ...
同時に、tessera_inferフォルダ内にlogsフォルダが生成され、各CPUおよびGPUプロセスのより詳細なログが記録されます。

最終表現マップのスティッチ

推論は通常、ROIのサイズやハードウェアの性能によって長時間かかります。完了すると、my_data/representation_retiledに多数の.npyファイルが見つかります:

representation_retiled
 ┣ 0_3500_500_4000.npy
 ┣ 0_4000_500_4500.npy
 ┣ 0_4500_500_5000.npy
 ┣ 0_5000_500_5500.npy
 ┣ 0_5500_500_6000.npy
 ┣ 0_6000_500_6500.npy
 ┣ 0_6500_500_7000.npy
 ┣ 0_7000_500_7500.npy
 ┣ 1000_0_1500_500.npy
 ┣ 1000_1000_1500_1500.npy
 ┣ 1000_1500_1500_2000.npy
 ┣ 1000_2000_1500_2500.npy
最後のステップは、tessera_infer/stitch_tiled_representation.py を使用してそれらをつなぎ合わせることです:

python stitch_tiled_representation.py \
--d_pixel_retiled_path /path/to/d_pixel_retiled \
--representation_retiled_path /path/to/representation_retiled \
--downstream_tiff /path/to/downstream.tiff \
--out_dir /path/to/output_directory
例えば:

python stitch_tiled_representation.py \
--d_pixel_retiled_path /maps/usr/tessera_project/my_data/d_pixel_retiled \
--representation_retiled_path /maps/usr/tessera_project/my_data/representation_retiled \
--downstream_tiff /maps/usr/tessera_project/my_data/downstream.tiff \
--out_dir /maps/usr/tessera_project/my_data
最後に、my_data ディレクトリに形状が (H,W,128) のステッチされた表現マップが得られます。ここで H と W は最初の roi.tiff と一致します。表現マップは NumPy 配列です。QGIS などのソフトウェアで表示するために TIFF に変換したい場合は、tessera_infer/convert_npy2tiff.py スクリプトを使用できます。メイン関数を以下のように修正してください。

npy_path = "/maps/usr/tessera_project/my_data/stitched_representation.npy"  # Change to the actual npy file path
ref_tiff_path = "/maps/usr/tessera_project/my_data/roi.tiff"  # Change to the actual reference tiff file path
out_dir = "/maps/usr/tessera_project/my_data/"  # Change to the actual output directory

下流タスク

論文の下流タスクを再現したい場合は、https://github.com/ucam-eo/tessera-downstream-task をご覧ください。多くの例が提供されています。

追加情報

チーム

ケンブリッジ教員

ポスドク

博士課程

学部生

インターン

共同研究者

ビジター

お問い合わせ

技術的な質問はFrank Feng(zf281@cam.ac.uk)まで、またはZulipフォーラムでご質問ください。技術以外の質問はProf. S. Keshav(sk818@cam.ac.uk)までお送りください。

引用

研究でTESSERAを使用する場合は、arXiv論文を引用してください:

@misc{feng2025tesseratemporalembeddingssurface,
      title={TESSERA: Temporal Embeddings of Surface Spectra for Earth Representation and Analysis}, 
      author={Zhengpeng Feng et al.},
      year={2025},
      eprint={2506.20380},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2506.20380}, 
}

謝辞

本プロジェクトにおいて寛大な支援をいただいたUKRIおよびケンブリッジのDAWNスパコンチームに感謝いたします。また、AMDVultrDirac高性能計算施設Microsoft AI For Good Lab、Dr. Robert Sansom、dClimate、およびAWSのAWS Open Dataプログラム(https://opendata.aws/)におけるAmazon Web Services (AWS)の支援にも感謝いたします。本研究は彼らの支援、計算資源、技術的支援なしには実現不可能でした。

Star History

Star History Chart

AUP

TESSERA 利用規約および倫理ガイドライン

ライセンス

TESSERAのデータおよび埋め込みはクリエイティブ・コモンズ0国際ライセンスCC-0の下で提供されています。 これは以下のことが自由にできることを意味します:

目的および想定される利用

TESSERAは科学研究の促進および環境モニタリング、保全、持続可能な農業、地球システムの理解を支援するために開発されました。このツールは以下を可能にするよう設計されています:

倫理ガイドライン

CC0ライセンスは広範な利用を許可しますが、利用者にはその仕事の倫理的影響を考慮することを強く推奨します。これらの倫理ガイドラインは助言的なものであり、法的拘束力のある制限を課すものではありません。利用者には以下をお願いしています:

責任ある行動:

透明性の確保:

ポジティブな影響を支援する:

データの特性

ユーザーはTESSERAが以下を提供することを理解すべきです:

これらの特性をあなたの作業で正確に表現してください。

コミュニティ基準

責任ある利用を奨励し、コミュニティからのフィードバックを歓迎します。潜在的な応用について懸念やガイドライン改善の提案があれば、ご連絡ください。

コミュニティの意見や新たな考慮事項に基づきこれらのガイドラインを更新する権利を保持しますが、そのような更新はデータがリリースされたCC-0ライセンスに遡及的な影響を及ぼすものではありません。

連絡先

質問やフィードバックは以下まで:Email sk818@cam.ac.uk

---

最終更新日:2026年2月25日

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-09 ---