POEM_SLPP人脸识别算法:提高22%识别率的解决方案

需积分: 9 1 下载量 57 浏览量 更新于2024-09-08 收藏 1.18MB PDF 举报
本篇论文研究主要聚焦于解决人脸识别领域中的一项关键挑战,即如何降低基于方向边缘幅值模式(Pattern of Oriented Edge Magnitudes,POEM)提取的人脸特征维度并减少计算复杂度。POEM是一种广泛应用在图像处理中的特征提取方法,但其高维特性可能导致识别性能受限。为了解决这个问题,研究人员提出了一个创新的融合方法,将POEM与有监督的局部保持投影(Supervised Locality Preserving Projections,POEM_SLPP)相结合。 POEM_SLPP算法的工作流程分为三个步骤。首先,通过POEM算子对人脸图像进行特征提取,这一阶段利用图像的方向边缘信息来捕捉人脸的关键特征。然而,原始的POEM特征往往包含大量冗余信息,这会增加后续处理的复杂性。 接着,为了降低特征维度,论文将高维的POEM特征数据映射到SLPP算法计算得到的低维样本空间。SLPP是一种降维技术,它不仅保持了数据的局部结构,还能保持类内数据之间的相似性,这对于人脸识别这种需要保持类内一致性的问题尤为重要。 最后,采用最近邻法对测试样本进行分类。这种方法简单直观,通过对测试样本与训练样本中最近的邻居进行比较,来进行识别。通过将POEM特征映射到SLPP空间并利用最近邻分类,可以有效地提升人脸识别的准确性。 实验结果显示,该POEM_SLPP算法在CAS-PEAL-R1人脸库上表现出色。在包括表情变化、背景干扰、饰品佩戴、拍摄时间和距离等多种测试条件下,相比于仅使用POEM LPP(POEM与局部保持投影的组合)和POEM PCA(POEM与主成分分析的组合),POEM_SLPP算法的平均识别率分别提升了22%和2%。这表明了该方法的有效性和适应性,特别是在面对实际场景中各种变异性时,能够提供更为稳定的识别性能。 总结来说,这篇论文提出了一种新颖的人脸识别算法,通过结合POEM和SLPP,成功地解决了高维特征和计算复杂度的问题,提升了人脸识别的准确性和鲁棒性。这对于实际应用中的大规模人脸识别系统具有重要意义。
2023-03-27 上传

0. Metadata/Provenance study.set_user_attr('pykeen_version', get_version()) study.set_user_attr('pykeen_git_hash', get_git_hash()) # 1. Dataset # FIXME difference between dataset class and string # FIXME how to handle if dataset or factories were set? Should have been # part of https://github.com/mali-git/POEM_develop/pull/483 study.set_user_attr('dataset', dataset) # 2. Model model: Type[Model] = get_model_cls(model) study.set_user_attr('model', normalize_string(model.__name__)) logger.info(f'Using model: {model}') # 3. Loss loss: Type[Loss] = model.loss_default if loss is None else get_loss_cls(loss) study.set_user_attr('loss', normalize_string(loss.__name__, suffix=_LOSS_SUFFIX)) logger.info(f'Using loss: {loss}') # 4. Regularizer regularizer: Type[Regularizer] = ( model.regularizer_default if regularizer is None else get_regularizer_cls(regularizer) ) study.set_user_attr('regularizer', regularizer.get_normalized_name()) logger.info(f'Using regularizer: {regularizer}') # 5. Optimizer optimizer: Type[Optimizer] = get_optimizer_cls(optimizer) study.set_user_attr('optimizer', normalize_string(optimizer.__name__)) logger.info(f'Using optimizer: {optimizer}') # 6. Training Loop training_loop: Type[TrainingLoop] = get_training_loop_cls(training_loop) study.set_user_attr('training_loop', training_loop.get_normalized_name()) logger.info(f'Using training loop: {training_loop}') if training_loop is SLCWATrainingLoop: negative_sampler: Optional[Type[NegativeSampler]] = get_negative_sampler_cls(negative_sampler) study.set_user_attr('negative_sampler', negative_sampler.get_normalized_name()) logger.info(f'Using negative sampler: {negative_sampler}') else: negative_sampler: Optional[Type[NegativeSampler]] = None # 7. Training stopper: Type[Stopper] = get_stopper_cls(stopper) if stopper is EarlyStopper and training_kwargs_ranges and 'epochs' in training_kwargs_ranges: raise ValueError('can not use early stopping while optimizing epochs') # 8. Evaluation evaluator: Type[Evaluator] = get_evaluator_cls(evaluator) study.set_user_attr('evaluator', evaluator.get_normalized_name()) logger.info(f'Using evaluator: {evaluator}') if metric is None: metric = 'adjusted_mean_rank' study.set_user_attr('metric', metric) logger.info(f'Attempting to {direction} {metric}')解释

2023-06-08 上传