ER-FlowScan Suite
Solar Filament 技術ノート

Internal Technical Note · 2026-08-29

Solar Filament Segmentation
技術ノート

このプロジェクトで積み上げてきた判断はすべて実測に基づいているが、 「なぜその実測を信じてよいのか」を理解しないと、次に似た主張が 出てきたときに自分で真偽を判断できない。ここでは指標・パイプライン・ pseudo-labelingの理論、そしてこのプロジェクト自身が2度陥った 落とし穴を、実際の数値とともに説明する。

00歴史と人間の精度

指標やパイプラインの中身に入る前に、そもそもこのタスクが どこから来たのかを押さえておく。これは新しく発明された 人工課題ではなく、人間が100年近く手作業でやってきた仕事を 機械に肩代わりさせようとしている。そして「人間はどれだけ 正確にできるのか」という問いには、実はこのプロジェクト自身が 測定した答えがある。

手作業の時代 — なぜ長年人間がやってきたか

フィラメントとは、太陽の彩層をH-alpha波長で撮影したときに disk上で暗い筋として見えるプロミネンス(プラズマの塊)のこと。 これが噴出するとCME(コロナ質量放出)を引き起こし、地磁気嵐→ 衛星障害・電力網リスク・GPS誤差につながりうる。つまり 「今どこにフィラメントがあるか」を毎日追い続けること自体に、 宇宙天気予報という実用上の価値がある。

この理由から、フランスのMeudon天文台をはじめとする観測所は 20世紀初頭からH-alpha全面像の日々の観測を続け、専門家が フィラメントの位置・形状を目視でシノプティックチャートに 手描きしてきた。NOAAの宇宙天気予報でも、McIntoshらが確立した 手法に基づき、予報官が画像を見てフィラメントを識別・トレース する運用が長らく標準だった。

この節の情報の性質について

ここまでの歴史的経緯(観測所名・年代・手法の詳細)は太陽物理学 分野で一般的に語られる通説であり、一次文献まで遡って裏取り したものではない。一方、次の「人間の精度」で示す数値は このプロジェクト自身が実測した値であり、 性質が異なる。

自動化が必要になった理由 — 観測網の拡大

転機になったのは観測網の拡大。NSO(米国立太陽観測所)が運用する GONGネットワークは世界6局に望遠鏡を配置し、地球の自転を カバーしながらほぼ連続的にH-alpha全面像を撮り続けている。 これによって観測データ量が以前とは桁違いに増え、人手による 毎日のカタログ化が追いつかなくなった。

2000年代以降、閾値処理やモルフォロジー演算を組み合わせた 自動検出アルゴリズム(Bernasconi, Rust & Hakim, 2005の ASSA=Automated Solar Synoptic Analyzerが代表例)が登場し、 2010年代以降は深層学習ベースの手法へと置き換わりつつある。 §3・§4で扱うYOLO検出器やrefinerによるパイプライン、そして このプロジェクトが調べた2026年の類似研究(CHASE衛星データでの pseudo-labeling、§4参照)も、この自動化の延長線上にある。 今もなお発展途上の分野であり、「解決済みの枯れたタスク」では ない。

人間の精度 — 専門家同士の一致は PQ 0.34

このコンペのデータセット名はMAGFiLO (Manually Annotated GONG Filaments from H-alpha Observations)。 名前の通り、正解データ(GT)自体がGONG画像に対して人間の アノテータが輪郭を手描きしたものであり、しかも 1枚の画像に複数のアノテータが付いている (GTの個体IDは<annotator_id>-<image_id>_<n>形式で、 評価は(annotator, image)単位ごとに独立して行われる)。

この構造を利用すると、「アノテータ同士がどれだけ一致するか」を リーダーボードと同じPQ指標で直接測定できる。実際に測った結果が 次の通り。

比較対象値
アノテータ同士の一致度(参照アノテーション一致ベースライン、複数アノテータが付いた296観測)0.3398
 個体レベルで IoU>0.5 の一致に至った割合53.9%
現在の自社モデル(V35, 全fold OOF)0.4426

専門家同士がトレースしても、PQで測るとお互い0.34程度しか 一致しない。個体単位で見ても、一方のトレースと IoU>0.5 で 重なるのは約54%にとどまる。これはアノテータの技量不足ではなく、 フィラメントの境界がH-alpha画像上で本質的に拡散的で曖昧 (太陽黒点のような輪郭のはっきりした構造とは違う)なために 生じる、タスクの物理的な性質を反映していると考えられる。

この数字をどう使うか

0.3398は性能の「天井」ではなく、「ある1人のアノテータが 別の1人とどれだけ一致するか」という比較のための基準値である。 実際、自社モデルの OOF PQ(0.4426)はこの値を上回っている。 これは「モデルが専門家より正確」という意味ではない。複数 アノテータのラベルをまとめて学習した結果、特定の1人ではなく “コンセンサス的”な境界に収束し、どの1人とも一致しやすく なっている可能性がある(推測であり、検証は今後の課題)。 §2で説明するPQの IoU>0.5 という「崖」が、人間同士の判定 ですら半分近くを不一致にしてしまうほど厳しい基準であることも、 この数字から読み取れる。

算出コードはscratch/run_annotator_ceiling.py。 再現したい場合はローカルPC(GPU不要)で数分で実行できる。 (2026-08-30訂正:算出コードに参照アノテータ自身との自己比較が 混入する不具合があり、旧数値0.7587/約0.61は水増しされていた。 単一アノテータ画像を除外し自己比較を取り除いて再計算した値に 差し替えた。)

02PQという指標

リーダーボードの指標はPanoptic Quality(PQ)。真の個体集合とモデルの 予測集合を突き合わせ、以下の式で1つの数値にする。

PQ = Σ IoU(TPペア) / ( |TP| + 0.5·|FP| + 0.5·|FN| )
   TP ⟺ IoU(予測, 正解) > 0.5

IoU(Intersection over Union)は「予測と正解がどれだけ重なっているか」を 0〜1で表す。0.5なら予測領域の半分だけが正解と一致している状態。

崖と分母 — なぜ「惜しい」が二重に痛いのか

IoU 0.5という基準は硬い崖である。IoU 0.49の予測はTPにならず、 得点がゼロなだけでなく、分母を押し上げる。 分母の「+0.5|FP|」はその予測自体を誤検出として計上し、 「+0.5|FN|」は対応するはずだった正解を検出漏れとして計上する。 つまり1つの「惜しい」予測が、得点ゼロと引き換えに分母を2重に 増やす。これがPQを難しくしている最大の理由で、 「多少ずれてもいいから塗る」という直感が裏目に出る設計になっている。

具体例

IoU 0.5の予測がTPになったとする。分母は+1、分子は+0.5〜1程度で、 PQは確実に上がる。ところがIoU 0.49なら分母は+1(0.5+0.5)、 分子は+0で、PQは確実に下がる。0.01の違いが得点の 符号を反転させる。

Diceとの違い — このプロジェクトが実際に犯した誤り

本コンペは2026-08-07に評価方法がDiceからPQへ変更され、08-12に リーダーボードが再採点された。このプロジェクトはそれ以前、 Hungarian matched Diceという独自指標をローカル基準にしており、 指標変更後もしばらくそれを使い続けていた。結果、ローカル指標と リーダーボードの相関が失われ、「ローカルで良くなったのにPublicが 動かない」という状態に数週間気づかなかった。

Diceは連続値で、0.3でも0.4でも「まあまあ」の評価が付く。PQは 0.5を境に評価が非連続に変わる。指標の性質を取り違えると、 最適化の方向そのものが逆転しうる。これが、本ノート全体を 通して繰り返す教訓の最初の実例である。

03検出→精密化→後処理

現在の確定パイプライン(V35)は3段階。それぞれ役割が異なり、 どこで何を測っているかを混同すると、改善したはずが悪化する。

1. YOLO検出器
大まかな候補領域を出す。anchor+NMS方式
→
2. refiner
候補ごとに輪郭を精密化するU-Net
→
3. 重複除去
同一画素を複数個体が奪い合わないよう調停

YOLO検出器 — なぜ「だいたい」でよいのか

YOLO11m-segは2048×2048のH-Alpha画像から、フィラメントらしき 領域の候補マスクを大量に出す。この段階の候補は精度より網羅性が 優先される(conf 0.26という比較的緩い閾値で採用)。理由は 後段のrefinerが形を整えてくれるため、候補が多少粗くても 最終的な精度への影響が小さいから。

refiner — 「削る」専用に学習されている

MediSeg U-Net(31Mパラメータ)が、YOLO候補1つずつをcontext 1.65倍で 切り出し、確率マップ(0〜1、画素ごとに「ここは本当にフィラメントか」) を出す。この確率マップの使い方に2つの流儀がある。

方式定義fold0 OOF PQ結果
shrink(確定構成)確率マップ AND 元候補0.4393採用
free(交差制約なし)確率マップだけで判定0.4258〜0.4361fold依存不採用(§4参照)

shrinkは「候補の内側しか削れない」制約付き。 候補が既に実物より大きめに出る傾向があるため、この制約は ほとんどの場合むしろ有利に働く。「細い構造を拾うために外側へ 広げた方がよいのでは」という直感は、実測では一貫して裏目に 出ている(§1のcliff効果が影響: 広げてIoUが0.5を割ると二重減点)。

重複除去 — 提出規約への対応

Kaggleは同一画像内でmaskが1画素でも重複していると提出を拒否する。 複数の候補が同じ領域を指すことがあるため、面積の大きい方から 「もう使われた画素」を除外していく(drop_contained_then_area_asc)。 実測では、この制約自体はPQへの悪影響がほぼ無い(オラクル上限との 差はΔ0.01未満)ことを確認済み。

04pseudo-labelingの理論

今回試みているのは、707観測の年代分布の偏り(2011-17年が87%、 2018-22年が13%)を、モデル自身が生成したラベルで補う手法。 「なぜ効くことがあるのか」「なぜ逆効果になりうるのか」の両方を 理解しておく必要がある。

効きうる理由

検出モデルは学習データの分布に強く依存する。2018-22年のデータが 薄いと、その年代特有の見え方(太陽活動周期による模様の違いなど)への 対応力が弱くなる可能性がある。実際には正解ラベルの無い画像でも、 複数の独立したモデル(3-fold)が同じ場所を検出し、かつ confidenceが高い候補は、統計的に正しい確率が高い。これを 新しい教師データとして使うのがpseudo-labelingの基本発想。

効かない理由 — モデルバイアスの増幅

実際に起きたこと(V47)

refinerを再学習する際、教師データの質を上げようとして 「マッチ度の低い候補は使わない」という厳格化を行ったところ、 検証用の指標(crop_dice)は0.7040→0.7622と大きく改善したのに、 実運用の指標(PQ)はむしろ悪化した(0.4353→0.4296)。

モデルが自分自身の推論結果を教師データとして使うと、 そのモデルが既に得意なパターンをさらに強化し、苦手な パターンはますます見えなくなる可能性がある。これは 「モデルバイアスの増幅(model bias amplification)」と呼ばれる 現象で、同じ課題でpseudo-labelingを行った先行研究 (A Modern ConvNet for Solar Filament Detection, 2026)でも 同様の懸念が明記されており、実測の改善幅もわずか(IoU換算+0.003〜0.006) だった。

今回のパイプラインでは、この対策として3-foldの合意 (2/3以上が同じ場所を検出)+confidence 0.5以上(本番の0.26より 厳しい)という二重のフィルタをかけている。150枚中72個体 しか採用しなかった(平均0.48個体/画像、実データは1画像あたり 平均6.4個体)のは、このフィルタが意図通り保守的に働いている 結果である。

実際の結果(V49、2026-08-29)

この保守的なフィルタを適用したうえで、fold0のtrain splitに pseudo-label 72個体(35画像)を追加して再学習した。評価は pseudo-labelが一切混じっていないfold0の実観測236枚のみで 実施(リークなし)。結果、fold0 OOF PQは0.4393→0.4332 (Δ−0.0061)と悪化し、fold1/2への展開は行わないと 判定した。文献(CHASE論文)から「効いても小幅な改善」と 事前に見込んでいたが、実測は悪化だった。上で説明した モデルバイアス増幅が、このプロジェクトでも実際に再現された ことになる。

05単一fold検証の罠

このプロジェクトで最も重要な、そして2度独立に発生した事故がこれ。 707観測を3分割(fold0/1/2)し、1つを検証用に残して残り2つで 学習する。3つのうち1つだけで良い結果が出ても、それが 「本物の改善」か「たまたまその分割に合っていただけ」かは、 残り2つで確認するまで分からない。

施策fold0fold1fold2結論
WBF drop_contained@0.80+0.0007−0.0027−0.0062不採用
refiner free@0.86−0.0032−0.0157−0.0106不採用

2つとも、fold0だけを見ていた時点では「基準に迫っている、あるいは 上回っている」と判断していた。fold1・fold2で検証して初めて、 それがfold0特有の当たりだったと分かった。

なぜ繰り返し起きるのか

閾値を0.01刻みで細かく探索するような「精密な」手続きほど、 統計的には「たまたま良く見える点」を見つけやすくなる (多重比較問題)。探索の精密さは選択バイアスへの 防御にならない。唯一の防御は、独立したデータ (別のfold)で確認することだけ。

06現在地と競合状況

確定している最良構成はV35(shrink@0.45 + drop_contained)、 全fold OOF PQ 0.4426、Public 0.37。 これ以外に全fold検証を通過した改善は現時点で存在しない。

系統試みた施策数結果
検出器強化(augmentation・モデルサイズ・解像度)6全て不合格
アーキテクチャ差し替え(RF-DETR)2基準未達
アンサンブル(multi-seed・WBF)3全て不合格(fold0限定含む)
refiner再学習・後処理設計4全て不合格(fold0限定含む)
データ側(pseudo-labeling, fold0パイロット)1不合格(Δ−0.0061)

現在の公開リーダーボードは上位7チームがPQ 0.55で並び、 自チームの0.37はその下の0.37〜0.40クラスタに位置する。 上位陣が完全一致で並ぶ挙動は技術的に不自然で、運営自身も 「スコアの比較でなく本質的な取り組みを」と注意喚起している。

07自分で判断するための視点

今後、似たような「改善しました」という報告(このプロジェクトの ものも、他の文献のものも)を見たときに、次のチェックリストで 確認すると素人判断でも大筋を外さない。

  • 全データで検証されているか。一部のfold・一部の サンプルだけの結果は、確認するまで「たまたま」の可能性が残る(§4)。
  • 指標の定義が同じか。Dice・IoU・PQは似て非なる 指標。特にPQのような閾値付きの指標は、連続値の指標と挙動が 大きく異なる(§1)。
  • 検証用の指標と実運用の指標が一致しているか。 crop_diceが良くなってもPQが悪化した実例がある(§3)。「学習が うまくいった」ことと「実際に役立つ」ことは別物。
  • 比較対象(baseline)が何かを確認する。 「基準を上回った」という主張は、その基準がどう測られたものかを 確認しないと意味を判断できない。
  • サンプル数は十分か。n=25のような小さい サンプルでの好結果は、フルデータで再現しないことがある (このプロジェクトでも実際に発生した)。