YOLOv4 : 物体を検出する機械学習モデル
ailia SDKで使用できる機械学習モデルである「YOLOv4」のご紹介です。エッジ向け推論フレームワークであるailia SDKとailia MODELSに公開されている機械学習モデルを使用することで、簡単にAIの機能をアプリケーションに実装することができます。
YOLOv4の概要
YOLOv4はシングルショットで物体を検出するYOLOシリーズの最新版です。YOLOv3までの作者のJoseph Redmonは2020年2月に開発終了を発表しており、YOLOv4はDarknetのWindows版を開発しているAlexey Bochkovskyによって開発されました。
YOLOv4のアーキテクチャ
YOLOv4は近年の研究成果を統合する形で設計されており、BackboneにCSPDarknet53、NeckにSPP(Spatial pyramid pooling)、PAN(Path Aggregation Network)、HeadにYOLOv3を使用しています。
CSPNetはFeatureMapの一部のみをConvして残りをConcatすることで精度を落とさずに高速化する手法です。
SPPは複数のカーネルサイズ(1,5,9,13)で同時にPoolingすることで精細な情報と広域な情報の両方を取得する方法です。
PANは異なるバックボーンレベルから特徴量をDetectorに伝えることで、入力に近い層の情報を活用する手法です。
YOLOv4の性能は下記となっています。YOLOv3に比べてmAPが大幅に向上しています。
YOLOv4の使用方法
ailia SDKでYOLOv4を使用するには下記のコマンドを使用します。-vオプションに0を指定することで、WEBカメラからYOLOv4を使用して物体を検出します。
python3 yolov4-tiny.py -v 0
-vオプションにファイル名を指定することで、任意の動画に対して物体を検出します。
python3 yolov4-tiny.py -v input.mp4
画像認識の解像度は、dwおよびdhオプションを使用して、416x416、640x640、1280x640を指定することができます。小さい物体を認識したい場合は大きな認識解像度を指定してください。
実行例です。
yolov4-tinyのサンプルコード
yolov4のサンプルコード
YOLOv3とYOLOv4の比較
同じ動画に対して、YOLOv3 tinyとYOLOv4 tinyを適用した場合の処理結果の比較です。YOLOv4 tinyの方が総じて安定した出力を得ることができます。1280x640解像度でのMacBookPro13 (GPU)での推論時間は、100回平均で、YOLOv3 tinyが98.15ms、YOLOv4 tinyが107.68msです。
YOLOv4のONNXへのエクスポート
pytorch-YOLOv4を使用することでDarknetの重みをPytorchにインポートすることができます。また、ONNXへのエクスポートにも対応しています。
Darknetのweightをonnxに変換するには下記のスクリプトを使用します。1はbatch sizeです。0にするとdynamic batch sizeでエクスポート可能です。
python3 demo_darknet2onnx.py yolov4.cfg yolov4.weights dog.jpg 1
YOLOv5について
YOLOv5はPytorch版のYOLOの開発者であるUltralyticsによって開発されています。こちらはDarknetは使用しない形になっており、名称については議論があります。DarknetのIssueによると、YOLOv5よりも、YOLOv4の方が精度が良いとされていますが、弊社の検証ではYOLOv5の方が安定した検出結果が得られる場合もあります。YOLOv5については別記事にて紹介しています。
ax株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。ax株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。