retinaface人脸检测在fddb数据集上的测试

这两天测试了retinaface在fddb数据集上的表现,记录一下。虽然说本文记录的retinaface的表现,但是适用于所有人脸检测算法,只需要将检测结果保留为fddb的格式就可以了。

第一步:检测结果保存

首先将retianface官方代码进行修改,按照fddb的需求将检测结果保存。因为mxnet框架的原因,在测试过程中一旦输入尺度变化,就会重新选择最优的CUDNN,这个问题我没有解决。为了保持输入图像尺度一直,fdbb的图像我统一设置为了450x450(450是FDDB数据集上图所有图像最长边),图像大小不满足的就通过copyMakeBorder补全。然后将检测结果保存下来。这里代码我就放一些关键点,其他的可以对照retianface的官网代码修改就行了。

def get_boxes(image_path,detector,modelname)://获取检测结果
    global imgid
    im = cv2.imread(image_path)
    im = cv2.copyMakeBorder(im, 0, 450 - im.shape[0], 0, 450 - im.shape[1], borderType=cv2.BORDER_CONSTANT)
    faces, landmarks = detector.detect(im, threshold=args.thresh)
    return faces
detector = RetinaFace(args.prefix, args.epoch, args.gpu, network=args.network)//网络初始化
with open(os.path.join(args.save_folder, modelname + '_dets.txt'), 'w') as fw://检测过程
                    for i, img_name in enumerate(test_dataset):
                        print(img_name)
                        image_path = os.path.join(testset_folder,img_name + '.jpg')
                        dets = get_boxes(image_path,detector,modelname)
                         fw.write('{:s}\n'.format(img_name))
                        if dets is None:
                           fw.write('{:.1f}\n'.format(0))
                           continue
                        fw.write('{:.1f}\n'.format(dets.shape[0]))
                        for k in range(dets.shape[0]):
                           xmin = dets[k, 0]
                           ymin = dets[k, 1]
                           xmax = dets[k, 2]
                           ymax = dets[k, 3]
                           score = dets[k, 4]
                           w = xmax - xmin + 1
                           h = ymax - ymin + 1
                           fw.write('{:d} {:d} {:d} {:d} {:.10f}\n'.format(int(xmin), int(ymin), int(w), int(h), score))

第二步:计算ROC并保存对应的文档

这里没有什么坑,直接下载fddb官方测试源码(source-code)就可以了

http://vis-www.cs.umass.edu/fddb/results.html

因为都是c/c++代码,我习惯用windows,所以直接建了一个vs工程,配置了opencv,就可以运行了。嗯,配置opencv的时候需要注意,官网代码对应的opencv版本比较早了,我使用的是opencv3,所有需要添加一些头文件,这个编译遇到问题直接查就能知道,非常简单。另外就是我运行的时候使用release程序崩了,使用debug可以正常运行。运行完保存了两个文档,分别是*ContROC.txt和*DiscROC.txt,长这样(如下图)

retinaface人脸检测在fddb数据集上的测试_第1张图片

第三部:计算AUC结果

下载Python源码,计算第二步ROC曲线的AUC。https://bitbucket.org/marcopede/face-eval

把txt放入对应的文件夹,就可以运行处结果了。没有坑。如下图,temp是我的结果。

retinaface人脸检测在fddb数据集上的测试_第2张图片

你可能感兴趣的:(retinaface人脸检测在fddb数据集上的测试)