PABannier/sam3.cpp

Fast state-of-the-art image and video segmentation in portable C/C++

何を解決するか

MetaのSAMシリーズのような最先端の画像および動画セグメンテーションモデルを実行するには、通常、重いPython環境、PyTorch、CUDA GPUが必要です。sam3.cppは、Pythonランタイムや重い依存関係を必要とせずに、CPUおよびApple Metal GPU上でこれらのモデルを実行できる、ポータブルで高性能なC++実装を提供します。

仕組み

このプロジェクトは、ggmlテンソルライブラリに基づいた単一ファイルのC++ライブラリです。SAM 2、SAM 2.1、SAM 3、EdgeTAMなどの複数のモデルファミリーの推論を実装しています。4ビットおよび8ビットの量子化をサポートしており、モデルサイズとメモリ使用量を大幅に削減できます。SAM 3では、テキストエンコーダーとDETRデコーダーを統合し、テキストプロンプトによる検出を可能にしています。他のモデルは、ポイントおよびボックスベースのセグメンテーションに焦点を当てています。また、動画フレーム間でのオブジェクト追跡用のメモリバンクも含まれています。

対象ユーザー

C++アプリケーションに高品質な画像および動画セグメンテーションを統合したい開発者や研究者。特にエッジデバイス、macOS(Metal経由)、または完全なPython/PyTorchスタックのインストールが現実的でない環境をターゲットとしています。

特徴

  • 広範なモデル対応: SAM 2、SAM 2.1、SAM 3、EdgeTAMと互換性があります。
  • テキストプロンプトによる検出: SAM 3では、単に「猫」と入力するだけでオブジェクトをセグメンテーションできます。
  • 極めて高いポータビリティ: ggmlstb以外に依存関係はゼロ。C++14で記述され、例外や継承を使用していません。
  • ハードウェアアクセラレーション: ベースラインおよびトランスフォーマーデコーダーのApple Metal GPUアクセラレーションを完全にサポート。
  • 効率的な量子化: モデルサイズを大幅に削減(例:EdgeTAMは15MBまで、SAM 2.1 Tinyは22MBまで)。
  • 動画追跡: メモリバンクを使用して、動画フレーム間でのオブジェクト追跡をサポート。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト