ピーキングダック

7603fed4cfa8e0b10211dfdb655f34ee.jpeg

導入

コンピューター ビジョン プロジェクトは、OpenCV、TensorFlow、PyTorch などのさまざまなツールやパッケージが関与するため、非常に困難な作業となる場合があります。関連するツールや API に精通しているだけでなく、コンピューター ビジョン パイプライン全体を機能させるために個々のパッケージを適切に組み合わせる必要もあります。

たとえば、OpenCV は [H, W, C] 形式の BGR チャネルを持つ画像を処理しますが、TensorFlow は同じ形式の RGB チャネルを持つ画像を処理し、PyTorch は [C, H, W] 形式の RGB チャネルを持つ画像を処理します。この不一致のため、画像がライブラリ間で受け渡される際には、画像形式を常に変更する必要があります。この種の問題 (およびその他の問題) は、一般に避けたい多くの定型コードにつながります。

単一の統合パイプラインでコンピューター ビジョン プロセスを簡素化できたらどうなるでしょうか? このパイプラインには次の特性が必要です。

  • オープンソースであり、コストを抑えるために GPL-3.0 などの制限がありません。

  • さまざまなユースケースに対応するモジュール式。

  • 最大限のパフォーマンスを実現する最先端のテクノロジー。

  • パイプラインの複雑さを軽減するために最小化されています。

AI シンガポールが最近リリースしたコンピューター ビジョン パッケージである PeekingDuck が、これらすべての問題を部分的に解決することが判明しました。

ピーキングダック

PeekingDuck は、次の機能を備えたコンピューター ビジョン フレームワークです。

  1. オープンソース (Apache 2.0) - コストや制限はありません。

  2. モジュール性 - さまざまなモジュールを組み合わせて、さまざまなユースケースに対応できます。

  3. 最先端のコンピューター ビジョン推論 - 強力な深層学習モデル。

  4. 最小限 - Python コードは本当に必要ありません。

pip などのパッケージ マネージャーを使用して PeekingDuck を Python パッケージとしてインストールすると、そのパッケージをコマンド ライン/ターミナルから直接使用して、他のアプリケーションと簡単かつ直接統合できます。

PeekDuck をインストールする

PeekingDuck は Python パッケージとしてインストールされます。

pip install peekingduck

ノード - PeekingDuck の基本的な構成要素

PeekingDuck では、コンピューター ビジョン パイプラインは、ノードと呼ばれる基本的な構成要素を使用して構築されます。各ノードは異なる一連の操作を処理し、ノードを混合することで異なるパイプラインを作成できます。この記事の執筆時点では、PeekingDuck には 6 種類のノードがあります。

  1. 入力ノード - ライブ カメラまたはビデオ/画像ファイルからパイプラインに画像データをフィードします。

  2. 拡張 - 画像データを前処理します。

  3. モデル - オブジェクト検出や姿勢推定などのコンピューター ビジョン タスクを実行します。

  4. スマッジ - ポストプロセスモデルの出力。

  5. 描画 - 境界ボックスなどのモデル出力を視覚化します。

  6. 出力 - モデル出力をディスクに保存します。

人物追跡プロセス

PeekingDuckの使い方はとても簡単です!このセクションでは、PeekingDuck を使用して人物追跡パイプラインを作成する方法を説明します。

PeekingDuckの初期化

最初のステップは、指定されたディレクトリ (この場合は person_tracking/) で PeekingDuck を初期化することです。

mkdir person_tracking

cd person_tracking

peekingduck init

これにより、他のソース コード ファイルとともに、pipeline_config.yml という構成ファイルが person_tracking/ ディレクトリに作成されます。PeekingDuck が希望どおりに動作するようにするには、pipeline_config.yml ファイルを変更する必要があります。

この例では、pipeline_config.yml には次のものが含まれている必要があります。

nodes:
- input.visual:
    source: venice-2-train.mp4
    
- model.jde

- dabble.statistics:
    maximum: obj_attrs["ids"]
    
- draw.bbox

- draw.tag:
    show: ["ids"]
    
- draw.legend:
    show: ["cum_max"]
    
- output.media_writer:               
    output_dir: output/

このタスクでは次のノードを使用しました。

  1. input.visual – 画像データをロードするファイルを指定します。MOT15 データセットの Venice-2 画像からステッチされたビデオを使用します。

  2. model.jde - 使用するモデルを指定します。人物追跡には、Joint Detection and Embedding (JDE) モデルを使用します。

  3. dabble.statistics – モデルの出力に基づいて統計計算を実行します。この場合、フレームごとに検出された ID の最大数を計算します。

  4. draw.bbox – 検出された境界ボックスを各フレームに描画します。

  5. draw.tag – 各境界ボックスに対応するラベルを描画します。

  6. draw.legend – 検出の累積最大数を描画します。

  7. Output.media_writer – モデルの予測された出力をディスクに保存します。さまざまなノードを組み合わせて適合させることで、さまざまなパイプラインを構築して、さまざまなコンピューター ビジョンのユースケースを解決できます。利用可能なノードの詳細なリストは、PeekingDuck Web サイトで入手できます。

https://peekingduck.readthedocs.io/en/stable/nodes/input.html

データを準備する

次のステップはデータを準備することです。私たちのケースでは、OpenCV を使用して、MOT15 データセットからの Venice-2 画像を、フレーム レート 30、解像度 [1920, 1080] の venice-2-train.mp4 という名前のビデオ ファイルにステッチします。

import cv2

import os

w = cv2.VideoWriter("venice-2-train.mp4", 
                    cv2.VideoWriter_fourcc(*"MP4V"), 
                    30, [1920, 1080])

files = sorted(os.listdir("MOT15/train/Venice-2/img1"))

for f in files:
    im = cv2.imread(os.path.join("MOT15/train/Venice-2/img1", f))
    w.write(im)

w.release()

ピーキングダックを実行する

PeekingDuck とデータを初期化した後は、コマンド ラインからパイプラインを実行するだけです。

peekingduck run

パイプラインの出力は、pipeline_config.yml での指定に従って、output/ ディレクトリの下に保存されます。これは、以下に示すようにビデオまたは .gif 画像として視覚化できます。

検出された境界ボックスは追跡された各人物に重畳され、対応する各追跡 ID が表示されます。累積最大トラッキング ID の数も各フレームの左下隅に表示されます。

ce6ec2c40996300dda021f92f7466893.gif

PeekingDuck を個人追跡に使用する場合、データの準備以外には Python コードを 1 行も記述していないことに注意してください。

結論は

コンピューター ビジョンは大きな進歩を遂げ、現在では PeekingDuck などの多くの優れたソフトウェア パッケージにアクセスできるようになりました。

PeekingDuck は、少量の Python コードのみを必要とするオープンソースのモジュール式最先端コンピューター ビジョン モデルを提供しており、誰でも比較的簡単にコンピューター ビジョン プロジェクトを実行できます。

参考文献

  1. https://peekingduck.readthedocs.io/en/stable/master.html

  2. https://motchallenge.net/data/MOT15/

  3. https://github.com/Zhongdao/Towards-Realtime-MOT

☆終わり☆

これが表示された場合は、この記事が気に入っていることを意味します。転送して「いいね!」してください。WeChat で「uncle_pn」を検索し、編集者の WeChat「woshicver」を追加して、友達のサークルに毎日高品質のブログ投稿を更新してください。

QRコードを読み取ってエディタを追加↓

b410337760dd10e684e6b4268f771ead.jpeg

おすすめ

転載: blog.csdn.net/woshicver/article/details/131098801