← Documentation / SQLリファレンス

DOI 1.11 — マスキング盲点の定理

旧DB初期のJOINベースパイプラインで構築。このバグの影響を受けたのは一部のモデルのみで、StandardとHigh-Fidelityは訂正が必要だった一方、SwinIRとDigital-Artは無傷と確認されています。詳細は置き換え済みファイルを参照。

query_doi111_verification_windows.sql

σgt=0 ⇒ S=1という恒等式を、4モデル全部を 1つのセッションで(4つのデータベースを同時にATTACHし、 UNION ALLで結果を結合して)検証し、例外がゼロであることを 確認します。

このファイルは、4モデル全部のデータベースを1つのセッションに まとめて開いた上で、3つのクエリ群を順に実行します:

画面録画:hallucination_4model.mp4。

ATTACH 'D:/verification/output_std/alignment_axis_images_std.duckdb'         AS db_std     (READ_ONLY);
ATTACH 'D:/verification/output_swinir/alignment_axis_images_swinir.duckdb'   AS db_swinir  (READ_ONLY);
ATTACH 'D:/verification/output_high/alignment_axis_images_high.duckdb'       AS db_high    (READ_ONLY);
ATTACH 'D:/verification/output_digital/alignment_axis_images_digital.duckdb' AS db_digital (READ_ONLY);

ATTACH 'パス' AS 別名 (READ_ONLY)は、追加の データベースファイルを現在のセッションに開き、短い別名を 付けるコマンドです。以降のクエリでは、開くファイルをいちいち 切り替える代わりにdb_std.blocksのように書けます。 4つとも読み取り専用で開いているので、このファイルの実行が 検証対象のデータを書き換えることはありません。

SELECT 'std' AS src_model, COUNT(*) AS total_blocks FROM db_std.blocks
UNION ALL
SELECT 'swinir', COUNT(*) FROM db_swinir.blocks
UNION ALL
SELECT 'high', COUNT(*) FROM db_high.blocks
UNION ALL
SELECT 'digital', COUNT(*) FROM db_digital.blocks;

Part 0は定理の検証そのものではなく、単なる前提の確認です: 各モデルのデータベースに何行(noTTA・TTA合計のブロック数) 入っているか。COUNT(*)が行数を数え、4つの SELECTをUNION ALLで重ねることで、 4回別々の結果を出す代わりに、モデルごとにラベル付きの1行を まとめて出力します。

SELECT 'std' AS src_model,
    COUNT(*) FILTER (WHERE model='notta')                 AS n_sigma0_notta,
    COUNT(*) FILTER (WHERE model='notta' AND ssim_s<>1.0) AS exceptions_notta,
    COUNT(*) FILTER (WHERE model='tta')                    AS n_sigma0_tta,
    COUNT(*) FILTER (WHERE model='tta' AND ssim_s<>1.0)   AS exceptions_tta
FROM db_std.blocks WHERE sigma_gt = 0
UNION ALL
-- ...同じ4列を、db_swinir・db_high・db_digitalについても繰り返す

これが実際の検証です(sigma_gtについては 用語集を参照)。 WHERE sigma_gt = 0で、ground truthのブロックが 完全に平坦なものだけに絞り込みます。COUNT(*) FILTER (WHERE ...)は、条件ごとに別のクエリを書かなくても、 追加条件に合う行数を数えられます:n_sigma0_notta はnoTTAでσgt=0のブロックが何件あるか、 exceptions_nottaはそのうちssim_s <> 1.0(構造項Sが厳密に1でない)の件数です。 この報告書が証明する定理は、どちらの例外件数もどのモデルでも 厳密に0になると予測しており——実際のデータベースに対して これを実行した結果も、まさにその通りであることを確認して います。

SELECT 'std' AS src_model,
    COUNT(*)                                        AS n,
    ROUND(AVG(comp_sharpness_processed_block), 4)   AS avg_sharpness,
    ROUND(STDDEV(comp_sharpness_processed_block), 4) AS std_sharpness,
    ROUND(MAX(comp_sharpness_processed_block), 4)   AS max_sharpness
FROM db_std.blocks
WHERE model = 'notta' AND is_comp_zero = FALSE AND sigma_gt = 0
UNION ALL
-- ...同じ4列を、db_swinir・db_high・db_digitalについても繰り返す

こちらは定理そのものではなく、続報的な問いです:ground truthが 平坦なそれらのブロックにおいて、復元結果も常に平坦なのか、 それともモデルが何もないところにディテールを 「幻視」する ことがあるのか。is_comp_zero = FALSEは、復元結果 自体が完全に退化 している(何も写っていない)ケースを除外する条件です。残った ブロックにおけるcomp_sharpness_processed_blockの 平均・最大値が、本来何もないはずの領域にモデルがどれだけ シャープネスを幻視して付け加えたかを測ります。