Stable DiffusionやFLUXなどの画像生成AIは透過背景のPNG画像を直接出力できないため、生成した素材をそのまま使うには別途背景除去の工程が必要です。人物・アニメキャラクターなど被写体の種類に合わせて16種類以上のAIモデルを切り替えられる背景除去ツール「Rembg」が、ローカル環境で無料で使えるオープンソースとして公開されています。

danielgatis/rembg: Rembg is a tool to remove images background

https://github.com/danielgatis/rembg

◆被写体に合わせてモデルを選択

Rembgの最大の特徴は、16種類以上のAIモデルを用途に応じて切り替えられる点です。人物・アニメキャラ・衣服・商品写真など、被写体の種類ごとに最適なモデルを選択できます。

シーン推奨モデルとりあえず試したい・用途不明u2net または birefnet-general人物・ポートレート(高品質)birefnet-portrait人物全身・シルエットu2net_human_segアニメ・イラストキャラクターisnet-animeECサイト商品写真birefnet-general または isnet-general-use衣服の種類ごとに分類u2net_cloth_seg細い構造物・複雑な輪郭birefnet-dis背景に溶け込んだ被写体birefnet-cod軽量・高速処理優先u2netp または silueta または birefnet-general-lite任意の点を指定して切り抜きsam最大規模・最高汎化性能birefnet-massive非商用で最高精度を求めるbria-rmbg

◆Rembgの実行方法

今回はWindowsにDocker DesktopとGit for WindowsのGit Bashを用意した環境で実行します。dataフォルダの中に「input.png」があり、適用後の画像をdataフォルダに「output.png」として書き出す場合のコマンドは以下の通りです。「-m」で利用するモデルを指定します。


MSYS_NO_PATHCONV=1 docker run --rm \
-v "$(pwd):/data" \
-v "/.u2net:/root/.u2net" \
danielgatis/rembg i -m u2net /data/input.png /data/output.png


◆実際に使ってみる

今回はテスト用としてAIで作成した画像を用意し、背景がどこまで削除されるか確かめてみます。

・アニメ風画像

元画像はこちら。



一般モデルの「u2net」を指定して処理すると、少し雑な切り抜き方に見えます。



アニメ向きの「isnet-anime」の場合、うっすらもやがかかったような感じですが「-a」オプションとしきい値を指定することで改善するとのこと。



「birefnet-general」の場合、モデルサイズが1GB弱と大きくなり処理時間もかかりますがその分、品質は高めで正確です。



◆ポートレート

人物でも試してみます。細かい髪の毛をどう残すかが難しい画像。



「u2net_human_seg」の場合、精度はやや粗いが人物周辺の切り抜きという用途では十分な品質。



「birefnet-portrait」の場合、背景は消えていますが髪の毛を捉えきれていない部分が気になります。



「birefnet-general」の場合、背景も消えまとまりもあるバランス型。



◆判別が難しい画像

最後にエフェクトが掛かった背景と、衣装と髪の毛とが混ざった判別が難しい画像で背景を透明化を試みます。



デフォルトのまま「birefnet-general-lite」モデルを指定しただけでも、下の画像のような品質で透明化できました。



◆その他の利用方法

コマンドオプションを変えることで次のような使い方が可能です。

・フォルダ内の画像を一括処理


rembg p ./input_folder ./output_folder


・指定フォルダの更新を検知し画像が追加されたら自動処理するウォッチモード


rembg p -w ./input_folder ./output_folder


・サーバーとして起動しAPIで外部アプリケーションから利用


rembg s


・ストリーミングの背景除去

動画の背景除去も可能。


rembg b 1280 720 -o output/frame-%03u.png


◆採用実績

他のプロジェクトからの依存が7400件以上に達しており、OSSプロジェクト・企業サービス・研究用途など幅広い場面で組み込まれていることがGitHubの統計からわかります。