#author("2026-08-07T17:28:51+09:00","default:kouzouken","kouzouken") #author("2026-08-15T15:23:51+09:00","default:kouzouken","kouzouken") &aname(Top); #contents 2025年度の研究は[[こちら:https://www.str.ce.akita-u.ac.jp/cgi-bin/pukiwiki/?%E6%A3%AE%E4%BA%95%E3%81%AE%E5%8D%92%E8%AB%96%E6%97%A5%E8%AA%8C2]] //*DO [#j418c000] //-① 不確実性を取得できているか? 実装修正(Dropout / 分散取得) //-② 不確実性は意味のある値か? 誤差との関係を見て相関が弱い場合、Dropout回数を増やす(T=30など), モデル改善(データ増強 / ソフトラベル)を行う //-③ 不確実性を使うと性能は改善するか? 不確実性の定義見直し(分散→エントロピー)と空間補正を導入(平滑化) //-④ 出力の滑らかさ(ヒートマップの自然さ)は十分か? 期待値スコアに変更, 空間的補正(Gaussian / CRF) //-⑤ 確率は信頼できるか?Temperature Scaling //-⑥ 実運用を想定した出力になっているか? *4月 [#j418c400] **4/7 [#j417c407] 近接画像においてLoRAを用いた画像生成が評点別に行えるようになった。 ただし256pxで出力している関係上、どうしても粗くなってしまうため256より大きいpxで出力することにする。 そうすることで画像の粗さが解消されるのでは。 **4/8 [#j417c408] 背景・近景・近接の各画像を生成できるようになったので、実在画像と生成画像の比を変えてヒートマップ生成に変化が現れるかを見ていく。 学習枚数と条件の組み合わせは以下の通り。 -背景画像 , 実在画像 , 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 [#j417c409] -LoRA生成待ち 20時間弱で65枚程度生成されたことを考えると週明けには近接画像の出力が終わるか -来週中に背景と近景(要改修)画像の生成まで進められれば **4/16 [#j417c4161] -近接画像の画像生成が完了した これから背景画像と近景画像の生成を行っていく -背景画像は問題なく生成できると思うが、近景画像は鋼材部分を上手く生成することが難しそう 具体的には主桁と横桁が混ざり合って格子状の鋼材になる, 撮影アングルを調整できない など - ⇒ 画像生成では生成して欲しい内容や物体をスクリプト上に単語で書く必要があるため、そこでどんな単語を書くか発想力が求められる **4/17 [#j417c417] -近接画像の生成が一段落済んだのでデスクトップを変えた Pythonを実行するために環境を構築しているところだが、時間がかかりそう 月曜には終わるか **4/20 [#j417c420] -デスクトップを変えてスクリプトの大半は実行できるようにした 画像生成を行うためにLoRAを学習する必要があるのだが、以前のデスクトップでは問題なく学習できていた設定で再度行ったところ、容量が足りずエラー落ちしてしまった。 -学習スペックを落としたら無事回ったが、どうやら学習を行うにはVRAMの容量を求められるらしい。 -画像生成に関して 生成時間が今までの25分の1に短縮された 画像の種類・大きさによって生成時間に変化はなさそう 有り難い **4/22 [#j417c422] -LoRAで生成できたもの --背景画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/bg1.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/bg2.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/bg3.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/bg4.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/bg5.png,360x); --近景画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/kinkei1.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/kinkei2.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/kinkei3.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/kinkei4.png,360x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/kinkei5.png,360x); --近接画像 ---近接画像を256pxで生成(左から順に評点1, 評点2 ... の順に並んでいる) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/256_1.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/256_2.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/256_3.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/256_4.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/256_5.png,256x); ---512pxで生成した後に256pxに圧縮(左から順に評点1, 評点2 ... の順に並んでいる) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/512_1.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/512_2.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/512_3.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/512_4.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/512_5.png,256x); ---1024pxで生成した後に256pxに圧縮(左から順に評点1, 評点2 ... の順に並んでいる) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/1024_1.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/1024_2.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/1024_3.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/1024_4.png,256x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260422/1024_5.png,256x); **4/24 [#j417c424] -1パターンでの学習を始めた 1日で1種類の学習が完了するため、全部まとめるのには1周間程度かかる予定 GW明けには終わらせたいところ -現行のスクリプトに簡易的なベイズ推定を入れてみた 実行は来週以降 **4/27 [#j417c427] -3枚の撮影画像に対してヒートマップを描くという段階にはたどり着いたものの、1枚あたり7時間程度かかることがわかった -とりあえず生成してみて精度を確認する そこからどうするか考えることにする **4/30 [#j418c430] -ヒートマップの生成時にGPUを使えるように設定した ただし最速で生成しようとすると強制終了されることが分かったので、処理速度はほどほどに設定する必要がある これにより従来生成にb 7時間/枚 かかっていたのが 20分/枚 と大幅に性能が向上した。 -また ヒートマップの生成に近似ベイズ(MC Dropout)を導入し、ヒートマップをパッチ単位で信頼度を出せるようにした。信頼の程度と色の関係を下に貼り付けておく &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/Bayes_sub.png,800x); , 色 , 数値 , 意味 , 🔵 青 , 低 , 不確実性低(=信頼度高) , 🟢 緑 , 中 , そこそこ , 🔴 赤 , 高 , 不確実性高(=信頼度低) *5月 [#j418c00] ***01_11_① [#j418c01111] -マスク画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/mask_4_62.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/mask_0013.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/mask_0016.png,500x); -ヒートマップ画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/heatmap_4_62.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/heatmap_0013.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/heatmap_0016.png,500x); -信頼度 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/bayes_4_62.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/bayes_0013.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260430/bayes_0016.png,500x); ***01_11_③ [#j418c01113] -マスク画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/mask_4_62.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/mask_0013.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/mask_0016.png,500x); -ヒートマップ画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/heatmap_4_62.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/heatmap_0013.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/heatmap_0016.png,500x); -信頼度 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/bayes_4_62.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/bayes_0013.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260514/bayes_0016.png,500x); ***02_12_② [#j418c02122] -マスク画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/mask_4_62.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/mask_0013.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/mask_0016.jpg,500x); -ヒートマップ画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/heatmap_4_62.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/heatmap_0013.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/heatmap_0016.jpg,500x); -信頼度 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/bayse_4_62.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/bayse_0013.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260518/bayse_0016.jpg,500x); ***02_12_④ [#j418c02124] -マスク画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/mask_4_62.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/mask_0013.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/mask_0016.jpg,500x); -ヒートマップ画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/heatmap_4_62.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/heatmap_0013.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/heatmap_0016.jpg,500x); -信頼度 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/bayse_4_62.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/bayse_0013.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260519/bayse_0016.jpg,500x); **5/20 [#j418c520] ヒートマップ評価における改良を行った。 DenseNet121・InceptionResNetV2・Xception のアンサンブルで橋梁領域を抽出し、 錆評価には評点1〜5の順序性を考慮した学習 Ordinal Regression を導入した。 またMC Dropout による不確実性推定も導入した。 推論時には劣化ヒートマップepistemic uncertaintyとaleatoric uncertaintyを生成。 さらにGaussian Weighting によりパッチ境界ノイズを低減し、滑らかなヒートマップ生成を実現した。 現在は橋梁領域抽出・錆劣化推定・不確実性可視化までの処理を実装している。 ヒートマップの結果は手動の場合と自動の場合の両方を明日以降に載せる。 **5/21 [#j418c521] -ヒートマップ評価方法の変更と指標の追加 近景画像(現地撮影)を追加して再度学習 --original … ドローン撮影元画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260521/original.jpg,1000x); --bridge_mask … 白領域が鋼材部分(評価するところ) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260521/bridge_mask.png,1000x); --heatmap_overlay … ヒートマップで評価を行った画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260521/heatmap_overlay.jpg,1000x); --uncertainty_map … ヒートマップの精度にどれくらい自信を持っているか &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260521/uncertainty_map.jpg,1000x); , 色 , 意味 , 🔵 青 , かなり自信あり , 🟢 緑 , 普通 , 🟡 黄 , 少し怪しい , 🔴 赤 , かなり迷っている --epistemic_map…モデル側の“不確実性” = AIがまだ学習できていない領域 学習データ追加で改善可能 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260521/epistemic_map.jpg,1000x); , 色 , 意味 , 🔵 青 , 学習済み・自信あり , 🟢 緑 , 普通 , 🟡 黄 , やや未知 , 🔴 赤 , AI未学習・未知パターン --aleatoric_map…画像自体の曖昧さ = 人間でも判定が難しい領域 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260521/aleatoric_map.jpg,1000x); , 色 , 意味 , 🔵 青 , 判定しやすい , 🟢 緑 , 普通 , 🟡 黄 , やや曖昧 , 🔴 赤 , 非常に曖昧 **5/22 [#j418c522] -新たな評価方法でヒートマップをはじめとするさまざまなものを描いてみた --鋼材領域自動抽出の場合 ---元画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/4_62/original.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0013/original.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0016/original.jpg,500x); ---マスク画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/4_62/bridge_mask.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0013/bridge_mask.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0016/bridge_mask.png,500x); ---ヒートマップで評価した画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/4_62/heatmap_overlay.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0013/heatmap_overlay.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0016/heatmap_overlay.jpg,500x); ---ヒートマップ精度にどれほど自信があるかを表した画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/4_62/uncertainty_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0013/uncertainty_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0016/uncertainty_map.jpg,500x); ---モデル側の“不確実性” (まだ学習できていない領域) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/4_62/epistemic_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0013/epistemic_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0016/epistemic_map.jpg,500x); ---画像自体の曖昧さ &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/4_62/aleatoric_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0013/aleatoric_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_auto/DJI_0016/aleatoric_map.jpg,500x); --鋼材領域手動抽出の場合 ---元画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/4_62/original.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0013/original.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0016/original.jpg,500x); ---マスク画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/4_62/manual_mask.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0013/manual_mask.png,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0016/manual_mask.png,500x); ---ヒートマップで評価した画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/4_62/heatmap_overlay.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0013/heatmap_overlay.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0016/heatmap_overlay.jpg,500x); ---ヒートマップ精度にどれほど自信があるかを表した画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/4_62/uncertainty_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0013/uncertainty_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0016/uncertainty_map.jpg,500x); ---モデル側の“不確実性” (まだ学習できていない領域) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/4_62/epistemic_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0013/epistemic_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0016/epistemic_map.jpg,500x); ---画像自体の曖昧さ &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/4_62/aleatoric_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0013/aleatoric_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260522/heatmap_handfree/DJI_0016/aleatoric_map.jpg,500x); **5/26 [#j418c526] -台形変換で鋼材領域を抽出してみた 抽出した鋼材領域はスクリプトで設定したピクセル数によって見た目に変化が出てしまっている。今後は台形変換アプローチについて検討していく。 --左から順に元画像・鋼材領域抽出&台形変換画像・マスク画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260526/moto.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260526/original.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260526/steel_mask.png,500x); --左から順にヒートマップ画像・ヒートマップにおける精度の自信・まだ学習できていない領域 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260526/heatmap_overlay.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260526/uncertainty_map.jpg,500x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260526/epistemic_map.jpg,500x); *6月 [#j418c600] **6/12 [#j418c612] ヒートマップ視認性向上のため一緒に等高線図が出力されるようにスクリプトを変更した **6/15 [#j418c615] ヒートマップでの評価については,現在8 cm四方の近接画像を256 pixelに統一して学習している。 一方で実橋梁画像は撮影距離や画角が一定ではないため,同じ256 pixelでも実際に写っている範囲が異なる可能性がある。 そのため今後は8 cm,16 cm,32 cmなど複数のスケールで学習データを作成し,撮影距離の違いに対して頑健なモデルにできないか台形変換と同時に検討する。 また,不確実性マップについても期待したほど有効に機能していない印象を受けた。 現在はモデル間分散とMC Dropoutの分散を利用しているが,技術者目線では「この領域の評点がどれくらいぶれるか」が知りたいので,予測評点の標準偏差をそのまま可視化した方が分かりやすいかもしれない。 **6/18 [#j418c618] -評価方法の修正 以下3通りでヒートマップ評価できるようにした --1, 自動抽出 --2, 鋼材領域の4隅を指定 ⇒ 台形変換 --3, 鋼材領域を指定(頂点の数は無制限 ← NEW)⇒ 台形変換 ※2は上下フランジが切れずにうつっている場合, 3は上下フランジのどちらかまたはその両方が切れてしまっている場合に使用 -ヒートマップの保管的な役割として等高線図(2D, 3Dの実装) **6/22 [#j418c622] -ヒートマップ評価で色が識別しにくい, 例え色合いが多少異なっていれば評点はどのくらい変化するのかというリクエストに応じて,等高線で評価を可視化できるようにした.ちな生成時間は1つの検証画像に対して3分弱 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260622/heatmap_contour.png,1000x); -上記の図だと線が多すぎてどの領域がこの評点なのかが分かりにくかったため,3D等高線図で表現してみた.ただし固定視点のためクリック等で様々な方向から見ることはできない &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260622/heatmap_3d.png,1000x); -3D静止画が意外と見づらかったので,自由に等高線図3Dを見れるよう html に落とし込んでみた.(試作段階)ちな生成時間は1つの検証画像に対して5分弱 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260622/heatmap_3d_interactive.html); **6/24 [#j418c624] 現行の学習をMATLABに落とせるか試してみたが,1から環境を構築すること, データの移行など課題が多くハードルが高いため断念. いつの間にかヒートマップカラーが逆転していたため,2D, 3D共に修正を行った. 下に示す評価結果は左から順番に256pxでヒートマップ評価した画像, 同様に128px, 64pxで同様に処理した画像が並んでいる.3Dマップのリンクと画像の位置は対応している -評価結果 [[3Dマップ256_128px:http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260624/256_128.html]] : [[3Dマップ128_64px:http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260624/128_64.html]] : [[3Dマップ64_32px:http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260624/64_32.html]] &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260624/256_128.png,660x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260624/128_64.png,660x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260624/64_32.png,660x); **6/29 [#j418c629] 3Dヒートマップを修正した 修正内容は以下の通り -座標役割の変更 --x軸:橋軸方向 --y軸:高さ --z軸:評点 -元画像の貼り付け(白黒) -評点の違いをわかりやすくするために凹凸を強調 -Rust score の座標と評点関係を対応させた 評点が3.05だったとしたらRust score の座標(y軸)も3.05になるようにした. -[[3Dマップ修正1:http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260629/4_64.html]] -[[3Dマップ修正2:http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260629/0013.html]] -[[3Dマップ修正3:http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260629/0016.html]] *7月[#j418c700] **7/7 [#j0147rg0707] 底面画像をカラー化した.今までは Plotly という可視化ライブラリを使って3Dヒートマップを描画していたが,撮影画像をカラーで貼り付けるとなったときにどうも現行のライブラリでは厳しいということが分かった.そこで Pyvista という可視化ライブラリで3Dヒートマップを描画してみたところ,評点軸とカーソルで当たっている箇所の評点を確認できる機能が失われてしまったもののなんとか底面にカラーの画像を貼り付けることができた.ただ Pyvista と web表示(wikiとかに載せる用のhtmlもどきファイル)の相性が悪く,自分が実装したいと思っている内容を反映するまでに時間がかかる場合がある.その面 Plotly は web との相性は良好だった. 今後は評点の可視化等の見やすさ向上に取り組んでいく. -[[3Dマップ修正 Ver 3.0 :http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260707/heatmap_3d_pyvista.html]] -2Dヒートマップ↓(パッチは128pxで評価) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260707/1.png,1000x); **7/13 [#j0147rg0713] 今のところ Pyvista にて3Dヒートマップで描画 & 改善や修正を行なっていく方針. 色々探してみてもっと良さげな描画ライブラリがあれば全然そちらに移行する可能であり. ただスクリプトを書き換えても言うことをきかないことがしばしば どうやらPyvista自体が持っている制約にひかかってしまっているらしい 2Dと3Dを同htmlもどきで表示できるようにしたページは明日以降に貼り付け予定 **7/14 [#j0147rg0714] -[[2D・3Dマップ表示 :http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260707/heatmap_3d_portal.html]] **7/21[#j418c700] 底面にカラーの検証画像を貼って3Dのヒートマップを表示させる方法はなんとか確立できたものの,ホバー表示にてヒートマップの一部領域がNaNや強制的1.0表示になってしまった.評点はあらかじめ設定しておいたパッチとストライドをもとにヒートマップ1区画に含まれている複数領域の平均値をとっているのだが,この際に評点が出力されなかった(0.00やNaN)場合に評点表記にエラーが出てしまうことが分かった. これから表示の不具合を修正しつつ自分が理想としている形・表示に持っていく. &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260723/1.png,1000x); **7/23[#j418c723] NaN表示エラーや評点のミスをなくして3Dヒートマップhtmlがなんとか形になった.(ヒートマップの凹凸が逆になっているがそこはご愛嬌で) -[[3Dマップ Ver 4.0 :http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260723/3D.html]] -使用したスクリプト:inference_heatmap3.py ついでに1クリックで2Dと3Dを切り替えられるhtmlも作成した.2Dは正面固定だが,3Dは自由視点で見れるようになっている ただし動作は重め -[[2D_3Dマップ :http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260723/2D_3D.html]] -使用したスクリプト:inference_heatmap4.py 今後は台形補正, ドローンで連続的に撮影した画像を1つの画像にまとめて一括評価&可視化を目指す **7/28[#j0147rg0728] 近接画像は8cm四方のものを256px四方にリサイズしてそれを学習させることでヒートマップを描いている.つまりここでは8cmが256pxに相当すると定義されている. 一方で検証画像にヒートマップを描画する際は錆の大きさを気にすることなく行なっていた.その結果,不確実性が高かったりと評価の正確性に欠けていた. なので検証画像でも256pxが8cmになるよう台形補正を行なった.下フランジの幅をあらかじめ知っておく必要があるのだが,それとpxを対応させることで8cmが256pxとなるようにリサイズを行なった.(下の画像は実際のサイズと異なる) -元画像 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260728/1.JPG,800x); -補正後画像(左上ピンク枠は256px四方_8cm四方のサイズを表示している) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260728/2.jpg,800x); **7/29[#j0147rg0729] 台形補正を行う際,画像によっては鋼材領域を長方形として選択できないことがある. その場合は下記の3ステップで補正を行えるようにスクリプトを組んだ.ただしこのスクリプトは単体(この処理機能のみ搭載)なので,現行のヒートマップ評価はこれから行う予定. --ステップ1:輪郭指定 画像を用意して鋼材の外郭を左クリックで指定する.頂点はどこから選択しても良いが,1つ目を選択したら時計or半時計まわりに選択すること. (左から順に 元画像ー頂点をクリックする作業スペースー頂点を選択した状態ー鋼材領域を指定した画像 ) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/0.jpg,400x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/1.png,400x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/2.png,400x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/3.png,400x); --ステップ2:最終補正用4頂点の選択 画面外まで視界を広げた作業スペースを用意し,算出した交点・頂点候補を黄色の丸で可視化した. そして補正に使いたい4つの角を選択することで台形補正を行う. (左から順に 延長線上の交点を表示した画像(緑点)ー最終的な台形補正範囲(緑枠)) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/4.png,800x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/5.png,800x); --ステップ3:実寸法計測と正規化 指定した任意の2点間(下フランジ厚さ等)の実寸法を入力し,8cm = 256px の解像度になるよう自動リサイズ 鋼材が表示されていない欠損領域は単色で塗りつぶしている。 (左から順に 下フランジ厚を測定している画像ー補正後の画像) &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/6.png,800x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260729/7.jpg,800x); 補正後の画像は水平方向に圧縮されている感じが否めないため,台形変換とともに回転による変換も視野に考えていく. *8月[#j418c800] **8/3[#j0147rg0803] 予測精度を向上させるためRustモデルの学習モデルと学習方法を少し変えた ただし激重. 学習モデルはdensenet, inceptionresnetv2, xception の組み合わせから EfficientNetV2S, ConvNeXtTiny, RegNetX002 に変更した.現行モデルより錆のテクスチャ・特徴量を読み取れるらしいのだがそこは学習してみて比較することにする. 学習方法は保存枚数が少ない評点1と5における学習の重みを重くした.あと画像を水増しする際に複数の画像を切り貼りして1枚の画像を生成する機能を追加した. **8/7[#j0147rg0807] 新CNNモデルでの学習も完了し,ヒートマップで評価してみたところ以前のCNNよりかは不確実性(ヒートマップのその色にどのくらいの自信を持ってつけているか)は下がったような印象を受けた.ただ依然として不確実性の高い領域(暖色)の割合が多いので,様々なコンフィグを変えて試していきたい.鋼材領域の自動抽出はデータがある程度収集できたら再開する. &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260807/1.png,600x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260807/2.png,600x); **8/15[#j0147rg0815] 8/7に貼り付けた画像は不確実性の値そのものは最大で0.4程度だった(0に近いほど正確性が高い)のだが, 数値と色の対応をかなり厳し目に設定していた.0.1辺りにならないと画像上で寒色系と表示されない. なので数値と色の関係を変えた結果と表を以下に貼り付ける.不確実性の値は0.2前後といったところ. 画像に関して垂直補剛材の部分がヒートマップ画像に暖色系で表示されているようにも思える.これが良いのか悪いのかわからないが,少なからずRustの学習方法が効いていると思われる. -数値と色の対応一覧 (更新版) , 不確実性の値 (Utotal) , 表示される色 , モデルの状態・解釈 , 0.00 〜 0.12 , 濃い青 〜 青 , 極めて確信度が高い モデル間で意見が完全に一致 , 0.12 〜 0.28 , シアン 〜 緑 , 十分信頼できる 軽微なノイズや軽度の揺らぎ , 0.28 〜 0.44 , 黄緑 〜 黄色 , やや迷いがある 腐食境界部や判定が難しい領域 , 0.44 〜 0.64 , オレンジ 〜 赤 , 不確実性が高い モデル間で意見が分散している , 0.64 〜 0.80 以上 , エンジ色・赤紫 , 極めて不確実 モデルの予測が大きく崩れている -画像 左から順にヒートマップ(透過),ヒートマップ(単体_背景なし),不確実性表示 &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260815/1.png,600x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260815/2.png,600x); &ref(http://www.str.ce.akita-u.ac.jp/~gotouhan/j2026/morii/20260815/3.png,600x); * 各種画像の追加・前処理と再学習方法[#j424c400] -ファイル構成 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" を選択すれば学習が始まる