メインコンテンツ

opticalFlowRAFT

RAFT 深層学習アルゴリズムを使用したオプティカル フローの推定

R2024b 以降

    説明

    opticalFlowRAFT オブジェクトを使用して、recurrent all-pairs field transforms (RAFT) アルゴリズムにより、前のビデオ フレームと現在のビデオ フレームの間で動きの方向と速度を推定します。このアルゴリズムは、Kubric [3] データセットで学習させた深層学習ネットワークを使用します。RAFT オプティカル フロー推定アルゴリズムは、特にテクスチャが乏しい領域や、動きによるブレがある領域、カメラの複雑な動きがある領域で高い精度を実現するもので、Farneback などのアプローチよりも優れています。高密度 (ピクセル単位) かつ高精度な推定値を提供しますが、より多くの時間とメモリが必要になります。精度を落としてより高速に高密度オプティカル フロー推定を行う場合は、深層学習に依存しない従来のビジョン アルゴリズムである opticalFlowFarneback を選択します。

    メモ

    この機能には、Deep Learning Toolbox™ と Computer Vision Toolbox™ Model for RAFT Optical Flow Estimation が必要です。Computer Vision Toolbox Model for RAFT Optical Flow Estimation はアドオン エクスプローラーからインストールできます。アドオンのインストールの詳細については、アドオンの入手と管理を参照してください。

    作成

    説明

    flowModel = opticalFlowRAFT は、前のビデオ フレームと現在のビデオ フレームの間で動きの方向と速度を推定するオプティカル フロー オブジェクトを返します。

    オブジェクト関数

    estimateFlowEstimate optical flow between two frames
    resetReset the internal state of the optical flow estimation object

    すべて折りたたむ

    RAFT オプティカル フロー オブジェクトを作成します。

    flowModel = opticalFlowRAFT;

    入力ビデオ ファイルを読み取るオブジェクトを作成します。

    vidReader = VideoReader("visiontraffic.avi",CurrentTime=11);

    カスタム Figure ウィンドウを作成して、オプティカル フロー ベクトルを可視化します。

    h = figure;
    movegui(h);
    hViewPanel = uipanel(h, Position=[0 0 1 1], Title="Plot of Optical Flow Vectors");
    hPlot = axes(hViewPanel);

    連続イメージ フレームを読み取り、オプティカル フローを推定します。現在のフレームを表示し、矢印プロットを使用してオプティカル フロー ベクトルを重ね合わせます。estimateFlow 関数は、連続する 2 つのフレーム間のオプティカル フローを計算します。

    この関数は前のフレームを内部的に保存し、それを暗黙的にオプティカル フロー推定に利用することに注意してください。したがって、関数がフレームのシーケンスで初めて呼び出されるときは、ゼロ フローが返されます。これは、実際の前のフレームが存在しない場合、最初のフレームが現在のフレームと前のフレームの両方として扱われ、2 つのフレームの間に検出可能な動きがなくなるためです。これは、opticalFlowFarneback などの確立されたオプティカル フロー推定法の引数構造および動作と一致しています。

    while hasFrame(vidReader)
        frame = readFrame(vidReader);
        flow = estimateFlow(flowModel,frame);
    
        imshow(frame)
        hold on
        plot(flow,DecimationFactor=[10 10],ScaleFactor=0.45,Parent=hPlot,color="g");
        hold off
        pause(10^-3)
    end

    動画処理が完了したら、opticalFlowRAFT オブジェクトをリセットします。これにより、保存された前のフレームを含むオブジェクトの内部状態がクリアされます。

    reset(flowModel);

    参照

    [1] Teed, Zachary, and Jia Deng. RAFT: Recurrent All-Pairs Field Transforms for Optical Flow. Proceedings of the 16th European Conference on Computer Vision. 2020.

    [2] Shah, Neelay, Prajnan Goswami, and Huaizu Jiang. EzFlow: A modular PyTorch library for optical flow estimation using neural networks. 2021. Web. https://github.com/neu-vi/ezflow.

    [3] Greff, Klaus, Francois Belletti, Lucas Beyer, Carl Doersch, Yilun Du, Daniel Duckworth, David J. Fleet et al. Kubric: A scalable dataset generator. In Proceedings of the IEEE/CVF conference on computer vision and pattern recognition, pp. 3749-3761. 2022.

    バージョン履歴

    R2024b で導入