pythonでの背景除去お試し(rembg)

背景除去

久しぶりにブログ的なものをやろうとすると、画像の背景除去がすごく手間に感じました。
小物の背景除去とかは今までgimp2とかでざっくりやっていたんですが、もう少しこのご時世うまい方法があるだろうということで調べてみたところ、rembgなるものがあるらしいですね。
ChatGPTに聞いてみたらBackground Matting V2やらDeepLabを紹介してくれたんですが、どうもやはり情報が古いので、少なくともMay 2024までは更新されているrembgを使ってみました。
とりあえずpython3.10で、GPUサポートを見てみると今のPCにくっついているRTX4070Ti(8GB)も使えそうなので、CUDA12.4とともに使用してみることにしました。
ちなみに環境はwsl2です。

余談ですが、私のwsl2環境、PyTorchのtorch.cudaで見るとちゃんと使えるんですが、nvccのCUDA toolkitは入れていないんですよね。たぶんここらへんのおかげだと思うんですが、いろいろとGPU周りは難しいですね。

rembg

超簡単インストール

pip install rembg[gpu,cli] # for library + cli

とりあえずCLIで、引数は

rembg i -m "model" input output

的な感じ、非常に素直ですね。
デフォルトだとu2netというモデルが使用されるようで、ほかにもいろいろあるようなので、試しにisnet-general-useというモデルも使って比較してみました。

使用例

右の画像に使ってみました。

ちなみに、これは地球儀型の2×2×2のルービックキューブです。ほぼ100%観賞用ですが、なかなかユニークな見た目です。結構好みです。

以下がu2netとisnetの出力です。どっちも5秒かからないくらいでさっくり実行できました。

u2net

isnet-general-use

どっちもきれいといえばきれいなんですが、拡大してみてみるとu2netの方は輪郭がちょっとあいまいで、かつ飛び地の部分があまりうまく切り取れていないですね。対してisnet-general-useはかなり輪郭がはっきりしています。こちらの方が個人的にはかなり希望に近いですね。gimp2で手動でやった時と同じような印象を受けます。
それぞれいつ頃訓練されたものかはわかりませんが、githubの履歴見る限りu2netが2021年くらい、isnetが2022年くらいかな?どっちも(今のLLMとかの発展速度を鑑みれば)結構古そうには感じましたが、全く普段使いには文句ないくらいには正確にやってくれそうです。

モデルを見てみると、人の輪郭用やアニメ絵用なんてのもあるんですね。アニメ絵用はstable diffusion用で大いに活用されていそうです。
軽量モデルなんかもあるんですが、個人的には軽量化するより大きくても性能がいいモデルが欲しいですね。LLMみたいに何十GBとかになってしまうとローカルマシンで動かすには少し困りますが、GPUのVRAMに収まる程度の大きさであれば大歓迎です。

感想

今回使ったrembgのモデルよりも性能のいいものなんて数年も経てばいくらでもぽこぽこ出てきそうなものですが、今回は見つかりませんでしたね。まあ、これ以上性能上がっても素人目には判断つかないくらいには十分な性能です。
とりあえず、毎回gimp2でちまちま切り取るのは回避できそうでよかったです。

コメント

タイトルとURLをコピーしました