Closed matheuslevi11 closed 9 months ago
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.
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.
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.
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.
Swin Transformer: Ao entrar neste backbone, a imagem, de tamanho 112x112 é decomposta em patches de tamanho 2x2, resultando em 56x56 tokens com dimensão 48 ( Esta parte não entendi de onde vem este número ). Após isto, um embedding linear é aplicado para projetar os tokens para 96 dimensões. Então, os blocos de swin transformer são utilizados junto dos blocos de junção de patches, que diminuem o tamanho dos patches em 4 e duplica a dimensão.
Sub-rede de reconhecimento facial: Esta sub rede recebe apenas a representação mais global, FM4 e contém uma estrutura similar a ArcFace que utiliza um embedding para obter 512 dimensões de features.
Sub-redes de análise facial: As 42 tarefas de análise são divididas em 11 grupos, portanto, existem 11 sub-redes de análise, na tabela abaixo está a distribuição deste agrupamento. Nestas redes são utilizados os blocos de MLCA para que estas sub-redes possam escolher as features que serão utilizadas para resolver as tarefas.
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.
Multi-Level Feature Fusion: Para manter a escala dos mapas de features consistentes, FM1 e FM2 passam por um average pooling, então, 4 convoluções 3x3 independentes são aplicadas em todos os features maps para reduzir o número de canais proporcionalmente, depois todos os features maps são concatenados pela dimensão do canal, resultando em um feature map de 512 dimensões.
Channel Attention: O objetivo desta camada é gerar um vetor de atenção que representa o valor de atenção para cada um dos 512 canais resultantes do MLFF. Para isto, é utilizado um Convolutional Block Attention Module ( CBAM ) [59], que funciona da seguinte forma: primeiro, dois descritores são gerados ao aplicar Avg pooling e Max pooling na entrada. Logo após, os descritores passam por um MLP com uma camada oculta e seus resultados são somados elemento por elemento, por fim aplicando uma sigmoid para obter o vetor de atenção. O último passo consiste em multiplicar elemento por elemento o vetor de atenção pela entrada, para obter o mapa de features ponderado.
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.
Reconhecimento facial: Ao observar os resultados, consta-se que o SwinFace consegue superar os outros modelos em quase todos os testes, mesmo tendo bem menos parâmetros. Em particular, o SwinFace supera completamente o Swin-T na qual o seu backbone é originado, evidenciando a eficácia do aprendizado multi-tarefa.
Reconhecimento de Expressões: Aqui temos ótimos resultados, superando métodos do estado da arte, resultando em 90.97% de acurácia, e utilizando um método mais simples, e com menos parâmetros.
Estimativa de Idade: Mais uma vez, temos um melhor desempenho do SwinFace com relação aos outros modelos.
Estimativa de Atributos: A performance aqui é comparável com os modelos do estado da arte, levando em conta que são estimadas 40 atributos diferentes juntos, é possível afirmar que a capacidade de generalização do modelo é eficaz.
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.
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.
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.
[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.
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?
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, 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
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.