39
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenCVAdvent Calendar 2024

Day 10

OpenCVのInpaintingでオクルージョン画像の物体検出精度向上🔍

Last updated at Posted at 2024-12-09

はじめに

コンピュータビジョンにおける重要なタスクの一つに、Image Inpainting(日本語では「画像修復」などと呼ばれます)があります。

「Inpainting」という言葉は、あまり聞き馴染みがない方もいらっしゃるかもしれませんが、Google Pixel の「消しゴムマジック」と言えばピンとくる方も多いのではないでしょうか?(消しゴムマジックは技術詳細公開されていませんが、類似の技術のはず。。。)

Image Inpainting は、近年AIによる精度向上が著しい分野の一つですが、Image Inpainting 自体の歴史は古く、AIが登場する以前から、以下のようなアルゴリズムが提案されており、OpenCVにも実装されています。

  • An Image Inpainting Technique Based on the Fast Marching Method(2004年)
  • Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting(2001年)

以下は実行例です。
(1枚目は修復対象画像、2枚目は修復対象箇所のマスク、3枚目は1つ目のアルゴリズムでの修復結果、4枚目は2つ目のアルゴリズムでの修復結果)

image.png
OpenCV Docs Image Inpainting から画像引用

今回は、このOpenCVのInpainting処理を活用して、オクルージョン画像の物体検出精度を向上させたケースのお話をします🦔

Inpaintingでの物体検出精度向上アイデア

image.png
物体検出やってると「この手前の物体邪魔だな、、、( ´ー`)y-~~」て思うケースにちょいちょい遭遇します。 ※例だと車の前にあるポール
(もちろん、カメラ設置時の前提条件とか撮影位置とかの条件を色々縛って、そもそも手前に邪魔な物体がこないようにすることが大事ですが)

そして、こんな感じの検出結果を、上長と一緒に眺めていた時に、以下のようなやりとりがありました🦔
高橋「邪魔な物体が映らないようにしてほしいですが、実運用的には難しいですかねー(現実的には設置可能な位置が限られているケースも多いし)」
上長「そうですよね。ちなみにこれ消しゴムマジックみたいに消せないんですか?」
高橋「、、、(゚Д゚)!」
高橋「意外といけるか。。。?」

と言うわけで、この当時有名だったTransformerベースの Inpainting AIの「ProPainter」で試してみた結果がこちら↓
※結果が分かりやすいようにcarクラスのみ描画しています

何個かフレームを抜き出して確認した結果↓
image.png
お、良いんじゃないコレ👀?

image.png
良いんじゃない?良いんじゃない👀?

image.png
検出精度上がってそー👀

Inpaintingで邪魔な物体(静止物)を消すのは効果がありそうです。
ただ、バカでかい問題が、、、ProPainterが超重い、、、😇!!
ローカルPCで動かせなかったので、Colaboratory上でInpaintingした後に、その修復動画を持ってきて物体検出を試す。なんてことも当時していました。

image.png
約24秒の動画(800x464)をA100のGPUで処理して4分9秒。。。
ユースケースにもよりますが、物体検出の前処理として運用するには、これはちょっと重いと思いますね。
Inpainting結果は流石に綺麗なのですが。。。

ProPainterを用いたInpainting動画の生成は、Colaboratoryで試しました。ノートブックはこちら↓

もっと軽量なInpaintingを求めてOpenCVへ

ProPainterでは重すぎるので、当時はOSSのAIの他モデルをせっせと探していました。
が、
ある日「そもそもAIじゃなくてOpenCV実装の軽いInpaintingでもいけるんじゃね👀?」と思い試してみた結果がこちら↓

image.png
いけるやん👀

もちろん画像修復自体の綺麗さはProPainterの足元にもおよびませんが、CPUでもそれなりの速度が出せて、そこそこ画像修復出来て、隠れた物体の検出精度も上がっている。ならOpenCVのInpaintingも全然現役で使えるケースありますね🦔
この投稿では、そんな一例の紹介でした。

上記を試したソースコードは以下にコミットしています。


ちなみに、ProPainterとOpenCVのInpainting(アルゴリズムはcv2.INPAINT_TELEA)を並べた動画はこちら↓

image.png
image.png
image.png
image.png
image.png
image.png
OpenCVのInpaintingも、結構善戦している感じしますね🤔

39
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?