RetinaFace: Detecção de Faces em Imagens de Alta Resolução

O RetinaFace é um modelo de detecção de faces de alta precisão, projetado para operar eficientemente em imagens de alta resolução sem a necessidade de redimensionamento prévio. Sua arquitetura emprega um processo de detecção hierárquico que permite a identificação robusta de faces pequenas.

Arquitetura e Funcionamento

O modelo utiliza uma rede neural baseada em uma pirâmide de características para processar múltiplas escalas. O backbone padrão é o ResNet-50, cujas ativações de camadas intermediárias alimentam a rede de detecção. O treinamento é conduzido no conjunto de dados Wider Face, com anotações de cinco pontos faciais (olhos, nariz e cantos da boca).

Uma entrada de imagem é pré-processada subtraindo-se os valores médios de RGB (104, 117, 123) da faixa de 0 a 255. A saída do modelo consiste em três tensores: localização (loc), confiança (conf) e pontos faciais (landmarks). A quantidade de anchors (caixas de referência) geradas, por exemplo 16800 para uma resolução específica, varia de acordo com o tamanho da imagem de entrada. Estas caixas de referência são pré-computadas com base nas dimensões da imagem, o que permite que o modelo se adapte a qualquer resolução.

Decodificação das Saídas

As coordenadas das caixas delimitadoras (bounding boxes) finais são calculadas ajustando-se os parâmetros de localização previstos (loc) em relação às caixas de referência (priors). A fórmula aplica um deslocammento para o centro e um fator de escala para as dimensões, modulados por variâncias definidas.

cx = prior_cx + loc_x * variancia_x * prior_w
cy = prior_cy + loc_y * variancia_y * prior_h
w = prior_w * exp(loc_w * variancia_w)
h = prior_h * exp(loc_h * variancia_h)
# Conversão de (cx, cy, w, h) para (x1, y1, x2, y2)
x1 = cx - w / 2
y1 = cy - h / 2
x2 = cx + w / 2
y2 = cy + h / 2

De maneira aáloga, os pontos faciais (landmarks) são mapeados adicionando-se deslocamentos previstos pelo modelo aos centros das caixas de referência correspondentes.

para cada par (lm_x, lm_y) na saída de 10 valores:
    ponto_x = prior_cx + lm_x * variancia_x * prior_w
    ponto_y = prior_cy + lm_y * variancia_y * prior_h

As detecções finais são filtradas com base no valor de confiança (conf).

Desempenho e Aplicações

O modelo atinge um mAP (média da precisão média) de 52.318 no benchmark Wider Face (a referência original utiliza um backbone ResNet-152). A integração do RetinaFace como etapa de pré-processamento em pipelines de reconhecimento facial, como no ArcFace, demonstrou aumentar a acurácia de autentciação de 98.37% para 99.49% ao fornecer faces alinhadas de forma consistente.

Utilização Prática

Para executar a detecção em uma imagem, pode-se utilizar o seguinte comando, que utiliza o backbone padrão (ResNet-50):

python3 detector_faces.py --imagem entrada.jpg --resultado saida.jpg

Para um processamento mais rápido, especialmente com imagens de alta resolução, é possível optar por um backbone mais leve como o MobileNet:

python3 detector_faces.py --imagem entrada.jpg --resultado saida.jpg --backbone mobile0.25

Tags: RetinaFace Detecção de Faces processamento de imagens Redes Neurais Visão Computacional

Publicado em 7-18 02:34