vitalwarley / research

3 stars 0 forks source link

Estudar "SwinFace: A Multi-task Transformer for Face Recognition, Expression Recognition, Age Estimation and Attribute Estimation" #43

Closed matheuslevi11 closed 9 months ago

matheuslevi11 commented 12 months ago

Estudar o artigo SwinFace para aprender mais sobre como reutilizar features faciais para diferentes problemas e entender mais de transformers no contexto de reconhecimento facial.

matheuslevi11 commented 10 months ago

Resumo

Neste artigo, os autores concebem a rede SwinFace, que consiste de um backbone de um Transformer, que alimenta 12 sub-redes que são responsáveis por resolver diversos problemas: reconhecimento facial, reconhecimento de expressão facial, estimação de idade e gênero e estimação de atributos ( 40 atributos diferentes ). Ao utilizar mecanismos de atenção e alguns outros conceitos para combinar features faciais, foi possível criar uma rede que é eficiente em seu aprendizado e atinge ótimos resultados, obtendo vários resultados melhores do que o estado da arte atual.

1. Introdução

Muitas das tasks faciais, como o reconhecimento de expressão facial ainda são desafiadoras, e um dos principais fatores é a falta de bases de treinamento grandes e diversas o suficiente. Neste sentido, faz sentido a tentativa de treinar um modelo não somente para uma tarefa facial, mas sim para várias, podendo se beneficiar de várias bases de treinamento diferentes e de features em comum. o SwinFace consiste em um backbone Swin Transformer junto a 12 sub-redes, sendo uma dedicada para o reconhecimento facial, e o resto dedicada a análise facial.

2. O papel do mecanismo de atenção e fusão de features

Naturalmente, ao enfrentar um problema de multi-tarefas, diferentes tarefas requerem diferentes features para serem resolvidas, e algumas vezes features podem mais atrapalhar do que ajudar. Um bom exemplo para ilustrar isto, é o caso das tarefas de reconhecimento facial e reconhecimento de expressão facial. Reconhecimento facial se trata de aprender a extrair informações que são expressão-independente e identificadoras de um indivíduo, já o reconhecimento de expressão é exatamente o contrário, já que o objetivo é **detectar expressões, independente do indivíduo. Portanto, como um modelo seria capaz de realizar estas duas tarefas ao mesmo tempo?

Para isto, os autores propõem a utilização de um módulo Multi-Level Channel Attention ( MLCA ), que consiste em um Multi-Level Feature Fusion ( MLFF ) para fundir as features e um Channel Attention ( CA ), o mecanismo de atenção. Desta forma, as features, tanto globais quanto locais, são fundidas e seu peso no resultado da tarefa é ponderado pelo mecanismo de atenção, permitindo que diferentes tarefas possam se utilizar de uma combinação de features única e específica para o problema.

3. Arquitetura da Rede

A imagem abaixo representa de forma geral a arquitetura da rede SwinFace. A arquitetura é composta por um backbone compartilhado de um Swin Transformer, que alimenta 11 Sub-redes de análise facial e uma Sub-rede de reconhecimento facial. O backbone provê quatro feature maps diferentes FM1-FM4, onde FM1 é o mapa das features mais locais e FM4 é o mapa das features mais globais.

image

image

4. Multi-Level Channel Attention ( MLCA )

Como mencionado no tópico 3, um bloco de MLCA consiste de dois componentes, o Multi-Level Feature Fusion (MLFF) e a Channel Attention (CA), onde o papel do MLFF é combinar mapas de features em diferentes níveis para obter informações locais e globais, para que então a CA enfatize as contribuições de cada uma destas features para a resolução do problema.

5. Treinamento

Primeiramente, o Swin Transformer é pré-treinado junto da sub-rede de reconhecimento facial para obter uma inicialização robusta de features faciais. Para as outras tarefas, os módulos pré-treinados são carregados e o restante das sub-redes são inicializadas aleatoriamente. Este treinamento dura 80 mil passos, sendo 8 mil de aquecimento.

6. Resultados

7. Discussão

Na tabela abaixo, temos uma comparação de resultados entre utilizar o SwinFace para apenas uma tarefa e utilizá-lo para múltiplas tarefas, onde é possível observar a eficácia do aprendizado multi-tarefas, que provavelmente se dá pela sinergia e correlações que existem entre as tarefas, e que melhoram o modelo de forma geral.

image

Outro ponto importante é que a inicialização em reconhecimento facial que é feita, compensa o fato de algumas tarefas não possuírem uma base de dados de larga escala para treinamento. Por fim, é interessante visualizar, via o mecanismo de atenção, quais mapas de features foram mais utilizados para cada tipo de tarefa. Na figura abaixo, podemos ver que em geral, o FM4, mapa de features mais globais é o mais importante, com uma exceção interessante de características mais gerais, que envolvem tarefas como atraente, borrado, muita maquiagem, etc. onde o FM3 é mais importante que o FM4, o que soa um pouco contra intuitivo dado a natureza das tarefas.

image

Conclusão

Os resultados alcançados pelos autores são impressionantes e o artigo é bem interessante no sentido de trazer a tona o potencial do multi-tasking em deep learning. É possível que este seja o caminho para o melhor entendimento das faces por parte dos modelos. Além disto, o modelo MLCA proposto é capaz de conciliar features diferentes e potencialmente conflitantes para resolver diferentes tarefas, o que pode ser aplicado em diversos contextos. Por fim, um outro ponto bem importante é a eficácia do pré-treino em reconhecimento facial, dado que é ele que faz com que o SwinFace funcione.

No futuro, é possível adicionar tarefas de localização facial, como estimativa da posição da cabeça, dentre outras. Os autores também citam a possibilidade de criar um processo de pseudo-labelling para um aprendizado semi-supervisionado que poderiam ajudar bastante a conseguir mais dados para tarefas que não possuem uma base de dados diversa o suficiente.

Referências citadas

[59] S. Woo, J. Park, J.-Y. Lee, and I. S. Kweon, “Cbam: Convolutional block attention module,” in Proceedings of the European conference on computer vision (ECCV), 2018, pp. 3–19.

vitalwarley commented 9 months ago

Reconhecimento facial se trata de aprender a extrair informações que são expressão-independente e identificadoras de um indivíduo, já o reconhecimento de expressão é exatamente o contrário, já que o objetivo é **detectar expressões, independente do indivíduo. Portanto, como um modelo seria capaz de realizar estas duas tarefas ao mesmo tempo?

Para isto, os autores propõem a utilização de um módulo Multi-Level Channel Attention ( MLCA ), que consiste em um Multi-Level Feature Fusion ( MLFF ) para fundir as features e um Channel Attention ( CA ), o mecanismo de atenção. Desta forma, as features, tanto globais quanto locais, são fundidas e seu peso no resultado da tarefa é ponderado pelo mecanismo de atenção, permitindo que diferentes tarefas possam se utilizar de uma combinação de features única e específica para o problema.

@matheuslevi11, você tem acesso ao código? Conseguiu reproduzir o treinamento? Uma ideia seria usar isso no contexto de reconhecimento de parentesco também, dado que, no contexto de fairness, podemos desejar reconhecer parentesco (extrair informações família-dependente) e reconhecer (e remover dos atributos) viéses que não dependem da família.

Por exemplo, na #50 temos duas tarefas: kinship verification e race classification. Talvez possamos adicionar outras duas: gender classification e kinship-type identification (pode substituir kinship verification no treinamento, enquanto que na inferência fazemos apenas kinship verification). Usaríamos o modelo pré-treinado em um esquema de ajuste fino, possivelmente. @tfvieira, o que pensa?

vitalwarley commented 9 months ago

Esse paper mostra como realizar várias tarefas simultaneamente. #50 mostra uma forma de remover um viés das features. E se pudéssemos remover todos os viéses? Restaria apenas informações de parentesco? Como isso impactaria os resultados?

matheuslevi11 commented 9 months ago

@matheuslevi11, você tem acesso ao código? Conseguiu reproduzir o treinamento? Uma ideia seria usar isso no contexto de reconhecimento de parentesco também, dado que, no contexto de fairness, podemos desejar reconhecer parentesco (extrair informações família-dependente) e reconhecer (e remover dos atributos) viéses que não dependem da família.

Ainda não busquei acesso ao código, mas pretendo, vou tentar buscar e reproduzir assim que possível