この記事はOpenCV Advent Calendar 2022の12月33日の記事です。
TL;DR
OpenCV 4.7.0が12/29にリリースされました、ということで、そのご紹介。
はじめに
- 自己紹介
- どこにでもいる画像処理エンジニアでした!2023年はどうなるか分かりません!!
- ChangeLogの場所
- OpenCVのChangeLogは、wikiで管理されている。
この修正内容のサマリーをざっくりと読み解いていきたい。こんな対応を入れたんだ、へー、というレベルで。
個人的気になったポイント
- SPNGライブラリ対応!libpngから完全置き換えもあり?
- Optimizationの「scalable vector instructions」対応とか、胸がわくわくしますね。そういえば、ARMにもあるんですよね……
- DNNのためのNPU backend対応にやはり力入れていますね!!
Highlights on this release:
DNN:
(後述)
Algorithms:
- ArUco markers and April tags support including ChAruco and diamond boards detection and calibration.
- (これがよく分からない!) Contribのarucoモジュールの変更差分を見ても、さっぱり…… そもそもサポートしてたんじゃないの?と頭を抱えています。
- QR code detection and decoding quality imrovement. Alignment markers support. Benchmark for QR codes: link
- https://github.com/opencv/opencv/pull/22891
- QRコード検出・解析するときに、QR Codeのalignment marker(▣でお馴染みのマーカー)を使うようになった。これで性能向上。
- Nanotrack v2 tracker based on neural networks.
- https://github.com/opencv/opencv/pull/22951
- Nanotrackは、非常に軽量で高速なobject tracking modelですと。そしてこれがv1からv2にバージョンアップして(コード修正なしに)性能向上できる。
- Stackblur algoruthm implementation.
- https://github.com/opencv/opencv/pull/20379
- 画像にGaussian Blurをかける場合に、通常のカーネルを用いるよりもより高速に演算できる。
Multimedia:
- FFmpeg 5.x support.
- CUDA 12.0 support. Hardware accelerated video codecs support on NVIDIA platforms with modern Video Codec SDK (NVCUVID and NVENCODEAPI).
- CV_16UC1 read/write video support with FFmpeg.
- https://github.com/opencv/opencv/pull/22894
- 16UC1での画像読み込みができるように。特殊なカメラでしょうかね…
- Orientation meta support on Mac with native media API.
- New iterator-based API for multi-page image formats.
- https://github.com/opencv/opencv/pull/22128
- 拡張for文を使って、画像を読み書きできるようになったらしい。
- libSPNG support for PNG format.
- https://github.com/opencv/opencv/pull/22226
- libpngよりも高速なPNG Encoder/Decoderもサポート。
- SIMD acceleration for self-built libJPEG-Turbo
- https://github.com/opencv/opencv/pull/22372
- これまでSIMDが無効化されていたので性能が十分でていなかったので、対策。
- H264/H265 support on Android. Multiple fixes for video decoder, endcoder and camera memory layout.
G-API
(後述)
Optimization:
- New universal intrinsics backend for scalable vector instructions. The first scalable implementation for RISC-V RVV 1.0.
- https://github.com/opencv/opencv/pull/22179
- (そのほか、一杯修正)https://github.com/opencv/opencv/commits/4.x/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp
- 可変長バックエンドと組み合わせることで、より性能を高めるらしい。
DNN Module patches
- Improved layers / supported more models:
- Scatter and ScatterND #22529, Tile #22809
- Fixes in Slice (support negative step #22898)
- Support some reduce layers of ONNX #21601
- Added CANN backend support #22634. Link to the manual: https://github.com/opencv/opencv/wiki/Huawei-CANN-Backend.
- https://github.com/opencv/opencv/pull/22634
- Huawei社のNPU "Ascend 310" を活用できるようになるらしい。CPUに比べてかなりの爆速がでている。面白そう。
- Added bacthed NMS for multi-class object detection #22857
- https://github.com/opencv/opencv/pull/22857
- https://github.com/opencv/opencv/issues/22851
- 複数クラス対応する際に、それぞれに実装するよりも楽にするための実装。
- Accelerating convolution, especially for ARM CPU. #21910 and #22905
- Winograd's convolution optimization
- 行列掛け算をする時に、「加減回数を増やすが、乗算回数を減らす」テクニック。
- https://developer.smartnews.com/blog/2017/06/convolution-speed-up/
G-API framework:
- Slightly refactored G-API executor class hierarchy for the future extensibility: #22451;
- 将来の拡張性を考えて、階層構造に関するリファクタリング
- OpenCL backend:
- Introduced zero-copy path from oneVPL surfaces to OpenCL/GPU memory buffers in the OpenCL backend: #22559;
- OneVPL surfaceからOpenCL/GPU っ森バッファへのzero copy pathの導入。
- つまり、メモリコピーなしで演算しましょうと。
- Introduced zero-copy path from oneVPL surfaces to OpenCL/GPU memory buffers in the OpenCL backend: #22559;
- Intel® OpenVINO™ inference backend:
- Enabled asynchronous infer requests in the OpenVINO NN backend: #22588.
- OpenVINO NN backendでの非同期推論要求の有効化
- https://docs.openvino.ai/2021.3/ie_plugin_api/async_infer_request.html
- Enabled asynchronous infer requests in the OpenVINO NN backend: #22588.
- Media integration:
- Added tests and samples for oneVPL VAAPI (Linux) backend: #22212;
- Fixed various issues with oneVPL build on Windows and Linux: #22393, #22456, #22462;
- Python bindings:
- Exposed Stateful Kernels in Python: #22037;
- Exposed ONNX Runtime NN backend in Python: #22017;
- Exposed all core and imgproc G-API operations in Python: #22494, #22735;
- (雑に言うと、Python-GAPI-NNの連携が非常に取りやすくなりました)。
- Samples:
- Various updates to the G-API Pipeline Modelling tool: #22518, #22583;
- Other changes and fixes:
- Updated ADE (the core internal graph library) to version 0.1.2a: #22432;
- Fixed various build warnings: #22935, and issues: #22712;
ということで、今回の修正の雰囲気はつかめたと思います。
ご精読、ありがとうございました!!