1. 研究データの取得・収集・保存・解析
  2. データを保存・管理する
  3. mdx II × Codex Agent による AI for Science Webデモ構築


mdx II × Codex Agent による AI for Science Webデモ構築

OpenCLIPを例に学ぶ:mdx IIクラウド仮想マシンの準備から仏像識別AI Webデモの起動まで

mdx IIは、データ活用社会創成プラットフォーム協働事業体が運用する大阪大学に設置された研究用クラウド計算基盤です。
利用者は、Webポータル上で仮想マシン(VM)を作成し、AIモデルの実行、データ解析、シミュレーションなどの研究計算を行うことができます。

本ページでは、mdx II上にVMを用意し、Codex Agentを活用してAIモデルをWebデモとして実行するまでの流れを紹介します。
例として、OpenCLIPを用いた仏像画像識別デモを扱います。OpenCLIPは一例であり、AIモデルを入れ替えることで、
・医療画像解析、
・気候・環境データ解析、
・材料探索など、
さまざまなAI for Science用途に応用できます。

以下の図に、全体像を示します。

AIモデルを実行するためには、まず mdx II 上にVMを作成し、外部から接続できる状態にします。
基本的な手順は以下の通りです。

まず、mdx IIの利用申請ページにアクセスし、プロジェクトの利用申請を行います。
mdx IIでは、新規プロジェクト申請時にお試し利用資源を利用できます。

ノード種別 CPUコア数 メモリ ストレージ 利用期間
通常計算ノード群 16CPUパック 16 仮想コア 32 GB 1 TB 2 週間

※お試し利用はお一人様一回限りとなっております。

※お試し利用期間中に技術的な問題によって動作検証が完了しなかった場合、事前にご相談いただければ柔軟に対応いたします。

※資源の使用状況により、ご希望に添えない場合がございます。

※GPUノード群のお試し利用について
利用資源にも限りがあるため、GPUノードのお試し利用をご希望の場合は、 事前に「お問い合わせフォーム」よりご相談ください。

学認(学術認証フェデレーション) のアカウントをお持ちかどうかで、mdx II の申請手順が異なります。

学認アカウントをお持ちの場合

mdx IIを学認アカウントで利用できるよう設定します。

以下のポータルにアクセスし、プロジェクトを申請してください。

mdx II プロジェクト申請ポータル(学認向け)

学認アカウントのユーザ名とパスワードでログインし、必要な情報を入力してください。

学認アカウントをお持ちでない/使用しない場合

mdx IIのローカルアカウントを発行します。

以下のポータルにアクセスし、プロジェクトを申請してください。

mdx II プロジェクト申請ポータル(学認の無い方向け)

利用申請が承認されると、以下のようなアカウント発行通知メールが届きます。

アカウント発行後、ユーザーポータルにアクセスしてください。

以下のログイン画面でLocal Userを選択し、発行されたアカウント情報を入力してmdx IIシステムにログインしてください。

まず、ローカルPC上でSSH鍵ペアを生成します。

SSH鍵ペアは、後でmdx II上に作成したVMへ安全にSSHログインするために使用します。

WindowsとmacOSでは、基本的に同じ ssh-keygen コマンドを使用できます。WindowsではWindows Terminal、macOSではターミナルを開いて実行します。

以下では、macOS環境を例として手順を説明します。ターミナルを開き、次の2つのコマンドを順番に実行します。

ssh-keygen -t ed25519 -C "mdxII-openclip-demo"
cat ~/.ssh/id_ed25519.pub

コマンドの説明

  • ssh-keygen -t ed25519 -C "mdxII-openclip-demo"
    Ed25519形式のSSH鍵ペアを生成します。-C の後ろはコメントであり、この鍵の用途を識別するための名前です。ここでは、mdx II上のOpenCLIPデモ用VMに接続する鍵であることが分かるようにしています。
  • cat ~/.ssh/id_ed25519.pub
    生成された公開鍵の内容を表示します。表示された ssh-ed25519 で始まる文字列を、後の手順でmdx IIのWebポータルに登録します。

注意

  • id_ed25519.pub は公開鍵であり、mdx IIに登録して使用します。
  • id_ed25519 は秘密鍵です。秘密鍵の内容は表示・共有せず、ローカルPC上で安全に保管してください。
  • すでに ~/.ssh/id_ed25519 が存在する場合、上書き確認が表示されることがあります。その場合は、既存の鍵を誤って上書きしないように注意してください。

コマンドを実行すると、SSH鍵ペアが生成されます。

下図の例では、ssh-ed25519 で始まる公開鍵が表示されています。この公開鍵を、後の手順でmdx IIのWebポータルに登録します。

次に、生成した公開鍵をmdx IIのWebポータルにインポートします。

mdx IIのWebポータルにログインし、上部メニューから「プロジェクト」→「コンピュート」→「キーペア」を開きます。画面右側の「公開鍵のインポート」をクリックします。

「公開鍵のインポート」をクリックすると、下図のような入力画面が表示されます。

まず、任意のキーペア名を入力します。ここでは例として openclip-demo-key としています。鍵種別は「SSH 鍵」を選択します。

その後、先ほど cat ~/.ssh/id_ed25519.pub で表示した公開鍵を「公開鍵」の入力欄に貼り付けます。

入力内容を確認したら、「公開鍵のインポート」をクリックします。これで、後でVMを作成する際に、このSSH鍵をログイン用の鍵として選択できるようになります。

次に、VMへ接続するための通信ルールを設定します。

下の図に示す手順で、mdx II Webポータル上部の 「ネットワーク」 を選択し、続いて 「セキュリティーグループ」 タブを開きます。

一覧に表示されているセキュリティグループの右側にある 「ルールの管理」 をクリックし、VMに対して許可する通信ルールを追加します。

次に、下の図の画面右上の「+ルールの追加」をクリックします。

ここでは、VMへSSH接続するための22番ポートと、GradioのWebデモにアクセスするためのポートを必要に応じて追加します。本ページでは例として、Gradioでよく用いられる7860番ポートを使用します。なお、別のポートを使用する場合は、Gradioの起動設定、セキュリティグループ、ブラウザでアクセスするURLのポート番号を一致させる必要があります。

まず、メニューから「プロジェクト」→「コンピュート」→「インスタンス」を選択します。インスタンス一覧画面が表示されたら、右側の「インスタンスの起動」をクリックします。

ここでいうインスタンスとは、mdx II上で作成するVMのことです。このVM上にPython環境やAIモデルを導入し、Webデモを実行します。

インスタンスの起動画面では、AIモデルを実行するためのVMを設定します。

まず、インスタンス名を入力します。ここでは例として openclip-demo-vm としています。

次に「ソース」から、VMに使用するOSイメージを選択します。本デモでは、Python環境を構築しやすい Ubuntu Server を選択します。

続いて「フレーバー」を選択します。フレーバーは、VMに割り当てるCPU数やメモリ容量を表します。
OpenCLIP + Gradioの軽量なWebデモであれば、CPU VMでも実行可能です。ここでは例として vc8m16g を選択します。

最後に「インスタンスの起動」をクリックすると、VMが作成されます。

VMを作成した後、外部のローカルPCからVMへ接続するために Floating IP を割り当てます。
Floating IP は、VMに外部からアクセスするためのIPアドレスです。

まず、メニューから「プロジェクト」→「ネットワーク」→「Floating IP」を選択します。次に、「Floating IP の確保」をクリックすると、Floating IP の取得画面が表示されます。

プールには、外部接続用のネットワークを選択します。ここでは例として public-network を選択します。説明欄には、後から分かりやすい名前(例:openclip-demo-ip)を入力します。設定後、「IP の確保」をクリックすると、新しい Floating IP が作成されます。

Floating IP を確保すると、一覧画面に新しいIPアドレスが表示されます。ただし、この時点ではまだVMには接続されていません。

作成した Floating IP の右側にある「割り当て」をクリックし、割り当て先として先ほど作成したVMを選択します。

内容を確認して「割り当て」をクリックすると、Floating IP がVMに関連付けられます。

このIPアドレスは、後でローカルPCからVMへSSH接続するときに使用します。

VMに接続した後、ターミナル上でCodex CLIを利用できるようにします。
Codex CLIは、ターミナル上で利用できるコーディング支援エージェントであり、以下の作業を支援します。

  • Python仮想環境の作成
  • 必要ライブラリのインストール
  • Webデモ用コードの生成
  • エラー修正
  • テスト実行
  • Gradioアプリの起動
  • READMEや実行手順の整理

VMを作成してFloating IPを割り当てた後、ローカルPCからVMに接続し、VM上でCodex CLIを利用します。

まず、ローカルPCのターミナルから mdx II VM にSSH接続します。

ssh -i ~/.ssh/id_ed25519 mdxuser@<Floating-IP>

Codex CLIは npm を利用してインストールするため、VM上に Node.js と npm を準備します。

sudo apt update
sudo apt install -y nodejs npm

コマンドの説明

  • sudo apt update
    Ubuntuのパッケージ情報を最新の状態に更新します。新しいソフトウェアをインストールする前に実行します。
  • sudo apt install -y nodejs npm
    Node.js と npm をインストールします。Codex CLI は npm を利用してインストールするため、事前にこれらを導入しておきます。-y は、インストール時の確認に自動で同意するためのオプションです。

注意

  • この操作はVM内で実行します。ローカルPCではなく、SSHで接続した mdx II VM 上のターミナルで実行してください。
  • sudo を使用するため、環境によってはパスワード入力を求められる場合があります。
  • すでに Node.js や npm がインストールされている場合は、node -v と npm -v で確認できます。

すでにインストールされている場合は、以下のコマンドで確認できます。

node -v
npm -v

次に、VM上でCodex CLIをインストールします。

sudo npm install -g @openai/codex

これにより、VM内で codex コマンドを利用できるようになります。

インストール後、Codex CLIが正しく導入されたか確認します。バージョン番号が表示されれば、インストールは成功です。

codex --version

最後に、VM上でCodex CLIを起動します。

codex

起動後、Codex Agentに対して自然言語で作業内容を指示します。例えば、以下のような内容をプロンプトとして入力できます。

OpenCLIPを用いたGradio Webデモを作成してください。
必要なライブラリをインストールし、エラーがあれば修正し、
Webデモを起動できる状態にしてください。

Zero-shot方式とは、追加の学習データを用意せずに、事前学習済みモデルの知識を利用して分類を行う方法です。

本デモでは、OpenCLIPを用いて、入力画像がどの仏像カテゴリに近いかを推定します。対象とするカテゴリは、「如来」「菩薩」「明王」などです。
これらのカテゴリ名をテキストとしてOpenCLIPに入力し、画像とテキストの類似度を比較します。

OpenCLIPは、入力画像を画像特徴ベクトルに変換し、カテゴリ名をテキスト特徴ベクトルに変換します。
その後、画像特徴ベクトルと各カテゴリのテキスト特徴ベクトルを同じ特徴空間内で比較します。
最も類似度が高いカテゴリが、分類結果として出力されます。

例えば、入力画像が如来像である場合、OpenCLIPはその画像特徴と「如来」「菩薩」「明王」などのテキスト特徴を比較します。
そして、画像特徴に最も近いカテゴリ名を推定結果として出力します。

Zero-shot方式の利点は、カテゴリごとの参照画像を準備しなくても分類を試せる点です。
そのため、新しいカテゴリを追加する場合でも、基本的にはカテゴリ名や説明文を変更するだけで対応できます。

一方で、仏像の尊格分類のように、カテゴリ間の違いが細かい場合には、カテゴリ名だけでは十分に区別できないことがあります。
特に、「菩薩」と「観音菩薩」、「明王」と「不動明王」のように、上位カテゴリと下位カテゴリが近い関係にある場合、テキストだけによる分類は不安定になる可能性があります。

上の図では、入力画像が如来像である場合を例にしています。

Zero-shotでは入力画像とカテゴリ名の近さを比較し、Few-shotでは入力画像と各カテゴリの参照画像から作成した代表ベクトルの近さを比較します。

どちらの場合も、OpenCLIP自体は再学習しません。

Zero-shot方式の課題を補うために、本デモではFew-shot方式への拡張も行います。
Few-shot方式では、カテゴリ名だけでなく、各カテゴリに少数の参照画像を用意します。

本デモでは、8つのカテゴリそれぞれに5枚ずつ参照画像を用意します。
ただし、これらの参照画像はOpenCLIPを再学習するためのデータではありません。
参照画像は、入力画像と比較するための「見本画像」として使用します。

具体的には、OpenCLIPを用いて、各カテゴリの参照画像を画像特徴ベクトルに変換します。
その後、カテゴリごとに複数の参照画像の特徴をまとめ、代表ベクトルを作成します。

入力画像が与えられると、その画像も同じように画像特徴ベクトルへ変換されます。
そして、入力画像の特徴ベクトルと、各カテゴリの代表ベクトルを比較します。
最も近い代表ベクトルを持つカテゴリが、分類結果として出力されます。

つまり、Zero-shot方式では「入力画像とカテゴリ名」を比較するのに対し、Few-shot方式では「入力画像と各カテゴリの参照画像群」を比較します。

方法何と比べるか使う情報
Zero-shot入力画像とカテゴリ名「如来」「菩薩」「明王」などのテキスト
Few-shot入力画像と参照画像群各カテゴリに用意した少数の参照画像

Zero-shot方式は、カテゴリ名や説明文との近さに基づいて分類を行います。
一方、Few-shot方式は、実際の参照画像との近さに基づいて分類を行います。

どちらの方式でも、OpenCLIP自体の重みは更新しません。
そのため、本デモは訓練済みモデルを再学習するシステムではなく、OpenCLIPの特徴抽出能力を利用した画像分類デモとして位置づけられます。

Codex CLIをVM上で起動した後、Python環境の作成、必要ライブラリのインストール、OpenCLIP + Gradio Webデモの作成、テスト、起動までをまとめてCodex Agentに依頼します。
ユーザーは個別にPython仮想環境や依存ライブラリを手作業で設定する必要がなく、自然言語の指示によってAI Webデモの構築を進めることができます。

本デモでは、OpenCLIPを例として、仏像尊格カテゴリ分類に特化したZero-shot画像分類Webデモを作成します。

OpenCLIPは画像特徴とテキスト特徴を比較するモデルであり、ここでは8種類の仏像尊格カテゴリとの類似度を計算します。

You are working inside an mdx II VM.

Goal:
Create an OpenCLIP + Gradio Web demo for Buddhist iconographic category classification.

Important:
This is a zero-shot OpenCLIP image-text similarity demo.
It is not a trained Buddhist statue classifier.
It is not an expert authentication system.
The output scores should be treated as relative confidence values among the selected candidate categories.

Tasks:

1. Check the environment
- Check python3 version.
- Check pip3 version.
- Check whether python3-venv is available.
- If needed, install python3-venv.
- Do not change cloud resources.

2. Create the project directory
Create and work inside:

~/projects/buddhist-iconography-openclip-demo

3. Create a Python virtual environment
Create:

.venv

Activate it and upgrade pip.

4. Install required libraries
Install the following packages:

torch
torchvision
open-clip-torch
gradio
pillow
pandas

Use CPU-compatible installation unless CUDA is already available.

5. Create project files
Create the following structure:

app.py
requirements.txt
README.md
src/__init__.py
src/prompts.py
src/model.py
src/inference.py
scripts/check_env.py
scripts/smoke_test.py
scripts/run_app.sh

6. Categories
Modify src/prompts.py so that the demo uses exactly these 8 categories:

如来 / Nyorai Buddha
菩薩 / Bodhisattva
観音菩薩 / Kannon Bodhisattva
如意輪観音 / Nyoirin Kannon
地蔵菩薩 / Jizo Bodhisattva
明王 / Myoo Wisdom King
不動明王 / Fudo Myoo
天部・守護神 / Deva or guardian deity

Do not use general cultural-property labels such as:
Buddha head
statue head
seated statue
standing statue
bronze statue
wooden statue
temple architecture
pagoda
torii gate
Buddhist painting
Japanese cultural property

7. Prompt ensemble
Support multiple prompts per category.

The processing should be:
- Flatten all prompts across all categories.
- Encode all prompts using the OpenCLIP text encoder.
- Normalize each prompt embedding.
- Average prompt embeddings within each category.
- Normalize the averaged category embedding again.
- Encode and normalize the image embedding.
- Compare the normalized image embedding with the normalized category embeddings.
- Apply softmax only over the final 8 category scores.
- Do not apply softmax over individual prompts.

8. Model
Use OpenCLIP ViT-B-32.
Use pretrained weights if available, preferably laion2b_s34b_b79k.
Use CUDA if available; otherwise use CPU.
Display the device in the Gradio UI.

9. Gradio UI
Create a Gradio web app with:
- image upload
- top-k setting
- result table

The result table should include:
- rank
- Japanese label
- English label
- relative confidence
- representative prompt

Title:
OpenCLIPによる仏像尊格カテゴリ分類デモ

Subtitle:
OpenCLIP-based Buddhist Iconographic Category Classification Demo

Add the following note in the UI:
English:
The scores are relative probabilities over the selected Buddhist iconographic categories, not calibrated expert probabilities.

Japanese:
スコアは選択された仏像尊格カテゴリ内での相対確率であり、専門家による鑑定確率ではありません。

10. Launch settings
Use:
server_name="0.0.0.0"
server_port=7860

11. Tests
After creating the files:
- Run syntax checks.
- Run scripts/check_env.py.
- Run scripts/smoke_test.py.
- If errors occur, fix them.

12. Final output
Report:
- project directory
- Python environment path
- installed packages
- device used
- how to run the app
- SSH tunnel command
- browser URL

Important:
Do not create, modify, or delete mdx II cloud resources.
Do not expose secrets.
Do not print private keys.

Security Groupで7860番ポートを許可しているので、http://<Floating-IP>:7860からアクセスできます。

以下では、OpenCLIP を用いた仏像尊格カテゴリ分類デモの実行例を示しています。各結果は、入力画像と8つの候補カテゴリとの類似度を比較し、相対的な信頼度として表示したものでです。

したがって、表示されるスコアは専門家による鑑定確率ではなく、候補カテゴリ内での相対評価です。

例1:如来像の推論例

入力画像は、螺髪と穏やかな表情をもつ仏頭です。デモでは 如来 / Nyorai Buddha が第1位となり、相対信頼度は 85.28% でした。菩薩や地蔵菩薩も下位候補として表示されたが、最も高い類似度は如来に与えられました。

結果の例:

  • 1位:如来 / Nyorai Buddha(85.28%)

例2:菩薩像の推論例

入力画像は、宝冠を備えた菩薩像の頭部です。デモでは 観音菩薩 / Kannon Bodhisattva が第1位となり、相対信頼度は 42.54% でした。続いて 如意輪観音 / Nyoirin Kannon、菩薩 / Bodhisattva が高く表示されており、菩薩系カテゴリの中で推論されていることが分かます。

結果の例

  • 1位:観音菩薩 / Kannon Bodhisattva(42.54%)
  • 2位:如意輪観音 / Nyoirin Kannon(39.90%)

例3:如意輪観音像の推論例

入力画像は、片手を頬に添えた特徴的な姿勢をもつ像です。デモでは 如意輪観音 / Nyoirin Kannon が第1位となり、相対信頼度は 46.76% でした。次点として 観音菩薩 / Kannon Bodhisattva が表示されており、観音系カテゴリの中で妥当な推論結果が得られています。

結果の例

  • 1位:如意輪観音 / Nyoirin Kannon(46.76%)
  • 2位:観音菩薩 / Kannon Bodhisattva(42.41%)

例4:明王像の推論例

入力画像は、厳しい表情をもつ忿怒形の像です。デモでは 明王 / Myoo Wisdom King が第1位となり、相対信頼度は 46.11% でした。また、不動明王 / Fudo Myoo も高い候補として表示されており、明王系のカテゴリに近い特徴を捉えていることがわかります。

結果の例

  • 1位:明王 / Myoo Wisdom King(46.11%)
  • 2位:不動明王 / Fudo Myoo(44.52%)

Few-shot版では、Codex Agentに以下の作業を依頼します。

参照画像フォルダを確認します。
OpenCLIPで各参照画像の特徴量を抽出します。
カテゴリごとの代表特徴を作成します。
入力画像とカテゴリ代表特徴を比較するFew-shot分類機能を追加します。
Gradio上でFew-shot結果を表示できるようにします。

例1:如来像の推論例

Few-shot版では、カテゴリごとに参照画像を用意します。
ここでは例として、如来 / Nyorai Buddha カテゴリに5枚の参照画像を登録しています。

入力画像に対して 如来 / Nyorai Buddha が第1位として表示されています。
相対信頼度は 89.09% であり、参照画像を用いたFew-shot方式でも、如来カテゴリに近い画像として分類されています。

例2:菩薩像の推論例

ここでは例として、菩薩 / Bodhisattva カテゴリに5枚の参照画像を登録しています。

入力画像に対して 菩薩 / Bodhisattva が第1位として表示されています。
相対信頼度は 98.24% であり、参照画像を用いたFew-shot方式でも、菩薩カテゴリに近い画像として分類されています。

例3:如意輪観音像の推論例

ここでは例として、如意輪観音/ Nyoirin Kannon カテゴリに5枚の参照画像を登録しています。

入力画像に対して 如意輪観音/ Nyoirin Kannon が第1位として表示されています。
相対信頼度は 98.95% であり、参照画像を用いたFew-shot方式でも、如意輪観音カテゴリに近い画像として分類されています。

例4:明王像の推論例

ここでは例として、明王 / Myoo Wisdom King カテゴリに5枚の参照画像を登録しています。

入力画像に対して 明王 / Myoo Wisdom King が第1位として表示されています。
相対信頼度は 99.91% であり、参照画像を用いたFew-shot方式でも、明王カテゴリに近い画像として分類されています。

mdx II 上で VM を作成し、Codex Agent を活用して AI for Science 向け Web デモを構築する流れを紹介しました。

OpenCLIP を例として、Zero-shot 分類から Few-shot 分類への拡張までを確認しました。Codex Agent を利用することで、Python 環境構築、ライブラリ導入、コード生成、エラー修正、テスト、起動までの作業を効率化できます。

OpenCLIP は一例であり、同じ構築手順は他の画像解析、医療画像解析、分子生成、バイオインフォマティクス、研究支援 AI などにも応用できます。

mdx II と Codex Agent を組み合わせることで、AI for Science の実験環境をより簡単に構築し、研究や教育に活用できます。

トップへ戻る