LoginSignup
7
14

More than 3 years have passed since last update.

Yolo v3のさまざまな実装 - オリジナルからFPGA実装まで -

Last updated at Posted at 2019-09-08

お使いの環境での最適な実装は、お使いの環境によって違ってきます。
ぜひ、調査してみることをおすすめします。

各実装でのモデルデータは、以下の流儀が混在しています。

  • 他のフレームワークで学習させたモデルを、モデルの変換器で変換したもの
  • そのフレームワークの中で学習したもの

kerasの使われ方も、どのkerasを使っているのか、tensorflowのバージョンなど、いくつもの組み合わせの中で、
後少しのはずの状況ですんなりいかないことがあります。

フレームワーク ソースコードのURL モデルデータ ドキュメントのURL 解説記事
darknet https://github.com/AlexeyAB/darknet https://pjreddie.com/darknet/
darknet https://github.com/pjreddie/darknet ------
Keras https://github.com/qqwweee/keras-yolo3 モデル名.h5 https://qiita.com/yoyoyo_/items/10d550b03b4b9c175d9c 最新の物体検出YOLO v3 (Keras2.2.0+TensorFlow 1.8.0)を独自データで学習できるようにしてみた
Keras 量子化付き https://github.com/tkwataru/keras-yolo3 ------ tensorflowLTで量子化済みの重みデータを出力する。
Chainer https://github.com/chainer/chainercv/tree/master/examples/yolo ------   Chainer自体が開発が終了している
pytorch https://github.com/ayooshkathuria/pytorch-yolo-v3 モデル名.pt (pytorch の形式) PyTorch + YOLO v3導入
pytorch https://github.com/ultralytics/yolov3 https://qiita.com/harayama_dev68/items/fc660bec06ee05ed32c3 学習のiteration に対する各種指標のプロットを作成できる。
Tensorflow https://github.com/wizyoung/YOLOv3_TensorFlow ------
Tensorflow https://github.com/YunYang1994/tensorflow-yolov3 ------
Tensorflow2.x https://github.com/YunYang1994/TensorFlow2.0-Examples/tree/master/4-Object_Detection/YOLOV3
Tensotflow2.x https://github.com/zzh8829/yolov3-tf2
Neural Network Console (YOLO v2) https://github.com/sony/nnabla-examples/tree/master/object-detection/yolov2 https://www.slideshare.net/Sony_Neural_Network_Console_Libraries/20190316lets-try-low-powerconsumption-ai-with-sonys-spresense-handson
Onnx https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/yolov3 https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/yolov3 DeepLearningモデルを様々なフレームワーク間で交換するためのフォーマット. Onnx での検出の例 https://github.com/onnx/tutorials/blob/master/tutorials/OnnxRuntimeServerSSDModel.ipynb

推論に特化したフレームワーク

フレームワーク ソースコードのURL モデルデータ ドキュメントのURL 解説記事
OpenCV https://github.com/opencv/opencv/blob/master/samples/dnn/object_detection.py https://docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html https://docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html OpenCVでのYoLoの利用は、学習済みモデルを推論する部分が含まれている。学習自体は、darknet で行う。
OpenVino https://github.com/PINTO0309/OpenVINO-YoloV3 https://github.com/intel-iot-devkit/smart-video-workshop/tree/master/presentations OpenVinoも推論だけの枠組み
Tensorflow lite https://github.com/peace195/tensorflow-lite-YOLOv3 モデル名.tflite Android端末などの組み込み用途
Xilinx® DNNDK https://github.com/Xilinx/Edge-AI-Platform-Tutorials/tree/master/docs/Darknet-Caffe-Conversion DNNDK + Ultra96でYOLOv3物体認識onFPGA (その1・FPGA向けデプロイまで) - Ultra96ボードでYOLOを高速化
NNgen https://github.com/NNgen/nngen/tree/develop/examples/darknet_yolov3_tiny NNgenは、ディープニューラルネットワーク用のモデル固有のハードウェアアクセラレーターを合成するオープンソースのコンパイラーです。 NNgenは、入力モデル定義から、DNNアクセラレータのVerilog HDLソースコードとIPコアパッケージ(IP-XACT)を生成します。
TensorRT https://github.com/lewes6369/TensorRT-Yolov3 TensorRT は 推論処理を実行する NVIDIA の GPU に対して convolution の演算などを最適化することにより推論を高速化するライブラリです。 https://qiita.com/dcm_yamaya/items/dcb149684fb210b39e8c
TensorRT https://github.com/jkjung-avt/tensorrt_demos
blueoil https://docs.blue-oil.org/autoapi/blueoil/networks/object_detection/yolo_v2/index.html LeapMind の提供しているプラットフォーム https://leapmind.io/news/content/3886/

Intel のOpenVinoの資料によれば、オリジナルのcaffeモデルから数倍の高速化ができるとのことである。
Yoloもcaffeモデルがあり、同様に高速化が期待できそうだ。
https://github.com/intel-iot-devkit/smart-video-workshop/blob/master/presentations/01-Introduction-to-Intel-Smart-Video-Tools.pdf

TinierYolo

推論時に利用するライブラリを減らしたいなら

 既にOpenCVのライブラリを使っているなら、cv2.dnn.readNetFromDarknet()などを使って、OpenCVで推論するのが選択肢の一つ。
OpenCVのcv2.dnn.readNet() 関数の使い方を確認したい場合には、既に動作が検証されているモデルデータを使うこと。変換に成功した気になっていても、実際に動作させてみなければ、変換に失敗していることに気づかない。

What is indeed surprising is that OpenCV’s CPU implementation of DNN is 9x faster than Darknet with OpenML. 実際に驚くべきことは、OpenCVのDNNのCPU実装が、OpenMLのDarknetより9倍高速であることです。

学習時の学習データの与え方を楽にしたいなら

 Kerasのライブラリ内部で、学習用画像の加工があるのを使いたい。

オリジナルの実装では、解析できない内容を解析させながら学習させたいなら

PyTorchなどでのyoloの実装を見てみよう。


https://github.com/ultralytics/yolov3 から図を引用。

from keras.optimizers import Adam

などのようにkeras自体の中に有用な最適化のライブラリがある。
実装されているアルゴリズムを理解するには、pythonで実装されているので、本家の実装のyoloのコードを理解するよりは楽そうだ。

Intelのデバイスでの計算の実行速度を向上させたいのなら

OpenVino

あなたがしたい作業によって、現状では使いやすい実装が違ってくる。

ARM 用の実装
https://github.com/digitalbrain79/darknet-nnpack

SlideShare Ultra96ボードでYOLOを高速化

TVMでyolo v3を速くしてみる


付記

https://github.com/microsoft/onnxruntime
https://pypi.org/project/onnxruntime/
ONNX RuntimeとYoloV3でリアルタイム物体検出
Microsoft の ONNX Runtime を速攻レビュー
YoloV3の独自学習結果をONNX Runtime を使って推論する事例
https://github.com/axinc-ai/yolov3-face


Preferred Networks、深層学習の研究開発基盤をPyTorchに移行

OpenVino のModelOptimizer で変換後のモデルデータを入手するには

注意点

wget を使ってyolov3.cfg などを入手するとき、htmlファイルを入手しないこと。
ページのリンクでは、該当のcfgファイルを表示するためのhtmlファイルになっていることがある。
htmlファイルではなく、確実にcfgファイルのテキストファイルをダウンロードすること。

注意点

このコードは、TF1系のtf.keras、TF2.0のtf.keras、生kerasの3つで挙動が異なります
引用元 https://qiita.com/n_kats_/items/df7ac37f31eeaf4cb557


YOLO V3: Darknetのデータ拡張

Data Augmentation for Object Detection(YOLO)
Training YOLOv3 on your custom dataset

Data Augmentation in YOLOv4


Yoloのモデルのpruning

PaddleSlim モデルのpruning、量子化を行うツール

https://github.com/PaddlePaddle/PaddleSlim
https://paddlepaddle.github.io/PaddleSlim/index_en.html
https://paddlepaddle.github.io/PaddleSlim/model_zoo_en.html

PaddleSlimは、モデル圧縮用のツールキットです。これには、pruning(剪定)、固定小数点量子化、知識抽出、ハイパーパラメーター検索、ニューラルアーキテクチャ検索などの圧縮戦略のコレクションが含まれています。

Baidu が開発しているようです。

neural network distiller

https://github.com/NervanaSystems/distiller
https://nervanasystems.github.io/distiller/install.html

DistillerでDeepLearningのモデルを軽量化: Gradual Pruning編

PyTorchのモデルを軽量化してONNX出力

PyTorch Pruning Tutorial


quantization


どうやたいがいのターゲットデバイス上で、重みファイルのbit幅を削減するツールはそろってきているようです。
float32 が float16 になることだけでも高速化することは多いようです。
学習済み重みファイルをint8 に変換するツールはあったりするようですが、int8にまで量子化を進めたものは、検出性能が低下するのは避けられないようです。


【物体検出】vol.9 :YOLOv3をNVIDIA Jetson AGX Xavierで動かす

Jetson Xavier: Tensorコア対応Yolo V3 インストールメモ
Jetson Xavier を動かしてみた。

Jetson Xavier

  • darknet
  • opencv
  • tensorflow
  • onnx

YOLO(darknet)のコンフィグ(CFG)パラメーターおよびオプション一覧

7
14
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
7
14