「AI画像編集ツール」って書いてあるのに、やりたいことができない話

背景を消したくてツールを開いたら、
テキスト入力欄しかなかったことがあります。
そのツールの説明には「AI画像編集」と書いてありました。
嘘ではありません。
 
でも中身は生成専用で、
既存の画像から背景を抜く機能は入っていなかった。
似たようなことを何度か繰り返して、ようやく気づきました。
「AI画像編集」という言葉が、
まったく違う4つの技術をまとめて指しているんですね。

4つは原理から違う

整理すると、こうなります。
 
系統 やること 入力 出力
生成 ゼロから作る テキスト(+参照) 新規画像
inpaint 一部を描き直す 画像+マスク+指示 部分置換された画像
upscale 解像度を上げる 画像 高解像度画像
背景除去 被写体と背景を分ける 画像 透過画像
同じツールに全部入っていることもありますが、
内部では別の処理が走っています。
で、実務でいちばん効いてくる違いはここでした。
 
  • 生成 … 何もないところから作る
  • inpaint … 周囲から推測して埋める
  • upscale … 既存のピクセルから推測して増やす
  • 背景除去 … 新しい情報は作らない。分類するだけ
最後の一行に気づいたとき、
それまでの失敗がだいたい説明できました。

背景除去だけ、性質が違う

他の3つは何かを「作って」います。背景除去だけは作りません。
各ピクセルを「被写体」か「背景」かに振り分けているだけです。
 
だから速い。生成処理が走らないので。元画質も損なわれない。
でも、境界の判定を間違えます。
そしてこれが厄介で、間違えた分は後から直せません。
元データに境界の情報がないからです。
判定を誤りやすい条件は、経験上こう決まっていました。
 
条件 何が起きるか
髪と背景の色が近い 毛束ごと削られる、または残る
細い毛が散っている 一本ずつは拾えない
半透明(ガラス、薄い布) どちらか一方に倒される
影が濃い 影を被写体と誤認
逆光 輪郭全体が曖昧になる
黒髪を暗いグレーの壁の前で撮った写真で、
これを痛感しました。
人の目には髪と壁の区別がついているのに、
データ上の色差はごくわずか。
処理は「どこまでが髪か」を判定できず、
まとめて削るか、まとめて残すかのどちらかになる。
撮り直したほうが早い、という結論になりました。
加工で20分粘るより、
壁から離れて撮り直す5分のほうが確実でした。

inpaintは「周囲がある」前提

マスクで範囲を指定して、そこだけ描き直す処理です。
仕組み上、周囲のピクセルを手がかりにしています。
だからマスクの大きさで結果が変わる。
 
マスクの大きさ 結果
小さい 周囲の情報が多く、自然になじむ
大きい 手がかりが減り、ほぼ生成に近くなる
マスクが画面の半分を超えたら、
それはもうinpaintではなく生成です。
周囲から推測できる範囲を超えているので、
結果も生成と同じくらい不確定になります。
 
「一部だけ直したいのに全然違うものが出てくる」ときは、
たいていマスクが大きすぎます。

upscaleが「作っている」もの

ここは誤解されやすいところだと思います。
学習型のupscaleは、
低解像度と高解像度のペアを学習したモデルが
「たぶんこうだろう」を補っています。
ディテールが増えたように見える。
でも増えているのは、もっともらしい細部であって、
元の被写体にあった細部ではありません。
なので、
  • 風景写真の質感を上げる → 有効
  • 遠くの看板の文字を読む → できない(読める文字を「作る」だけ)
  • 人物の顔を鮮明にする → 印象は変わるが、本人性は保証されない
2番目を期待して使ったことがあって、
出てきた文字がまったくのでたらめでした。
読めるようになったのではなく、読める形が生成されただけだった。
証拠性が要る場面では、この差が問題になります。

順番で結果が変わる

複数の処理を組み合わせるとき、順番があります。
1. 背景除去(分類) 2. inpaint(部分修正) 3. upscale(最後) 
upscaleを最後にする理由 — 先に拡大すると、
後続の処理が大きい画像に対して走るので
時間もメモリも余計にかかります。
それに、拡大時に作られた「もっともらしい細部」を、
inpaintがさらに解釈することになる。
 
背景除去を最初にする理由 — 分類処理なので、
画質が変わる前のほうが精度が出ます。
upscale後の「作られた細部」は、境界判定を混乱させます。
 
逆順を一度やって、髪の輪郭が異常に複雑になったことがあります。
拡大時に生成された毛のディテールを、
分類処理が真面目に判定しようとした結果でした。

触ったときの見分け方

初めてのツールで「これは何系統か」を判断する方法です。
 
挙動 系統
処理が一瞬で終わる 背景除去(分類のみ)
マスクを描かされる inpaint
出力解像度が入力より大きい upscale
テキスト欄がある 生成またはinpaint
数十秒〜数分かかる 生成系(拡散処理が走っている)
処理時間がいちばん分かりやすい指標です。
分類は速く、生成は遅い。両方が混ざっているツールは、
内部で複数系統を組み合わせています。

動画生成の前処理として

最近は、動画生成の参照画像を用意する場面で
この4系統を使い分けています。
参照画像の条件は、だいたいこうです。
 
解像度が十分、被写体が画面の一定割合を占める、
背景がシンプル、細部の情報量が多すぎない。
ここに各系統が対応します。
 
やりたいこと 使う処理
解像度が足りない upscale
背景がうるさい 背景除去 → 単色で埋める
一部だけ直したい inpaint
そもそも素材がない 生成
前処理を挟むかどうかで、動画生成の結果はけっこう変わります。
元画像が条件を満たしていないまま動かしても、良くはならない。
ただ、前処理と生成を別々のツールでやると、
書き出して、保存して、次のツールで開いて、
という受け渡しが毎回発生します。
 
私はCrePalで工程をつないで確認するようにしていますが、
個別の処理を細かく制御したい場合は
専用ツールを組み合わせるほうが自由度は高いです。
受け渡しの手間と制御の細かさ、どちらを取るかだと思います。
 

「AI画像編集でうまくいかない」と思っていたことの大半は、
系統の選び間違いでした。
背景除去で済む話にinpaintを使えば余計な情報が増えるし、
生成でしか作れないものをupscaleで出そうとしても出てこない。
 
やりたいことが4つのどれなのかを最初に決める。
それだけで、ツール選びも、
失敗したときの原因究明も、かなり単純になりました。