業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
プロセスの全体像前処理・特徴量生成Fine Tuning手法まとめ機械学習モデルの選び方モデル評価手法プロトタイピング探索的分析(EDA)
ドミナントカラー検出セグメンテーション技術の基礎と実装局所特徴量抽出Grad-CAMまとめ画像の二値化とその手法モルフォロジー演算とその手法【Vision AI】Painterの紹介pix2structの紹介
AI

執筆者:Handbook編集部

RetinaFaceによる顔検出の方法

はじめに

本記事は、Retinafaceを用いた、顔検出の手法について解説します。 顔検出とは、写真またはビデオ内の顔を検出する (他のオブジェクトと区別する) タスクです。

Papers with Codeの顔検出をみると、顔検出の手法は様々あります。

今回は、もっとも実装された論文である"RetinaFace: Single-stage Dense Face Localisation in the Wild"を使うことにします。
本モデルの実装ライブラリはいくつかありますが、pytorch実装で、かつpipで簡単にインストールできるRetinaFaceを使用しました。

動作環境

実行環境はGoogle Colaboratryを使用します。

RetinaFaceによる顔検出

まずは、retinaface_pytorchをインストールします。

! pip install -U retinaface_pytorch

次に、モデルのダウンロードをします。

import cv2
from matplotlib import pyplot as plt
from retinaface.pre_trained_models import get_model
from retinaface.utils import vis_annotations

model = get_model("resnet50_2020-07-20", max_size=2048)
model.eval()

最後に、顔検出を行います。検出された顔ごとにBounding boxの座標('bbox')、推論確率のスコア('score')、特徴点の座標('landmarks')が出力されます。ここでは、検出した顔のbounding boxを描画してみます。

os.chdir(src_img_fold)
def draw_res(image,results):
    for r in results:
        bbox = r['bbox']
        if not bbox:continue
        cv2.rectangle(image,(int(bbox[0]),int(bbox[1])),(int(bbox[2]),int(bbox[3])),(0,0,255),thickness=10)
    return image


for i, file in enumerate(src_files):
  print(file)
  path = file
  image = cv2.imread(path)
  image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  results = model.predict_jsons(image)

  image_out = draw_res(image,results)
  dst_file = "{dir}/{index:04d}.jpg".format(dir=dst_img_fold,index=i)
  cv2.imwrite(dst_file,image_out)

まとめ

本記事では、Retinafaceを用いた、顔検出の手法について解説しました。

参照

2025年06月12日に最終更新
読み込み中...