第二次uccs人脸检测与识别挑战的基线实验与评估

challenge.uccs的Python项目详细描述


第二个uccs人脸检测和识别挑战
========================================


这个包实现了第二个版本的无约束人脸检测和开放集识别挑战的基线算法和评估。
这个包依赖于信号处理和机器学习库Bob_和Caffe_有关Bob_的安装说明和要求,请参阅Bob_网页和Caffe_网页。注意:
由于bob的限制,此软件包只能在linux和macos操作系统下运行。
尤其是在任何版本的microsoft windows下都无法运行,如果您在安装过程中遇到问题,我们建议您在虚拟环境中运行实验,例如,根据要求使用"Oracle的VirtualBox"
,我们将使用预装的此软件包生成虚拟映像。



数据集
----


此软件包不包含竞争对手的原始映像和协议文件。
请在"竞争网站"注册并从在那里。

请将所有zip文件**解压缩到同一目录**(该.zip文件包含相应的目录结构)。
这包括所有"training*.zip"和"validation*.zip"文件,以及``protocol.zip``和``sampledataset.zip``.
目录将被引用为下面的``your-data-directory`.



Bob_和Caffe戋,理想情况下是在同一Conda环境中。
否则,请将"pythonpath"变量指向安装Caffe戋的位置。
继续操作之前,请确保可以成功导入"Bob.measure"和"Caffe":

$Conda激活Bob戋py3
(Bob戋v3)$python
>;>import bob.measure
>;>import caffe



请运行以下命令行安装此包及其所有要求:

``buildout`


(和你的)算法。

您需要将"mtcnn v2"人脸检测程序的"model"目录放入这个包的基本目录中。
要运行人脸识别基线,您需要转到"vgg v2"网站,下载"vggface2"caffe model.tar.gz`,并提取"senet50"ft.caffemodel`,然后`` senet50 ft.prototxt ``进入同一个``model``目录。



检测验证(和测试)集中的人脸。
基线检测器使用"mtcnn v2"人脸检测模块,在该模块中,我们必须降低检测阈值,以便检测图像中的大多数人脸——仍然有大约20%的(最难)人脸无法检测到使用"mtcnn v2".
此外,有很多背景区域被错误地标记为面。

可能需要/需要使用/change:

`--data directory``:指定已将uccs数据集下载到的目录。

`--result file``:要将检测结果写入的文件;将采用所需格式。

``--which set``:应该运行基线检测器的集合;可能值:`` training,validation,test,sample`;默认值:``validation`.

``--verbose``:增加脚本的详细程度;建议使用``--verbose--verbose``或``-vv``;``-vvv``将写入更多信息。

`--debug`:只运行指定数量的映像;仅用于调试。

`--display`:显示检测到的边界框(绿色)和地面真实值(红色);仅用于调试。

`--parallel`:在给定数量的并行进程中运行;可以极大地加快处理速度。

`--gpus`:运行面在gpu模式下使用caffe进行检测(这可能不起作用,具体取决于caffe的设置);您可以指定要使用的设备ID,通常仅为"0";如果未指定,则在具有32个cpu核的计算机上以cpu模式运行。完整基线实验的一个好命令行是:

`./bin/baseline廑u detector.py——数据目录your-data-directory-vv——parallel 32``

完整基线实验的一个好命令行是:

`./bin/baseline戋detector.py——data directory your-data-directory-vv——parallel 8——gpus 0 1`

一个好的命令行可能是:

``./bin/baseline戋detector.py--数据目录your-data-directory-vvv--display--调试20``

…注意:
`--display``选项要求正确安装和设置matplotlib。
display不在并行模式下工作。

人脸检测评分文件将写入`./results/uccs-v2-detection-baseline-validation.txt`。


人脸识别
~~~~~~~~~~~~~~~~~~

对于人脸识别,我们使用"mtcnn v2"人脸检测器检测所有人脸(见上文),并确保边界框使用与地面真值最大重叠的标签。
对于训练集中每个检测到的边界框,我们以1.3的因子放大边界框,并使用"vgg v2"识别模块的"pool5/7x7"s1"层提取特征,我们将其标准化为单位欧几里德长度。
模板注册阶段简单地计算每个已知主题的训练集特征的平均值。
以解释我们在训练和测试集中有未知主题的事实,我们还注册了一个库模板,其中包括标记为"1"的所有已知未知对象。

我们运行"mtcnn v2"检测器来检测人脸(包括多个背景区域)。
对于每个边界框,我们提取如上所述的"vgg v2"功能,并计算与所有库模板(包括未知模板)的**余弦相似度**。
最高的10个相似度存储在分数文件中,除非未知标签(``-1``)是最高的分数之一,在这种情况下,只存储`-1``标签的分数。
这意味着,当最高分数是`-1``标签时,分数文件中只存储一个值。

使用/更改:

`--data directory``:指定将UCCS数据集下载到

`--result file``:要将识别结果写入的文件;这将采用所需格式

`--verbose`:增加脚本的详细程度;使用'-动词建议使用ose--verbose``或`-vv`;``-vvv``将写入更多信息

``--temp dir`:指定存储临时文件的目录;这些文件只计算一次,如果存在,则重新加载:忽略现有的临时文件,并始终重新计算所有内容:仅在指定数量的标识上运行;仅用于调试目的;将修改临时文件和结果文件的文件名

`--parallel`:在给定数量的并行进程中运行;可以极大地加快在32个CPU核的计算机上的处理速度,一个好的命令行应该是:

`./bin/baseline戋u recognizer.py--数据目录your-data-directory-vv--parallel 32``

-vv--parallel 2--gpus 0 1``

不是测试集(因为测试集标签没有给参与者)。
您可以将评估脚本用于两个目的:

1。将基线结果与您的结果进行比较。
2.为了确保您的分数文件采用所需的格式。

如果您无法在计算机上运行基线实验,我们将在"竞赛网站"上为验证集提供分数文件。




地面真值通常大于面,我们不惩罚小于地面真值的边界框。
因此,并集(分母)只考虑地面真值边界框的四分之一或交叉区域,以较大者为准:

数学:
o(g,d)=\frac{{{{{{{{{{{{{{{{{g\capd}{{{{{{{{{{{{{{{{{{{{}}{{{{{{}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{br/>因此,当检测到的边界框:math:`d'至少覆盖地面真值边界框的四分之一时:math:`g'和完全包含在:数学:`g`,达到1的重叠。

它将正确检测到的面占假警报总数(检测到的背景区域)的百分比绘制出来。
对于不同的检测器置信值,可以在FROC曲线上获得不同的点。
可以使用:

``/bin/evaluate-detector.py`

此脚本有几个选项,其中一些需要指定,请参见``./bin/evaluate-detector.py-h``:

`--data directory``:指定目录,将uccs数据集下载到

``--结果文件``:包含检测(或识别)结果的所有文件的列表

``--标签``:算法的标签列表;必须与`--result files``

`--froc file``:包含froc绘图的输出.pdf文件的名称,顺序相同;默认值为``uccs-v2-froc.pdf`

``--log-x``:将以对数比例绘制水平轴

``--only present```:将忽略不存在检测的任何文件(仅用于调试目的,即,使用`--debug``选项运行检测器时

`--verbose``:增加脚本的详细程度;建议使用`--verbose--verbose``或`-vv``绘制FROC曲线基线(显示在"竞赛网站"上)。执行:

``./bin/evaluate-detector.py——数据目录your-data-directory——结果文件results/uccs-v2-detection-baseline-validation.txt——标签基线——log-x-vv``
<…注意:
如果您运行了人脸识别基线,还可以使用人脸识别结果文件绘制FROC曲线:

``./bin/evaluate_detector.py—数据目录Your-data-directory—结果文件results/uccs-v2-recognition-baseline-validation.txt—标签基线—log-x-vv``


评估
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


使用检测和识别率(dir)曲线评估开放集人脸识别,它绘制了正确检测和识别的人脸占错误识别总数的百分比。
基于错误识别的各种值,计算多个分数阈值。
如果识别分数大于阈值,并且正确的身份具有该人脸的最高识别分数,则称为正确识别人脸。
计算正确识别的人脸数,并除以已知面的总数。
有关详细信息,请参阅[1]。

。注意:
默认情况下,只执行等级1识别,但可以使用最多10个等级(每个人脸允许的标签的上限)进行评估。
为每个人脸提供多个标识标签将增加错误警报的数量,并且可能只会对较高的级别产生影响排名评估。

…注意:
将忽略标记为-1或根本没有标记的未知标识或背景区域(即,不会降低性能)。
使用-1以外的任何标签标记未知标识或背景区域将导致错误警报--仅考虑每个边框的最大分数。

``/bin/evaluate_recognizer.py`

与往常一样,脚本有几个选项,与上面的```/bin/evaluate_detector.py``类似,请参见``./bin/evaluate_recognizer.py-h``有关完整列表:

``--数据目录``:指定目录,将uccs数据集下载到

`--result files`:包含识别结果的所有文件的列表

`--labels``:算法的标签列表;必须与`--result files`

`--dir file`:名称包含dir plot的输出.pdf文件;默认为``uccs-v2-dir.pdf``

``--log-x``:将以对数比例绘制水平轴

``--only present```:将忽略不存在检测的任何文件(仅用于调试目的,即,当识别器使用`--debug``选项运行时

``--verbose``:增加脚本的详细程度;建议使用`--verbose--verbose``或`-vv``来绘制dir曲线:使用给定的秩来绘制dir曲线



执行:

``./bin/evaluate_recognizer.py——数据目录your-data-directory——结果文件results/uccs-v2-recognition-baseline-validation.txt——标签基线——log-x-vv``



——故障排除
——

算法或评估,请通过电子邮件联系我们:opensetface@vast.uccs.edu



。_鲍勃:http://www.idiap.ch/software/bob
。_甲骨文的virtualbox:https://www.virtualbox.org
。_ matplotlib:http://matplotlib.org
。_构建:http://www.buildout.org
_竞赛网站:http://vast.uccs.edu/opensetface
。_ caffe:http://caffe.berkeleyvision.org/installation.html
。_ mtcnn v2:https://github.com/walkoncross/mtcnn caffe zyf
。_ vgg v2:http://www.robots.ox.ac.uk/~vgg/data/vgg_face2

[1]**P.Jonathon Phillips、Patrick Grother和Ross Micheals**《人脸识别手册》2011年第二版中的"人脸识别评估方法"。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中ArrayList的超简单问题   Java 8在一段时间后过期   java如何创建具有用户定义维度的矩阵,并使用从上到下、从左到右的递增值填充它?   java从JDBC重启mysql   带有sqlite的java LiveData未更新UI   带有JDialog的java小程序在Mac OSX中未正确隐藏   java ActionListener无法从公共类引用数组?   java Apache Digester:NoSuchMethodException:没有这样的可访问方法   安卓中数据库中的java数据没有以正确的格式检索   java快速排序实现:使用random pivot时几乎排序   安卓 Java:高效的ArrayList过滤?   java如何在单独的文件中制作GUI程序   jasper报告如何从JSP或Java代码在JasperReport中传递参数值?