モデルはわずか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になり、視野角を自由に変更でき、高精細な立体感が完璧に復元されます

ブログ    
ブログ    

推薦する

AlphaGo の最初のバグ: 囲碁アルゴリズムの最大の弱点は何でしょうか?

[[163852]]どれほど恐ろしいモンスターにも弱点はあります。なぜAlphaGoは皆を驚かせる...

OpenAIは、テキストを使用してユーザーの感情を検出できる教師なし感情ニューロンを「巧みに」発見した。

OpenAIは4月7日、公式サイトで最新の研究結果を発表し、感情表現を効率的に学習し、現在Amaz...

JavaScript でアルゴリズムの複雑さを学ぶ

この記事では、アルゴリズムの文脈における「二次」や「n log(n)」などの用語の意味について説明し...

OpenAI セキュリティシステムディレクターが長文記事を執筆: 大規模モデルに対する敵対的攻撃と防御

ChatGPTのリリースにより、大規模な言語モデルのアプリケーションが加速し、大規模に展開されていま...

...

AIに関する誤解

企業は意思決定を強化し、消費者体験を向上させるために、幅広いアプリケーションで人工知能を活用すること...

産業用IoTにおける機械学習の応用

産業用IoTにおける機械学習の応用産業用 IoT (IIoT) に機械学習を適用すると、企業の予測分...

5歳の子供がAIを圧倒、「遊ぶ」だけで十分か?

この能力がアルゴリズムによって習得された後、AlphaGo は人間のチェスの名人を破り、OpenAI...

...

人工知能は寒い冬を迎え、自動運転車の開発は妨げられている

懐疑論者は、完全な自動運転の実現は業界が考えているよりもずっと先のことかもしれないと述べている。 [...

...

クラウドプラットフォームにおける人工知能の応用は2020年に爆発的な成長を示すだろう

アクセンチュアのアナリストは、2020 年に企業がより多くのイノベーションを獲得するのはクラウド プ...

...

AIの急速な発展によってもたらされるエネルギー需要をどう解決するか?

生成 AI テクノロジーは、単純なフレーズを驚くほどリアルな画像に変換し、世界中の人々の想像力をかき...