えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

AI線画抽出を試す(Informative Drawings)

GitHubでフォローしているアカウントからの通知欄で、Informative Drawingsというソフトウェアを知りました。

↓ informative-drawingsのサンプルプログラム(ONNX)

github.com

↓ informative-drawingsのリポジトリ

github.com

informative-drawingsは、入力画像から線画を抽出することが可能なプログラムです。

よく線画抽出で使用されるCanny法は主にSobelフィルタなどの複数の数式を組み合わせて抽出しますが、informative-drawingsでは、学習データをもとにパラメータを決定してきます。

学習を行うことで、Canny法では除去しきれない線やその切れ目を綺麗に出力できるようになるというメリットがあります。

それを踏まえても、Canny法は性能がよく軽量です


Informative-Drawings-ONNX-Sampleは元々PyTorchで動くinformative-drawingsをONNXへ変換したものです。

ONNXはディープニューラルネットワークの相互変換フォーマットであり、TensorFlowやPyTorch、TensorRT (NVIDIA)などの異なる形式に柔軟に対応します。

ONNXそれ自体もonnxruntimeで動作します。


かなりすごい

ウェブカメラで人の線画化を行うデモは結構あるので、とりあえずアニメ風ライブ映像でも流して検証してみました。

自然由来の映像に比べると不自然な点はあれど、エッジ検出には向いているタイプだと思います。

検出させたところ、かなり綺麗に動画が線画化されていました。


かなり綺麗に線画が取れており、メモ帳でパラパラ漫画を作ったと言われても疑わないクオリティです。

余計な線がない&網目もちゃんと取れているのも高評価ポイントです。

これなら塗り絵も自動生成できちゃいますね。


実行速度

AIなので、そこそこ重いです。

ONNRuntime(OpenVINOなし、CUDAあり)において実行速度は次の通りです。


壁紙にするしかない!

実は、以前に単眼画像の深度推定を用いて壁紙を作成したことがあります。

線画抽出から近い位置の物体を深度でフィルタするものです。

ar-ray.hatenablog.com

github.com


このプログラムでは、Canny法と複数の線画強調アルゴリズムを用いて壁紙用線画を作成していますが、この線画抽出をAIパワーでなんとかしてみました。


完全に同じ線画の太さなどを再現することはできていませんが、右下の石畳が消えていました。

他には、細かいノイズがAI側では無かったりシワがくっきりと反映されているなどの違いがあります。

Google Colabで試すことができます。

AI側は学習が可能なのでまだまだ性能向上の余地はありますが、実行速度を考えるとCanny法が強すぎるでしょう。