2025年度の研究はこちら
4/7†
近接画像においてLoRAを用いた画像生成が評点別に行えるようになった。
ただし256pxで出力している関係上、どうしても粗くなってしまうため256より大きいpxで出力することにする。
そうすることで画像の粗さが解消されるのでは。
4/8†
背景・近景・近接の各画像を生成できるようになったので、実在画像と生成画像の比を変えてヒートマップ生成に変化が現れるかを見ていく。
学習枚数と条件の組み合わせは以下の通り。
| 実在画像 | 402枚 | ー | |
| パターン | 生成枚数 | 実在画像と生成画像の学習比 | 備考 |
| 01 | 172枚 | 7:3 | |
| 02 | 402枚 | 1:1 | うち172枚はパターン01と同じ画像を使用 |
| 実在画像 | 140枚 | ー | |
| パターン | 生成枚数 | 実在画像と生成画像の学習比 | 備考 |
| 11 | 60枚 | 7:3 | |
| 12 | 140枚 | 1:1 | うち60枚はパターン11と同じ画像を使用 |
| 実在画像 | 234枚(5段階評点合計) | ー | |
| パターン | 生成枚数 | 実在画像と生成画像の学習比 | 備考 |
| ① | 101枚(5段階評点合計) | 7:3 | 512pxで生成 ⇒ 256pxに圧縮 |
| ② | 234枚(5段階評点合計) | 1:1 | 512pxで生成 ⇒ 256pxに圧縮 |
| ③ | 101枚(5段階評点合計) | 7:3 | 1024pxで生成 ⇒ 256pxに圧縮 |
| ④ | 234枚(5段階評点合計) | 1:1 | 1024pxで生成 ⇒ 256pxに圧縮 |
近接画像は256pxで画像を生成すると画素が粗くなってしまうため、錆が持っている情報を256pxでも分かるように大きめに出力して圧縮することにした。
- 試す組み合わせ
| パターン(背景_近景_近接) | 実在画像と生成画像の学習比 | 近接画像出力px |
| 01_11_① | 7:3 | 512px |
| 01_11_③ | 7:3 | 1024px |
| 02_12_② | 1:1 | 512px |
| 02_12_④ | 1:1 | 1024px |
4/9†
- LoRA生成待ち 20時間弱で65枚程度生成されたことを考えると週明けには近接画像の出力が終わるか
- 来週中に背景と近景(要改修)画像の生成まで進められれば
4/16†
- 近接画像の画像生成が完了した これから背景画像と近景画像の生成を行っていく
- 背景画像は問題なく生成できると思うが、近景画像は鋼材部分を上手く生成することが難しそう 具体的には主桁と横桁が混ざり合って格子状の鋼材になる, 撮影アングルを調整できない など
- ⇒ 画像生成では生成して欲しい内容や物体をスクリプト上に単語で書く必要があるため、そこでどんな単語を書くか発想力が求められる
4/17†
- 近接画像の生成が一段落済んだのでデスクトップを変えた Pythonを実行するために環境を構築しているところだが、時間がかかりそう 月曜には終わるか
4/20†
- デスクトップを変えてスクリプトの大半は実行できるようにした 画像生成を行うためにLoRAを学習する必要があるのだが、以前のデスクトップでは問題なく学習できていた設定で再度行ったところ、容量が足りずエラー落ちしてしまった。
- 学習スペックを落としたら無事回ったが、どうやら学習を行うにはVRAMの容量を求められるらしい。
- 画像生成に関して 生成時間が今までの25分の1に短縮された 画像の種類・大きさによって生成時間に変化はなさそう 有り難い
4/22†


- 近接画像
- 近接画像を256pxで生成(左から順に評点1, 評点2 ... の順に並んでいる)

- 512pxで生成した後に256pxに圧縮(左から順に評点1, 評点2 ... の順に並んでいる)

- 1024pxで生成した後に256pxに圧縮(左から順に評点1, 評点2 ... の順に並んでいる)

4/24†
- 1パターンでの学習を始めた 1日で1種類の学習が完了するため、全部まとめるのには1周間程度かかる予定 GW明けには終わらせたいところ
- 現行のスクリプトに簡易的なベイズ推定を入れてみた 実行は来週以降
4/27†
- 3枚の撮影画像に対してヒートマップを描くという段階にはたどり着いたものの、1枚あたり7時間程度かかることがわかった
- とりあえず生成してみて精度を確認する そこからどうするか考えることにする
4/30†
- ヒートマップの生成時にGPUを使えるように設定した ただし最速で生成しようとすると強制終了されることが分かったので、処理速度はほどほどに設定する必要がある これにより従来生成にb 7時間/枚 かかっていたのが 20分/枚 と大幅に性能が向上した。
- また ヒートマップの生成に近似ベイズ(MC Dropout)を導入し、ヒートマップをパッチ単位で信頼度を出せるようにした。信頼の程度と色の関係を下に貼り付けておく
| 色 | 数値 | 意味 |
| 🔵 青 | 低 | 不確実性低(=信頼度高) |
| 🟢 緑 | 中 | そこそこ |
| 🔴 赤 | 高 | 不確実性高(=信頼度低) |
01_11_①†
01_11_③†
02_12_②†
02_12_④†
5/20†
ヒートマップ評価における改良を行った。
DenseNet121・InceptionResNetV2・Xception のアンサンブルで橋梁領域を抽出し、
錆評価には評点1〜5の順序性を考慮した学習 Ordinal Regression を導入した。
またMC Dropout による不確実性推定も導入した。
推論時には劣化ヒートマップepistemic uncertaintyとaleatoric uncertaintyを生成。
さらにGaussian Weighting によりパッチ境界ノイズを低減し、滑らかなヒートマップ生成を実現した。
現在は橋梁領域抽出・錆劣化推定・不確実性可視化までの処理を実装している。
ヒートマップの結果は手動の場合と自動の場合の両方を明日以降に載せる。
5/21†
- ヒートマップ評価方法の変更と指標の追加 近景画像(現地撮影)を追加して再度学習

- bridge_mask … 白領域が鋼材部分(評価するところ)

- heatmap_overlay … ヒートマップで評価を行った画像

- uncertainty_map … ヒートマップの精度にどれくらい自信を持っているか

| 色 | 意味 |
| 🔵 青 | かなり自信あり |
| 🟢 緑 | 普通 |
| 🟡 黄 | 少し怪しい |
| 🔴 赤 | かなり迷っている |
- epistemic_map…モデル側の“不確実性” = AIがまだ学習できていない領域 学習データ追加で改善可能

| 色 | 意味 |
| 🔵 青 | 学習済み・自信あり |
| 🟢 緑 | 普通 |
| 🟡 黄 | やや未知 |
| 🔴 赤 | AI未学習・未知パターン |
- aleatoric_map…画像自体の曖昧さ = 人間でも判定が難しい領域

| 色 | 意味 |
| 🔵 青 | 判定しやすい |
| 🟢 緑 | 普通 |
| 🟡 黄 | やや曖昧 |
| 🔴 赤 | 非常に曖昧 |
5/22†
- 新たな評価方法でヒートマップをはじめとするさまざまなものを描いてみた



- ヒートマップ精度にどれほど自信があるかを表した画像

- モデル側の“不確実性” (まだ学習できていない領域)





- ヒートマップ精度にどれほど自信があるかを表した画像

- モデル側の“不確実性” (まだ学習できていない領域)


5/26†
- 台形変換で鋼材領域を抽出してみた 抽出した鋼材領域はスクリプトで設定したピクセル数によって見た目に変化が出てしまっている。今後は台形変換アプローチについて検討していく。
- 左から順に元画像・鋼材領域抽出&台形変換画像・マスク画像

- 左から順にヒートマップ画像・ヒートマップにおける精度の自信・まだ学習できていない領域

6/12†
ヒートマップ視認性向上のため一緒に等高線図が出力されるようにスクリプトを変更した
6/15†
ヒートマップでの評価については,現在8 cm四方の近接画像を256 pixelに統一して学習している。
一方で実橋梁画像は撮影距離や画角が一定ではないため,同じ256 pixelでも実際に写っている範囲が異なる可能性がある。
そのため今後は8 cm,16 cm,32 cmなど複数のスケールで学習データを作成し,撮影距離の違いに対して頑健なモデルにできないか台形変換と同時に検討する。
また,不確実性マップについても期待したほど有効に機能していない印象を受けた。
現在はモデル間分散とMC Dropoutの分散を利用しているが,技術者目線では「この領域の評点がどれくらいぶれるか」が知りたいので,予測評点の標準偏差をそのまま可視化した方が分かりやすいかもしれない。
6/18†
- 評価方法の修正 以下3通りでヒートマップ評価できるようにした
- 1, 自動抽出
- 2, 鋼材領域の4隅を指定 ⇒ 台形変換
- 3, 鋼材領域を指定(頂点の数は無制限 ← NEW)⇒ 台形変換
※2は上下フランジが切れずにうつっている場合, 3は上下フランジのどちらかまたはその両方が切れてしまっている場合に使用
- ヒートマップの保管的な役割として等高線図(2D, 3Dの実装)
6/22†
- ヒートマップ評価で色が識別しにくい, 例え色合いが多少異なっていれば評点はどのくらい変化するのかというリクエストに応じて,等高線で評価を可視化できるようにした.ちな生成時間は1つの検証画像に対して3分弱

- 上記の図だと線が多すぎてどの領域がこの評点なのかが分かりにくかったため,3D等高線図で表現してみた.ただし固定視点のためクリック等で様々な方向から見ることはできない

- 3D静止画が意外と見づらかったので,自由に等高線図3Dを見れるよう html に落とし込んでみた.(試作段階)ちな生成時間は1つの検証画像に対して5分弱
heatmap_3d_interactive.html
各種画像の追加・前処理と再学習方法†
project_root/
├── dataset/
│ ├── bg/
│ │ └── raw/ ← 背景画像
│ ├── bridge/
│ │ └── raw/ ← 橋画像(セグメンテーション用)
│ └── rust/
│ └── raw/ ← 錆画像(回帰用)
│
├── masks/ ← bridge用マスク
├── models/ ← CNNモデルが保存
├── results/ ← 結果が出力
- ① 背景画像を追加して学習する手順
- 1. 画像配置: "dataset/bg/raw/"に画像を入れる
- 2. 学習実行:train_all4.pyを実行し、メニューから "4) Train BackGround" を選択すれば学習が始まる
- ② 近景画像からマスク画像を作成して学習
- 1. 画像配置 "dataset/bridge/raw/"に画像を入れる
- 2. マスク作成:手動or自動を選択可能だが、現状はデータ数が少ないため手動を選択する
- 3. 学習実行:train_all4.pyを実行し、メニューから "2) Train Bridge (Ensemble UNet)" を選択すれば学習が始まる
- ③ 近接画像を追加して学習する手順
- 1. 画像配置: "dataset/rust/raw/"に画像を入れる
- 2. 学習実行:train_all4.pyを実行し、メニューから "3) Train Rust" を選択すれば学習が始まる