스크립트
00:00:00皆さん、OpenCVはご存知ですよね?究極のコンピュータビジョンライブラリとして、誰もが
00:00:07画像のサイズ変更や物体検出など、あらゆるコンピュータビジョンのタスクに使ってきました。
00:00:13そして、2018年以来初となる大型アップデートが行われました。これは非常に大きな変更です。OpenCV 5には
00:00:21YOLOを実行可能な全く新しいディープラーニングエンジンが搭載されました。さらに、Stable Diffusion形式の
00:00:27インペインティングや、フルスペックの視覚言語モデル(VLM)まで、PyTorchやONNXランタイムなどの外部ツールを一切
00:00:35必要とせず、ネイティブに実行できるようになりました。今日の動画では、OpenCV 5の新機能について解説し、
00:00:41実際に自分のマシンでローカルに動かしてデモを検証していきます。とても
00:00:47面白い内容になるはずです。それでは、早速見ていきましょう。まず、なぜ今回のアップデートが重要なのかを説明します。
00:00:57OpenCVはどこにでも存在します。GitHubのスター数は8万6000を超え、1日100万回以上インストールされています。
00:01:0520年もの間、ロボティクス、AR、医療工学、産業用
00:01:11検査など、コンピュータビジョンに関連するあらゆるソフトウェアの基盤となってきました。そして
00:01:17過去8年間、誰もが同じバージョン4系を使って開発してきました。ですから、メジャーバージョンアップは
00:01:24本当に大きな出来事なんです。今回の目玉機能は、ニューラルネットワークを実行するためのDNNモジュールが完全に書き直されたことです。
00:01:32ここで最も注目すべき数字があります。
00:01:38OpenCV 4のDNNエンジンは、ONNXオペレーターの約22%しかサポートしていませんでした。ONNXは、
00:01:47モデルを学習させたフレームワーク以外の環境で実行したい場合にエクスポートする標準形式です。
00:01:5322%のサポート率では、最新のモデルをダウンロードして読み込もうとしても、
00:02:01すぐに壁に突き当たってしまいます。オペレーターが対応していないため、手詰まりになるのです。しかしOpenCV 5ではそのカバー率が
00:02:0880%まで引き上げられました。つまり、ほとんどのモデルがそのまま動くようになったのです。これほど飛躍的に向上した理由は、
00:02:15作り直しの手法にあります。従来のエンジンはネットワークを層ごとに処理していましたが、新しいエンジンは
00:02:22型付けされたオペレーショングラフに基づいて構築されています。ネットワーク全体をまずグラフとして認識し、
00:02:29実行前に適切な形状推論、定数畳み込み、オペレーター融合を行います。簡単に言えば、
00:02:36モデル全体を理解してから実行するため、以前のエンジンでは扱えなかった動的な形状や
00:02:42モダンなTransformerアーキテクチャにも対応できるようになったのです。そして驚くべきことに、
00:02:48これだけの変更にもかかわらず、互換性だけでなく速度も非常に高速です。OpenCVが自社の新しい
00:02:56エンジンをMicrosoftのONNXエンジンと比較したところ、CPU上で実用的なモデルにおいて同等か、それ以上の速度を記録しました。
00:03:04YOLO v8より11.5%高速、OWL v2より約37%高速、XFeatより30%高速でした。
00:03:15これらはOpenCV独自の発表値ですので、いつものように割り引いて考える必要があります。ご自身の環境で
00:03:22ベンチマークを取ってみてください。とはいえ、真実であれば非常に印象的です。この新しいリリースには他にも
00:03:27FP16とBF16データ型のネイティブサポート、CVMatでの本格的なn次元配列のサポート、
00:03:36Pythonファーストなコアなどが含まれています。古いC APIは廃止され、C++17がベースラインとなりました。
00:03:44重要な注意点として、新しいエンジンは現時点ではCPUのみの対応です。
00:03:51GPUサポートはバージョン5のサイクルの後半に追加される予定です。そのため、現時点でGPU推論が必要な場合は、
00:03:58従来通りCUDAとOpenVINOをサポートする旧エンジンにフォールバックすることになります。
00:04:03つまり、これからバージョン5で見せるものはすべてCPU上で動作します。この新しい
00:04:10最大の機能であるDNNエンジンを使って、いくつかの例をテストし、パフォーマンスを確認してみましょう。
00:04:16さて、面白い例から始めましょう。OpenCVにはカラー化のサンプルがあり、白黒画像を
00:04:22入力して色を予測できます。余談ですが、最近『スパイダーノワール』を見ていて、
00:04:28とてもクールな作品です。これも白黒なので、劇中のワンシーンをカラー化してみたら面白いかも
00:04:34と思い試してみました。この画像にカラー化の例を実行します。
00:04:39新しいDNNエンジンを使用しています。ほら、見てください。この速さです。
00:04:47出力結果は完璧ではありません。空の色はまずまずですが、
00:04:53他の部分のカラー化には失敗しています。また、これは少し古い
00:04:59モデルを使用しており、控えめな色調で安全策をとっていることも考慮してください。しかし重要なのはモデルではなく、
00:05:05エンジンです。私が示したかったのは、この画像がネイティブの
00:05:11OpenCVニューラルネットワークを使い、外部依存関係なしで生成されたという点です。素晴らしいでしょう。次は物体
00:05:17検出サンプルを試してみます。再び『スパイダーノワール』のテーマで、作品のクリップを
00:05:24パイプラインに通してパフォーマンスを確認してみましょう。スクリプトを起動すると、
00:05:29見てください。新しいDNNエンジンを通したCPU上でのリアルタイム物体検出です。
00:05:36先ほどのベンチマークを覚えていますか?OpenCVがONNXランタイムよりも高速に動作するモデルは、まさにこれです。
00:05:43つまり、利便性のためにパフォーマンスを犠牲にする必要はありません。この特定のシナリオでは
00:05:49その両方が手に入ります。PyTorchや別のランタイムをインストールする必要はなく、GPUも不要です。
00:05:56すべて標準のOpenCVだけで動作しています。では次に、LDMインペインティングの例を試してみます。
00:06:03LDMとはLatent Diffusion(潜在拡散)の略で、OpenCV 5にはLatent Diffusionインペインティングの例が付属しています。
00:06:11どのように機能するか見てみましょう。先ほどと同じスパイダーノワールの画像を読み込みます。
00:06:16画像から削除したい部分を塗りつぶします。人や物体、
00:06:23何でもかまいません。拡散モデルが空いたスペースを埋めてくれます。OpenCVの
00:06:31従来のインペインティングは瞬時に終わる単一のフォワードパスを使いますが、LDMは拡散を使うため
00:06:39反復的です。ノイズから始まり、段階的にノイズを除去していきます。そのため、
00:06:45このモデルを何度も連続して実行しています。拡散はGPUに適したタスクなので、CPUで行うと
00:06:51さらに遅くなります。それでも、数ステップ実行した際の結果はこれです。
00:06:58まずまずの結果だと思います。完璧ではありません。拡散による
00:07:05アーティファクトがはっきりと見えますが、ステップ数を増やすか別の拡散モデルを使えば解消できます。
00:07:11最後に、VLM(視覚言語モデル)推論の例を紹介します。OpenCV内で
00:07:17視覚言語モデルやLLMをネイティブに使用して、画像キャプション生成などを行う方法です。
00:07:25このデモでは、PaliGemmaモデルを使用して、このスパイダーノワールの画像にキャプションを付けています。
00:07:32見ての通り、非常に遅いです。結果も特にすごいものではありません。ですから
00:07:39画像キャプション生成にOpenCVを絶対に使おうとは思いません。もっと優れた選択肢がたくさんあります。例えば、
00:07:4512B Gemma 4モデルをONNXでローカルに実行すれば、これより100倍速く出力できます。
00:07:53その特定の例は、前回の12B Gemma 4モデルに関する動画で見せました。
00:07:58興味があればチェックしてみてください。しかし、このデモの目的は、OpenCVが今やLLMを実行するために必要な
00:08:04トークナイザー、アテンションレイヤー、KVキャッシュのすべてを内蔵していることを示すことです。
00:08:11そして、これが独立したランタイムで動作するという事実は、このライブラリがどこに向かっているかを明確に示しています。
00:08:18視覚と言語をすべて一箇所に統合しようとしています。GPUアップデートがリリースされれば、
00:08:24さらに良く、さらに速くなるはずです。というわけで、
00:08:29皆さん。これがOpenCV 5の概要です。追加の依存関係なしでCPU上で動作するライブラリです。
00:08:37カラー化、リアルタイム物体検出、拡散インペインティング、
00:08:43そして画像キャプション生成に使用しました。モデルの学習にはまだPyTorchのようなものが必要です。
00:08:50それはOpenCVの目的ではありません。しかし、実際にモデルを
00:08:56ビジョンパイプライン内で実行する場合、OpenCV 5は素晴らしい選択肢であり、先月までの状態から
00:09:03新しいDNNエンジンによって飛躍的な進化を遂げました。皆さんは新しいOpenCV 5をどう思いますか?
00:09:09プロジェクトで使ってみたいですか?ぜひコメント欄で教えてください。皆さん、このような
00:09:14技術的な解説がお好きなら、ぜひ動画の下にある「いいね」ボタンを押して教えてください。
00:09:19チャンネル登録もお忘れなく。BetterStackのアンドリュスでした。
00:09:24また次の動画でお会いしましょう。