顔検出アルゴリズムの顔検出アルゴリズム

主要

顔検出アルゴリズム

https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html

各基準紙をフェイス


ほとんどで知られているカラム:

https://zhuanlan.zhihu.com/p/25025596


まず、顔検出のために使用されるいくつかの一般的なデータベース:

FDDBとWIDER FACE

2845枚の画像FDDB、5171、顔非結合環境、顔の表情、二重あご、変化、摩耗、誇張されたヘアスタイルを点灯し、ブロックし、他の困難との顔より大きな困難の合計は、最も一般的なターゲット・データベースです。これは、次の特性があります。

  • 小画像解像度、すべての画像の長辺は、最小の面が色とグレースケール画像の二種類を含む、20 * 20を、示されるすべての画像未満450 * 450よりも言うことである、450にスケーリング。
  • 人々の数は顔/図1.8人の平均、通常以下の各画像に直面し、画像の大半は、人間の顔です。
  • データセットの完全な開示、公表された方法は、通常の論文、それらのほとんどのオープンソースおよび再現性、高い信頼性をすることができています。公開されていない方法がない書類がないコードは通常、彼らは完全にトレーニングセットから隔離されているかどうかを確認最高の懐疑的なことができませんでした比較できません。(文字を考慮する必要が関心の誘惑に抵抗することはできません。.. VJも高い再現率を訓練したり、トレーニングセットにいくつかのFDDBイメージを投げます)
  • 他にも分離されたデータは、近年では、少数FDDBイメージを与え、2され、再びFDDBテストを無制限トレーニングを設定し、FDDBの10倍相互検証、紙は、あなたがしたい場合の結果もそう再び無制限のトレーニングFDDBテストモード、ある提示され、比較の結果を提出するためのメソッドを公開し、そうしてください。世界ヒル先生はまた、典型的には1〜3%高い10倍の相互検証を言いました。
  • 結果離散と連続得点discROCスコアcontROC 2種類、discROCが唯一の懸念IOUが0.5以下である、contROCが大きく、より良いIOUです。我々は無限のトレーニングプラスFDDBテストモードを採用している考えると、検出器はdiscROCが、より重要なのは、ライン上のcontROCルック、あまりにも心配することはありませんので、それによって、contROCに影響を与え、ラベルスタイルトレーニングデータセットを継承します。

WIDER FACE:

寸法、姿勢、閉塞、表現、メイク、照明など:32203点の画像、393 703マークされた顔、そして難易度難易度の最大の、より包括的な多様性のWIDER FACEのAの合計。それは次の機能があります。

  • 画像の解像度は、一般的に高い、ワイド画像はすべて1024にスケールされている、面10 * 10をマークし、最小は、カラー画像です。
  • 通常、平均12.2面/図、非常に集中的な悪役面上の各画像用の顔データ。
  • トレーニングセット列車/バリデーションセットを割りヴァル40%/ 10%/ 50%、およびテストセット(グランドトゥルース)のマークされた結果を占め/テスト・セットのテストは、開いていない、公式の比較に結果を提出する必要がある、より公平、およびテストセットには、非常に信頼性の高い結果が非常に大きいです。
  • 簡単に、ミディアム、ハード:検出率が3例EdgeBox難しさのレベルに分かれています。


顔認識については、アルゴリズム、顔検出と顔認識アルゴリズムの2つの段階に分かれています。この記事では、一般的に彼らの将来の参照を容易にするために、近年で使用される導入された顔検出アルゴリズムをまとめました。

1.SSD

このブログ記事は、独自のプラクティスを実行するためにSSDのデータを紹介します

https://blog.csdn.net/wfei101/article/details/78821575

モデル構造とトレーニング方法:SSDのキーポイントは、2つのカテゴリに分類されています。含むモデル構造:マルチスケールネットワーク構造と前記図検出アンカーボックス世代;を含むトレーニング方法:グランドトゥルース前処理および機能の喪失。

下のマップ機能を使用し、上部の検査んがコアの一つは、記事の著者です。それは別の8×8や4×4 2つの特徴マップを前提としています。最初のコンセプトは、小さな正方形を指し、各特徴マップにおける特徴マップセル、特徴マップセル、及び64は、それぞれ、16セルを想定します。別の概念がある:デフォルトボックス、固定サイズのボックスの一連のことをいうが、各小細胞(セル)上の特徴マップを有し、図の点線の矩形以下、図4(図中、中間グリッドより近い外観を有します。格子)も小さなボックスです。各特徴マップはK細胞デフォルトボックスを持っていると仮定し、各Cデフォルト・ボックスのために予測する必要があり、4つのスコアカテゴリマップが特徴サイズである場合、次に、オフセットM×N-即ちあり、M * N-番目の機能はマップセルの合計に対する、次いで特徴マップ(C + 4)* K * M * N -番目の出力。これらの出力数の意味は:3の異なる数で、それぞれ二つの部分(実際のコードを含む層、場合コンボリューションカーネルの畳み込み特徴マップの数をチェックする3×3の畳み込み*は畳み込みをチェック3 )特徴マップ層を畳み込む:Cの数K MのN-信頼度が出力され、各カテゴリの確率で信頼デフォルトボックスを表し、数4。 K MNは、定位出力される各回帰デフォルトボックスの座標を表します)。:そこトレーニングの事もある前に、ボックスは、実際の選択されたデフォルトボックス(各機能マップセルkが取られているデフォルトの箱ではありません)を指します。デフォルトボックスがコンセプトであることを、以前のボックスは実際の選択です。ネットワークを訓練すると、各特徴マップに送信された完全な画像を得るために、トレーニングのための陽性サンプルは、前ボックスと最初に行うためのグランドトゥルースボックスの必要性の一致は、試合前のボックスには、ターゲットが含まれている説明成功しますが、完全なターゲットからグランドトゥルースの目的は、まだいくつかの距離をボックス、トレーニングの前のボックスを極力グランドトゥルースボックスに戻りながら、そのデフォルトのボックスの分類の信頼を確保することです。列子の場合:すべての特徴マップは、8732の合計で前のボックスを取得し、学習サンプルが2つのグランド真実ボックスを持っていると仮定します。それは、それぞれ前ボックスボックス一致にすることができ、これらの2つのグランドトゥルースと、それぞれ10及び20を有していてもよいです。ロス訓練は二つの部分の位置とリターンロス損失を含んでいます。

SSDアルゴリズムの欠点:利点は速度、GPU上でリアルタイムに、欠点は、集中的な小さな標的の比較的乏しい検出され、集中顔検出性能集約小さなターゲットを改善するために、小さなターゲット、研究の優先順位のような方法であるとされ、たまたまできるだけ早く、アプリケーション内のGPUリアルタイムアルゴリズムはまだ限られているとして、だけでなく、速度に必要。


2.S3FD

githubのコード:

https://github.com/sfzhang15/SFD

記事に関する質問アンカー顔検出率の悪役を分析して改善されています。

欠点アンカー法に基づきます:

アンカーベースの方法は、(スケール不変)不変を拡張できません。大きな物体を検出するための、ない小さなオブジェクトにグッド。

スケール不変性の理由はありません。

  • 不適切なネットワーク構造:後者は大きな一歩になるだろう、それは小さなオブジェクトの一部を無視します
  • アンカー右の質問:問題のアンカーデザインなので、いくつかの小さな顔になることは、そのアンカーが一致するのに十分ではないので、検出率を減らすことを。
  • アンカーサイズ事項:アンカーは、規模を縮小する(例えば、小規模conv3_3アンカーに添加)、大きく負のサンプルの数を増加させます。

改良:

  • アンカーのスケールをリセットします。そして著者は、ストライドがアンカーの間隔を決めると信じています。だから、等しい割合間隔の原則と呼ばれる各アンカー1/4スケールの作者の各ストライドの大きさを設定します。
  • いくつかの小さな物体が十分にマッチそのアンカーを持たせるためには、それが適切にしきい値を下げます。

より遅いです。


3.MTCNN


このアルゴリズムは、直接顔検出を実装し、それらに直面しています。構造は、次の3つのカスケードCNNです。

P-ない-RはO-Tではありません

顔検出は、主要なランドマークです

ステージ1:完全な畳み込みを使用してP-Netはネットワークであり、ウィンドウの境界線が回帰ベクトルを生成する(ボックス回帰ベクトルの境界)。候補ボックスを重ねマージこれらの候補ウィンドウ、非最大抑制の使用(NMS)を補正するために使用するボックスの回帰法をバウンディング。ネットワークと完全な畳み込みの高速化R-CNN RPN 同じ系統

ステージ2:窓の改良を使用してN-Netの。R-ネット、窓のほとんどのうち偽の拒絶、合わせバウンディングボックスの回帰NMSを継続して使用することにより、入力画面候補P-Netの。

ステージ3:最終出力フレームと顔特徴点の位置を用いて最終Oネット。第二のステップなど、その差は、5つの特徴点の位置が生成されます。


コード実装mtcnn顔検出部:(最終結果フレーム)

https://github.com/DuinoDu/mtcnn

コードはmtcnn Pythonのバージョンを実行していない:()

https://github.com/dlunion/mtcnn


发布了11 篇原创文章 · 获赞 14 · 访问量 5465

https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html

人脸识别各论文参考


知乎一个栏目:

https://zhuanlan.zhihu.com/p/25025596


首先介绍一下常用人脸检测的常用数据库:

FDDB和WIDER FACE

FDDB总共2845张图像,5171张,人脸非约束环境,人脸的难度较大,有面部表情,双下巴,光照变化,穿戴,夸张发型,遮挡等难点,是目标最常用的数据库。有以下特点:

  • 图像分辨率较小,所有图像的较长边缩放到450,也就是说所有图像都小于450*450,最小标注人脸20*20,包括彩色和灰度两类图像;
  • 每张图像的人脸数量偏少,平均1.8人脸/图,绝大多数图像都只有一人脸;
  • 数据集完全公开,published methods通常都有论文,大部分都开源代码且可以复现,可靠性高;unpublished methods没有论文没有代码,无法确认它们的训练集是否完全隔离,持怀疑态度最好,通常不做比较。(扔几张FDDB的图像到训练集,VJ也可以训练出很高的召回率。。需要考虑人品能不能抵挡住利益的诱惑)
  • 有其他隔离数据集无限制训练再FDDB测试,和FDDB十折交叉验证两种,鉴于FDDB图像数量较少,近几年论文提交结果也都是无限制训练再FDDB测试方式,所以,如果要和published methods提交结果比较,请照做。山世光老师也说十折交叉验证通常会高1~3%。
  • 结果有离散分数discROC和连续分数contROC两种,discROC仅关心IoU是不是大于0.5,contROC是IoU越大越好。鉴于大家都采用无限制训练加FDDB测试的方式,detector会继承训练数据集的标注风格,继而影响contROC,所以discROC比较重要,contROC看看就行了,不用太在意。

WIDER FACE:

WIDER FACE总共32203图像,393703标注人脸,目前难度最大,各种难点比较全面:尺度,姿态,遮挡,表情,化妆,光照等。有以下特点有:

  • 图像分辨率普遍偏高,所有图像的宽都缩放到1024,最小标注人脸10*10,都是彩色图像;
  • 每张图像的人脸数据偏多,平均12.2人脸/图,密集小人脸非常多;
  • 分训练集train/验证集val/测试集test,分别占40%/10%/50%,而且测试集的标注结果(ground truth)没有公开,需要提交结果给官方比较,更加公平公正,而且测试集非常大,结果可靠性极高;
  • 根据EdgeBox的检测率情况划分为三个难度等级:Easy, Medium, Hard。


有关人脸识别,主要分为两个步骤算法,人脸检测算法和人脸识别算法。本文总结介绍最近几年常用的人脸检测算法,方便自己以后参考。

1.SSD

这篇博文介绍了SSD跑自己数据的做法

https://blog.csdn.net/wfei101/article/details/78821575

SSD关键点分为两类:模型结构和训练方法。模型结构包括:多尺度特征图检测网络结构和anchor boxes生成;训练方法包括:ground truth预处理和损失函数。

文章的核心之一是作者同时采用lower和upper的feature map做检测。假定有8×8和4×4两种不同的feature map。第一个概念是feature map cell,feature map cell 是指feature map中每一个小格子,假设分别有64和16个cell。另外有一个概念:default box,是指在feature map的每个小格(cell)上都有一系列固定大小的box,如下图有4个(下图中的虚线框,仔细看格子的中间有比格子还小的一个box)。假设每个feature map cell有k个default box,那么对于每个default box都需要预测c个类别score和4个offset,那么如果一个feature map的大小是m×n,也就是有m*n个feature map cell,那么这个feature map就一共有(c+4)*k * m*n 个输出。这些输出个数的含义是:采用3×3的卷积核对该层的feature map卷积时卷积核的个数,包含两部分(实际code是分别用不同数量的3*3卷积核对该层feature map进行卷积):数量ckmn是confidence输出,表示每个default box的confidence,也就是类别的概率;数量4kmn是localization输出,表示每个default box回归后的坐标)。训练中还有一个东西:prior box,是指实际中选择的default box(每一个feature map cell 不是k个default box都取)。也就是说default box是一种概念,prior box则是实际的选取。训练中一张完整的图片送进网络获得各个feature map,对于正样本训练来说,需要先将prior box与ground truth box做匹配,匹配成功说明这个prior box所包含的是个目标,但离完整目标的ground truth box还有段距离,训练的目的是保证default box的分类confidence的同时将prior box尽可能回归到ground truth box。 举个列子:假设一个训练样本中有2个ground truth box,所有的feature map中获取的prior box一共有8732个。那个可能分别有10、20个prior box能分别与这2个ground truth box匹配上。训练的损失包含定位损失和回归损失两部分。

SSD算法的缺点:优势是速度快,在GPU上能实时,缺点是对密集小目标的检测比较差,而人脸刚好是密集小目标,这类方法的研究重点是提高密集小目标的检测性能,同时速度也需要尽可能快,GPU实时算法在应用中依然受限。


2.S3FD

github代码:

https://github.com/sfzhang15/SFD

这篇文章对anchor对小人脸检测率低的问题进行了分析和改进。

基于anchor方法的缺点:

Anchor-based方法没有scale-invariant(尺度不变性).对大物体检测的好,对小物体不行。

没有尺度不变性的原因:

  • 不适当的网络结构:后面的步长会变很大,会忽略掉一部分小的物体
  • anchor合适问题:因为anchor设计的问题,导致有些小脸没有足够多的anchor与其相匹配,故而降低了检测率。
  • anchor尺寸问题:若降低anchor的尺度(如在conv3_3加入小尺度的anchor),会大大增加负样本数量。

改进:

  • 作者重新设置了anchor的尺度。并且作者认为stride决定了anchor的间隔。所以设置每层stride的大小为每层anchor尺度的1/4.作者称其为equal-proportion interval principle。
  • 为了使某些小物体有足够多的anchor与其相匹配,所以适当降低了阈值。

速度比较慢。


3.MTCNN


该算法直接实现了人脸检测和人脸对其。其结构是是三个CNN级联:

​ P-net R-net O-net

​ 主要是人脸landmark检测

Stage 1:使用P-Net是一个全卷积网络,用来生成候选窗和边框回归向量(bounding box regression vectors)。使用Bounding box regression的方法来校正这些候选窗,使用非极大值抑制(NMS)合并重叠的候选框。全卷积网络和Faster R-CNN中的RPN一脉相承

Stage 2:使用N-Net改善候选窗。将通过P-Net的候选窗输入R-Net中,拒绝掉大部分false的窗口,继续使用Bounding box regression和NMS合并。

Stage 3:最后使用O-Net输出最终的人脸框和特征点位置。和第二步类似,但是不同的是生成5个特征点位置。


该代码实现了mtcnn人脸检测部分:(最终结果为画框)

https://github.com/DuinoDu/mtcnn

该代码实现了mtcnn python版本:(还没跑过)

https://github.com/dlunion/mtcnn


おすすめ

転載: blog.csdn.net/ssnszds/article/details/87919405