diff --git a/CLAUDE.md b/CLAUDE.md index 96348a0..6e3cd7f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -5,7 +5,7 @@ ## 開発進捗 -最新: 立ち上げ完了(フェーズ 1〜6).次は PLAN_02 の Step 1(基盤: 設定スキーマ・合成データ・manifest・患者単位分割) +最新: 臨床データ 1085 枚を Newton へ転送完了.次は PLAN_02 の Step 1(基盤: 設定スキーマ・合成データ・manifest・患者単位分割) ※ 本欄は**最新ステップ 1 行のみ上書き更新**.詳細な進捗履歴(動機・設計判断・失敗パターン)は [docs/PROGRESS.md](docs/PROGRESS.md) に追記する.運用ルールは `.claude/rules/progress-log.md` を参照(該当ファイル編集時に自動ロードされる). ## 必須ルール(コード実装時) @@ -97,4 +97,4 @@ ### 06_TEST(テスト) - +- データセット構成調査: docs/06_TEST/TEST_01_データセット構成調査.md diff --git "a/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" "b/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" index 83560b8..e1142dc 100644 --- "a/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" +++ "b/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" @@ -51,13 +51,92 @@ 原本は研究室 PC に置き,**研究室 LAN 内で Newton へ一度だけコピーする**.手元 PC を経由させない. -1. 研究室 PC で作業する(**`hostname` で研究室 PC であることを確認してから実行する**) -2. 研究室 PC から Newton へコピーする(例: `scp -r <データ> Newton:~/data/TIASJudgeModel/`) -3. コピー後に件数を突き合わせる(両側でファイル数を数える) +### 原本の置き場所 (Source Location) + +```text +C:\Users\Papin\clinical-data\TIASJudgeModel\ +``` + +ラベルごとの 9 フォルダに PNG が直置きされている(内訳は [TEST_01 データセット構成調査](../06_TEST/TEST_01_データセット構成調査.md)). + +> ⚠ **研究室 PC では「ドキュメント」フォルダが OneDrive(`OneDrive - 千葉大学`)にリダイレクトされている**.臨床データをドキュメント・デスクトップ配下に置くとクラウドへ同期されるため置かない.上記のプロファイル直下の独自フォルダは同期対象外である. + +### フォルダ名の対応 (Folder Mapping) + +日本語フォルダ名をそのまま転送すると Windows(CP932)と Linux(UTF-8)の文字コード差で名前が壊れるため,**ASCII のスラッグ名に対応付けて**コピーする. + +| 研究室 PC のフォルダ | サーバ上のディレクトリ | +| --- | --- | +| `淡紅(正常)` | `images/light_red_normal` | +| `暗赤紅_あり` | `images/dark_red_strong` | +| `暗赤紅_ややあり` | `images/dark_red_mild` | +| `紫_あり` | `images/purple_strong` | +| `紫_ややあり` | `images/purple_mild` | +| `紅_あり` | `images/red_strong` | +| `紅_ややあり` | `images/red_mild` | +| `淡白_あり` | `images/pale_strong` | +| `淡白_ややあり` | `images/pale_mild` | + +### 研究室 PC から Newton への鍵設定 (Key Setup) + +研究室 PC から Newton へ非対話で転送するため,**研究室 PC 専用の鍵**を作って Newton に登録する(2026-09-27 に実施済み). + +- 研究室 PC の鍵: `C:\Users\Papin\.ssh\id_ed25519_newton`(パスフレーズなし.コメントは `papin-DESKTOP-1QLOO91-to-Newton-TIASJudgeModel`) +- Newton 側: 上記の公開鍵を `~/.ssh/authorized_keys` に追記済み +- 初回接続時は Newton のホスト鍵を受け入れる必要がある(`-o StrictHostKeyChecking=accept-new`) + +※ Windows の OpenSSH サーバーは **SSH エージェント転送に対応していない**ため,手元の鍵を研究室 PC 経由で使い回すことはできない(専用鍵が必要になる理由). + +### 手順 (Procedure) + +1. 研究室 PC で作業する(**`hostname` で研究室 PC であることを確かめてから実行する**) +2. PowerShell で以下を実行する(対応表どおりに 9 フォルダを転送する) + + ```powershell + $key = "$env:USERPROFILE\.ssh\id_ed25519_newton" + $root = "C:\Users\Papin\clinical-data\TIASJudgeModel" + $rhost = "hasegawa@192.168.23.14" + $map = [ordered]@{ + "淡紅(正常)" = "light_red_normal" + "暗赤紅_あり" = "dark_red_strong" + "暗赤紅_ややあり" = "dark_red_mild" + "紫_あり" = "purple_strong" + "紫_ややあり" = "purple_mild" + "紅_あり" = "red_strong" + "紅_ややあり" = "red_mild" + "淡白_あり" = "pale_strong" + "淡白_ややあり" = "pale_mild" + } + foreach ($k in $map.Keys) { + $slug = $map[$k] + ssh -i $key $rhost "mkdir -p ~/data/TIASJudgeModel/images/$slug" + $files = @(Get-ChildItem -LiteralPath (Join-Path $root $k) -File -Filter *.png) + for ($i = 0; $i -lt $files.Count; $i += 100) { + $chunk = $files[$i..([Math]::Min($i+99, $files.Count-1))] | ForEach-Object { $_.FullName } + scp -i $key -q @chunk ($rhost + ":~/data/TIASJudgeModel/images/" + $slug + "/") + } + } + ``` + + ※ `scp "...\*.png"` のようにワイルドカードを渡す方式は使わない(PowerShell はネイティブコマンドの引数を展開しないため).ファイル一覧を列挙して 100 件ずつ渡す(コマンドライン長の上限を避けるため). + +3. コピー後に件数を突き合わせる + + ```powershell + (Get-ChildItem -LiteralPath $src -Recurse -File).Count # 研究室 PC 側(1085 の見込み) + ssh hasegawa@192.168.23.14 "find ~/data/TIASJudgeModel/images -type f | wc -l" + ``` + 4. 原本は研究室 PC に残す(Newton 側は作業用コピー) +### 実施記録 (Completion Record) + +2026-09-27 に上記手順で転送完了.Newton 側 `~/data/TIASJudgeModel/images/` に **9 ディレクトリ・1085 ファイル(443 MB)**.研究室 PC 側の件数と完全一致し,非 PNG は 0 件.ディレクトリ権限は `drwx------`.転送は研究室 PC → Newton の直送であり,手元 PC は制御コマンドのみを送っている(画像は手元を通っていない). + 以降は再転送しない.データセットの内容確認(枚数・クラス分布・破損チェック)はサーバ上のコマンドで行い,**集計結果のみ**を手元で見る. +※ 研究室 PC から Newton への鍵が未登録の場合はパスワードを求められる. + ## 学外アクセス用の踏み台 (Off-campus Access) 研究室 PC を ProxyJump の踏み台にする設定は SmTIAS-LightSim で構築済みのため,本プロジェクトでの追加作業は不要(未設定の場合は同プロジェクトの `docs/02_ENV/ENV_02_環境構築手順.md`「学外から接続する(研究室 PC 経由)」に従う). diff --git "a/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" index ac37eb8..461c9e5 100644 --- "a/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" +++ "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" @@ -11,7 +11,7 @@ | 3 | データセット集計(実データの素性把握) | **臨床データのコピー完了**・倫理確認 | | 4 | 学習パイプライン最小版(ConvNeXt-Tiny を 1 本通す) | Step 2・3 | | 5 | 評価・レポート生成(指標・混同行列・`runs/` 出力) | Step 4 | -| 6 | ベースライン比較(TIASjudge のルールベース) | Step 5 | +| 6 | ベースライン比較(TIASjudge のルールベース)※ 後回し | Step 5 | | 7 | 実験反復(不均衡対策・モデル比較・解像度検討) | Step 6 | | 8 | 結論(5-fold 交差検証・評価レポート・配布形式の判断) | Step 7 | @@ -48,6 +48,8 @@ ## Step 6: ベースライン比較 (Baseline) +> ⚠ **一旦後回しとする**(2026-09-27 のユーザー判断).入力条件の違い(TIASjudge は撮影画像から ROI を取るが,本データセットは舌領域を黒背景で切り出した画像)を揃える設計判断が必要なため,機械学習側のパイプラインを先に通す.Step 5 の後に Step 7 へ進み,本ステップは条件が整った時点で実施する. + - **成果物**: `baseline/`(TIASjudge のルールベース診断),比較レポート - **完了条件**: 同一テストセットでルールベースと機械学習モデルの指標が並べて出る - **ここで決める**: ルールベースを移植するか別リポジトリを参照するか(SPEC_02 の未確定事項) diff --git "a/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" "b/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" index 5d8a4b1..254ef24 100644 --- "a/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" +++ "b/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" @@ -31,25 +31,38 @@ ## データ契約 (Data Contract) -サーバ上のデータ配置(`~/data/TIASJudgeModel/`): +元データは研究室 PC の `C:\Users\Papin\clinical-data\TIASJudgeModel\` にラベルごとの 9 フォルダとして置かれている([ENV_03](../02_ENV/ENV_03_管理者用環境構築手順.md)).サーバへコピーした後の配置(`~/data/TIASJudgeModel/`): ```text ~/data/TIASJudgeModel/ -├── images/ # 舌領域セグメンテーション済み画像 -└── manifest.csv # 学習が読む唯一の入口 +├── images/ +│ ├── light_red_normal/ # ラベル_程度のスラッグごとのディレクトリ +│ ├── dark_red_strong/ +│ ├── dark_red_mild/ +│ ├── purple_strong/ +│ ├── purple_mild/ +│ ├── red_strong/ +│ ├── red_mild/ +│ ├── pale_strong/ +│ └── pale_mild/ +└── manifest.csv # 学習が読む唯一の入口 ``` +ディレクトリ名は `