【開発記②】背景除去の泥沼にハマった話——「一発できれい」の限界と、複数AIをレイヤーで重ねる答え
※この記事は、AIツール「ClearScale」開発記の第2回(全3回)です。第1回では、画像を高画質にするツールが完成するまでをお届けしました。今回は、その勢いで「背景除去」にも手を出し、泥沼にはまってから抜け出すまでの記録です。
実は、前回の高画質化ツールについては、友人が多忙でまだ完成報告ができていませんでした。どうせ報告するなら、以前その友人が「商品写真の背景もキレイに切り抜きたいんだよね」とこぼしていたことを思い出し、「せっかくなら背景除去まで実装して、まとめて見せよう」と考えたのです。
背景除去(切り抜き)は、フリマやネットショップの商品写真を、背景を透明にして商品だけをくっきり見せる、あの加工です。「高画質化ができたなら、これもいけるだろう」と軽い気持ちで手を出したのですが……これが想像以上の沼でした😅
モデル選びで最初にぶつかった「ライセンスの壁」
まずは高画質化のときと同じように、Claude CodeやCodexに相談しつつ、GitHubで背景除去に使えるAIモデルを探しました。候補はいくつも見つかります。
ここで最初の教訓がありました。性能が高いモデルでも、ライセンス次第では使えないということです。
たとえば、評判のよかった「RMBG-2.0」というモデルは、精度は魅力的だったのですが、ライセンスが「非商用(お金を取る用途はNG)」でした。ClearScaleはいずれ有償での提供も視野に入れているため、この時点で採用を見送りました。
最終的に、比較検証の土台にしたのは次の3つです。いずれも商用利用できるライセンスであることを確認しています。
- BiRefNet(MITライセンス): 高精度な切り抜きの主力候補
- SAM-HQ(Apache-2.0ライセンス): 「ここを切り抜いて」と指定できる対話的な選択に強い
- rembg(MITライセンス): BiRefNetを手軽に動かせる定番の道具
「無料で高性能」だけでなく「そのライセンスで商用OKか」まで見ないと、後で作り直しになる——これは非エンジニアにこそ知ってほしい落とし穴でした。
「一発できれいに抜く」の限界
モデルが決まり、Modal上で動かして切り抜きを試していきました。検証には、自分で撮影した「青いベンチ」の写真を主に使いました。自由に撮り直せて、商品写真に近い被写体として扱いやすかったからです。
ところが、1つのモデルに一度処理させるだけでは、なかなか思い通りになりません。背景を消そうとするとベンチの一部まで消えてしまったり、逆に消し残しが出て背景がうっすら残ってしまったり。「消えすぎ」と「残りすぎ」の間で、設定を変えては結果を見比べ、比較の条件を丁寧に揃える必要もあり、地道な試行錯誤が続きました。私自身の技術不足もあって、正直、心が折れそうになりました😭
たどり着いた答え「複数モデルをレイヤーで重ねる」
さんざん悩んだ末に落ち着いたのが、「1つのモデルで完璧を目指すのをやめる」という発想でした。
具体的には、複数のAIモデルにそれぞれ背景を抜かせて、その結果を画像編集ソフトのような「レイヤー(層)」として何枚も重ねて持っておきます。そして、場所ごとに「ここはこのモデルの結果を採用」「ここは残す/消す/透明にする」と、いいとこ取りで合成していくのです。
面白いことに、単体では「これは使えないな」と判断したモデルも、「この部分を消すのが得意なレイヤー」として重ねると役に立ちました。1つのモデルの優劣ではなく、複数の個性を組み合わせる——この方針転換で、あの手強かった青いベンチは、ようやく狙いどおりにキレイに抜けるようになりました。
正直な話:格子状のものは、まだ勝てていない
ここは正直にお伝えします。このレイヤー方式でも、解決しきれていない題材があります。それが、格子状の「ペットサークル(柵で囲うペット用の囲い)」やフェンスのような、細い格子が重なった被写体です。
求められるのは「手前の格子は1本ずつ残しつつ、格子の隙間の“向こう側の背景”は透明にする」という仕上がり。ところが、奥側の格子まで残そうとすると背景まで残ってしまい、背景を消そうとすると奥の格子も一緒に消えてしまう——という板挟みで、レイヤー方式をもってしても、まだ満足のいく結果には届きませんでした。
こうした細かい格子状の被写体は、今の技術の組み合わせだけでは改善しきれなかった、というのが正直な現状です。ここは別のアプローチを見つけて改善していくべき「宿題」として、はっきり残っています。
非エンジニアがこの体験で学んだこと
今回学んだのは大きく2つです。
1つは、前述のライセンスの重要性。無料で高性能なOSSモデルは宝の山ですが、「商用可かどうか」を最初に確認しないと、時間をかけて作ったものが使えなくなります。
もう1つは、AIは1つで完璧を求めず、組み合わせて使うという考え方です。万能な1つのモデルを探し続けるより、それぞれ得意分野の違うモデルを重ねたほうが、多くの画像で安定して抜けるようになりました。もちろん前述の格子問題のように、合わせ技でも届かない領域は残りますが、個人開発でここまで品質を底上げできたのは大きな発見でした。
おわりに
高画質化に続いて背景除去も、「複数モデルをレイヤーで重ねる」という方針で、多くの画像を実用的に抜けるところまで来ました。一方で、格子状の被写体という宿題もはっきり見えた、という正直な現在地です。
しかし、ツールが「動く」ことと、人に「使ってもらえる」形にすることの間には、まだ大きな隔たりがあります。次回(第3回)は、この高画質化+背景除去ツールを、Cloudflareを使って公開し、コストと向き合いながら「招待制のプロダクト」として世に出すまでと、約2週間の開発を振り返る総括をお届けします。