モデルはわずか7M:軽量で高精度な顔認識方式DBFace

モデルはわずか7M:軽量で高精度な顔認識方式DBFace

わずか 7M サイズのこの顔認識モデルは、世界最大の自撮り写真に写っているほぼすべての人物を認識します。

[[321809]]

プロジェクト紹介

以前、Machine Heart は、CPU 上で 1000FPS で簡単に実行できるクロスプラットフォームの顔認識プロジェクトについて報告しました。今回紹介するプロジェクトも軽量な顔認識プロジェクトです。違いは、このプロジェクトは少数のパラメータを維持しながら認識精度がはるかに高く、実行には OpenCV と PyTorch のみが必要であることです。

DBFace は、より高速な認識速度と高い精度を備えた軽量のリアルタイム顔認識方法です。下の図は、WiderFace データセットにおけるさまざまな顔検出方法のテスト結果を示しています。 DBFace モデルはサイズが最も小さいだけでなく、Easy、Medium、Hard のテスト タスクで最高の認識精度を達成していることがわかります。

プロジェクトアドレス: https://github.com/dlunion/DBFace

WiderFace は顔検出のベンチマーク データセットで、簡単なものから難しいものまでさまざまな難易度の 32,203 枚の画像と 393,703 個の顔が含まれています。次の図はデータセットからのいくつかのサンプルを示しています。ご覧のとおり、画像内のすべての顔を正確に識別するのは依然として非常に困難です。 DBFace はこのデータセットのさまざまなタスクで 0.925、0.920、0.847 の精度を達成しましたが、これは簡単なことではありません。

WiderFace の詳細については、公式 Web サイトをご覧ください。

http://shuoyang1213.me/WIDERFACE/ より

エフェクト表示

下の図は、WiderFace データセットにおけるさまざまな顔認識方法の PR 曲線を示しています。 PR 曲線は、バイナリ分類器の精度と再現率を直感的に表示できます。異なるアルゴリズムを比較する必要がある場合、バイナリ分類器の PR 曲線が別のバイナリ分類器の PR 曲線によって完全にカバーされている場合、後者のパフォーマンスが前者よりも優れていることを意味します。図からわかるように、3 つのタスクすべてにおいて、DBFace で囲まれた領域は比較的大きいです。

しきい値を 0.2 に設定した場合、世界最大の自撮り写真に対する DBFace の認識効果は次の図に示されています。

DBFace の認識精度が非常に高いことがわかります。写真に写っている顔の多くは、拡大しても肉眼で判別するのが難しいのですが、DBFace なら認識できます。また、モデルサイズはわずか 7M で、エッジデバイス上でリアルタイムに実行することも可能です。そこで、Synced もテストを開始しました。

プロジェクト測定

プロジェクト作成者が提供するコード例には、静止画像の認識と、コンピューター カメラを呼び出す GUI が含まれています。このプロジェクトを実行するには多くの依存関係は必要なく、PyTorch、Numpy、OpenCV だけが必要であることは注目に値します。上記の依存環境はすべて非常に一般的に使用されている拡張ライブラリであるため、インターネット上に対応するインストールチュートリアルが多数存在するため、ここではインストール手順は省略します。

main.py では、image_demo() と camera_demo() はそれぞれ、静的な画像の認識と認識のためのカメラの呼び出しに対応します。静的画像認識コードは次のとおりです。

  1. image_demo()を定義します:
  2.  
  3. dbface = DBフェイス()
  4.  
  5. dbface.eval()
  6.  
  7. HAS_CUDAの場合:
  8.  
  9. dbface.cuda()
  10.  
  11. dbface.load( "model/dbface.pth" )
  12.  
  13. dbface の画像を検出します。 "datas/selfie.jpg "

上記のコードは、トレーニング済みのモデルを読み取り、画像 datas/selfie.jpg を識別し、結果を detect_result/selfie.draw.jpg に保存します。

認識効果を見てみましょう。

上の写真からわかるように、室内の照明の色や明るさに大きな差がある環境でも、DBFace は写真に写っているほぼすべての人物を認識することができ、ヘルメットをかぶって虹を描き、光る光の玉を指差している中央の人物まで認識できます。もちろん、ここで設定された検出閾値は低いため、誤分類現象も発生します。写真に写っている何人かの人の手と右上隅の光の球が、誤って顔と認識されました。この現象は、しきい値を適切に上げることで解消できます。

コンピュータカメラ検出を呼び出すコードは次のとおりです。

  1. カメラデモ()を定義します:
  2.  
  3. dbface = DBフェイス()
  4.  
  5. dbface.eval()
  6.  
  7. HAS_CUDAの場合:
  8.  
  9. dbface.cuda()
  10.  
  11. dbface.load( "model/dbface.pth" )
  12.  
  13. キャップ = cv2.VideoCapture( 0 )
  14.  
  15. キャップを設定します(cv2.CAP_PROP_FRAME_WIDTH, 640 )
  16.  
  17. キャップを設定します(cv2.CAP_PROP_FRAME_HEIGHT, 480 )
  18.  
  19. わかりました、フレーム = cap.read()
  20.  
  21. 大丈夫です:
  22.  
  23. objs = 検出(dbface、フレーム)
  24.  
  25. objs 内の objの場合:
  26.  
  27. common.drawbbox(フレーム、obj)
  28.  
  29. cv2.imshow( "デモ DBFace" , フレーム)
  30.  
  31. キー = cv2.waitKey( 1 ) & 0xFF  
  32.  
  33. キー == ord( 'q' )の場合:
  34.  
  35. 壊す 
  36.  
  37. わかりました、フレーム = cap.read()

上記のコードを実行すると、640x480 の GUI インターフェイスが生成され、カメラを呼び出してリアルタイムの顔検出を実行します。

ご興味がございましたら、このプロジェクトをローカル コンピューターに git clone してテストしてください。

<<:  アルゴリズムを視覚化するオープンソース プロジェクトをお勧めします。

>>:  2Dが3Dになり、視野角を自由に変更でき、高精細な立体感が完璧に復元されます

ブログ    
ブログ    

推薦する

...

インタビュー必須:バックトラッキングアルゴリズムの詳細な説明

序文みなさんこんにちは。私はカタツムリを採っている小さな男の子です。 LeetCode を練習してい...

...

...

Rosetta はプライバシー コンピューティングと AI をどのように結び付けるのでしょうか?

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

磁気リンクがAIサークルを席巻、87GBシードが直接オープンソースの8x7B MoEモデル

「ハイエンド」オープンソースでは、最も単純なリリース方法が採用されることが多いです。昨日、Mistr...

AI 主導のパーソナライズ学習: テクノロジーが教育にもたらす革命

かつてはSFの世界の話のように思われていた人工知能(AI)という言葉は、今や現実のものとなり、私たち...

Zipf 行列分解: 推奨システムにおけるマシュー効果を解決する強力なツール

[[407036]] [51CTO.com からのオリジナル記事]アルゴリズムの公平性は、近年、推奨...

新しい検索エンジンのスキル: アリババの新しい研究では、2D 画像を使用して 3D モデルを検索します

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

音声認識の専門家が奇妙な学生事件によりジョンズ・ホプキンス大学から解雇され、怒ってFacebookを拒否し、中国に移住した

[[274404]] 8月16日、物議を醸していたジョンズ・ホプキンス大学の元教授ダニエル・ポービー...

Google は人工知能の分野で「堀」を持っていないのでしょうか?

少し前、匿名の人物が、Google 社内の研究者による研究メモを Discord プラットフォームに...

...

...

グラフ畳み込みネットワークの作り方は?これは最小限のNumpy実装です

グラフは非常に複雑な構造を持ち、大量の情報を含んでいるため、グラフ上での機械学習は困難な作業です。こ...

...