这两天测试了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://检测过程