OpenVXって実装がされてきているんだ(画像認識のAPIへの標準化)

他の方が書かれている記事の方が最新の状況を書かれていますので、ぜひそちらを参照ください。

[OpenVX SDKの調査](https://qiita.com/okuoku/items/06920dbcb86f374be624) 2019年の記事


-------

　OpenVXの仕様が発表されたとき、画像認識技術のライブラリが標準化されていくんだと期待を持った。仕様のドキュメントを読んだときに、実際にこの実装を作るのは簡単じゃないだろうと感じた。仕様が発表されてから、OpenVXの実装がでるのはまだかなと思いつつ、年は流れた。

　最近Jetsonを調べている中で、OpenVXに対する実装のライブラリが提供されていることを知った。





- Khronos [OpenVX Portable, Power-efficient Vision Processing](https://www.khronos.org/openvx/)
    - [OpenVX 1.2 Specification](https://www.khronos.org/registry/OpenVX/) updated April 27, 2017
    - [OpenVX 1.2 Specification pdf](https://www.khronos.org/registry/OpenVX/specs/1.2/OpenVX_Specification_1_2.pdf) updated April 27, 2017

        - 上記を読むとよく使われる画像処理の関数が記述されている。これらは画像認識の分野での重要な前処理になる関数が多数記述されています。
        - また、上記のpdfを読むとHOG,LBP,HoughLinesP　などといった記述が見つかります。
    - [The OpenVX Specification html 版](https://www.khronos.org/registry/vx/specs/1.1/html/index.html)
        - [Vision Functions](https://www.khronos.org/registry/OpenVX/specs/1.2/html/da/db6/group__group__vision__functions.html)
    - [リリースノートの日本語訳](https://www.khronos.org/assets/uploads/press_releases/Khronos-releases-OpenVX-1-2-spec_JP.pdf)
    - [OpenVX Neural Network Extension](https://www.khronos.org/news/press/khronos-launches-dual-neural-network-standard-initiatives)
        - ニューラルネットワークの技術をOpenVXに取り込むための標準化をしようとしているらしい。
        - Neural Network Exchange Format (NNEF)　というのを考えているらしい.
      以下はそのアナウンスの一部の和訳。  
        
> 今日、ほとんどのニューラルネットワークツールキットと推論エンジンは、訓練されたネットワークパラメータを記述するために独自のフォーマットを使用しているため、熟練したネットワークを複数の推論エンジンで実行できるようにするために多くの入力器と出力器を構築する必要があります。 Khronos Neural Network Exchange Format（NNEF）は、ツールを使用してネットワークを作成し、その訓練されたネットワークを他のツールキットまたは推論エンジンで実行するプロセスを簡素化するように設計されています。これにより、展開の摩擦を減らし、クロスプラットフォームの深い学習ツール、エンジン、アプリケーションの豊富な組み合わせを促進することができます。


- NVIDIA [VisionWorks] (https://developer.nvidia.com/embedded/visionworks)

- SlideShare [【第33回コンピュータビジョン勉強会＠関東】OpenVX、 NVIDIA VisionWorks使ってみた](http://www.slideshare.net/YasuhiroYoshimura/33openvx-nvidia-visionworks)


- [OpenVX Tutorial OpenVXを使った簡単なプログラム（Sobelフィルタ）](https://github.com/atinfinity/lab/wiki/%5BOpenVX-Tutorial%5DOpenVX%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E7%B0%A1%E5%8D%98%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%EF%BC%88Sobel%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%EF%BC%89)

- [AMD OpenVX (AMDOVX)](http://gpuopen.com/compute-product/amd-openvx/)


[クロノスグループが、コンピュータビジョンアクセラレーション向けOpenVX 1.0仕様を 完成させリリース](http://qiita.com/wstone/items/40980cf958933f773c6c)

2017年5月1日 [オープンソースのコンピュータービジョンライブラリ「OpenVX 1.2」リリース](https://thinkit.co.jp/news/bn/11819)

ソシオネクスト [OpenVX対応のHWアクセラレーターを搭載](http://eetimes.jp/ee/articles/1703/03/news034.html)
ソシオネクスト pdf [世界初、OpenVX 対応ハードウェア・アクセラレーター搭載
-  高性能グラフィックス・ディスプレイ・コントローラーを開発](https://www.socionext.com/jp/pr/sn_pr20170302_01j.pdf)

「OpenVX」対応 [画像認識の機械学習アルゴリズムを容易に組み込める、ザイリンクスが新開発環境 (1/2)](http://monoist.atmarkit.co.jp/mn/articles/1703/14/news039.html)

[OpenVXなどのイニシアチブにおいて「主要なコントリビューター」であるItseezの買収の記事](https://japan.cnet.com/article/35083390/)
ちなみに、IntelとItseezとは次のようにOpenCVでも縁がある。
> OpenCV（オープンシーヴィ、英語: Open Source Computer Vision Library）とはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリ[1]。2009年にWillow Garage（ウィロー・ガレージ）に開発が移管された後、2015年現在はItseezがメンテナンスを行なっている[2]。なお、2016年5月26日にインテルがItseezを買収することが発表された。


---
OpenVXの設計に関心を持っている理由
- OpenVXの個別の実装が利用できればそれに越したことはない。
- OpenVXの定式化は、画像認識技術の定式化になっている。


-------
# 追記 2020.06.25
HOG, LBP という特徴量は、最近出番が少なくなっていることを感じる。
深層学習重視の時代には、HOGやLBPという特徴量を使いたいかと問われたときに、
深層学習さえ使えれば十分という自分自身を発見している。
HoughLinesP のように直線の検出など、深層学習の時代にも残っているアルゴリズムはある。
深層学習の時代に、OpenVXはどうなっていくのだろう。
# 追記 2024.07.02
## OpenVX 1.3.1 (The OpenVX 1.3.1 specification was released on February 2, 2022)
https://www.khronos.org/openvx/


New in OpenVX 1.3
Now that the OpenVX API has grown to an extensive set of functions, there is interest in creating implementations that target a set of features rather than covering the entire OpenVX API. In order to offer this option while still managing the API to prevent excessive fragmentation regarding which implementations offer which features, the OpenVX 1.3 specification defines a collection of feature sets that form coherent and useful subsets of the OpenVX API. These feature sets include the following:

Base feature set (Basic graph infrastructure)
Vision (OpenVX 1.1 equivalent vision functions)
Enhanced Vision (Vision functions introduced in OpenVX 1.2)
Neural Network (OpenVX 1.2 equivalent neural-network functions, plus the neural network extension and the tensor objects)
NNEF (Kernel import plus the tensor objects)
Binary Image support (U1)
Deployment feature set (for safety critical usage)


## https://github.com/KhronosGroup/OpenVX-sample-impl
OpenVX sample implementation

## https://github.com/KhronosGroup/openvx-samples
OpenVX Samples to use with any conformant implementation of OpenVX

### 私見：
- APIの仕様の標準化はとても難しい。
- 技術自体が発展途上だと、適切なAPIの設計が難しい。
- ほんとにいいのが分かるまでは標準化できない。
- ほんとにいい実装がで始めたときに、それぞれの実装をする人がAPIを共通化する動機がない。
- よく使われる実装が普及した時に、そのAPIを変更することは利点が少ない。
- そのうちに、その実装自体が意味を持たなくなる。
- 画像認識のAPIの標準化はそれらの理由があって難しい。
- OpenVX については、それぞれのサイトでの更新頻度などを参考に考えることだ。