Detecção de cores de carros usando redes neurais e TensorFlow



Olá, meu nome é Roman Lapin, sou aluno do segundo ano do corpo docente da Escola Superior de Física Geral e Aplicada da UNN. Este ano, consegui concluir a seleção e participar do trabalho da Intel Summer School em Nizhny Novgorod. Minha tarefa era determinar a cor do carro usando a biblioteca Tensorflow, na qual trabalhei com meu mentor e engenheiro da equipe de ICV Alexei Sidnev.
E é isso que eu tenho.

Existem vários aspectos para esta tarefa:

  1. O carro pode ser pintado em várias cores, como no KDPV. E em um dos conjuntos de dados, por exemplo, tínhamos um carro camuflado.
  2. Dependendo da iluminação e da câmera que tira fotos do que está acontecendo na estrada, os carros da mesma cor terão uma aparência muito diferente. Os carros "iluminados" podem ter uma parte muito pequena correspondente à cor "verdadeira" do carro.

Detecção de cor do carro


A cor do carro é uma substância bastante estranha. O fabricante tem uma compreensão clara da cor do carro que produz, por exemplo: fantasma, gelo, pérola negra, plutão, limão, criptônio, angkor, cornalina, platina, blues. A polícia de trânsito tem uma opinião sobre as cores dos carros, bastante conservadoras e muito limitadas. Cada pessoa tem uma percepção subjetiva da cor (você pode se lembrar da história popular sobre a cor do vestido). Assim, decidimos marcar da seguinte maneira.

Em cada imagem, as coordenadas dos vértices dos retângulos adjacentes ao redor dos carros foram marcadas (daqui em diante vou usar a versão em inglês - caixa delimitadora do carro ) e dentro delas estão as áreas que melhor descrevem a cor dos veículos ( caixa de cores ). O número deste último é igual à cor do carro ( n x caixa de cores - n-color car).

Daqui em diante, os números dos carros são borrados pela possibilidade de publicar fotos em domínio público.

imagem

Conjunto de dados de marcação de carros

No futuro, trabalhamos com dois espaços de cores - RGB e LAB - com as classes 8 e 810/81, respectivamente. Para comparar os resultados de diferentes abordagens, usamos 8 classes em RGB para determinar a cor, que é obtida dividindo o cubo BGR em 8 cubos pequenos iguais. Eles podem ser facilmente chamados de nomes comuns: branco, preto, vermelho, verde, azul, rosa, amarelo, ciano. Para avaliar o erro de qualquer método, já usamos o espaço de cores LAB, no qual a distância entre as cores é determinada.

Existem duas maneiras intuitivas de determinar cor por caixa de cor : cor média ou mediana. Mas na caixa de cores existem pixels de várias cores, então eu queria saber com que precisão cada uma dessas duas abordagens funciona.

Para 8 cores RGB para cada caixa de cores de cada máquina no conjunto de dados, determinamos a cor e a mediana médias dos pixels, os resultados são mostrados nas figuras abaixo. As cores "verdadeiras" são marcadas nas linhas - ou seja, as cores definidas respectivamente como média ou mediana, nas colunas - cores que são encontradas em princípio. Ao adicionar uma máquina à tabela, o número de pixels de cada cor era normalizado para o seu número, ou seja, a soma de todos os valores adicionados à linha era igual a um.

imagem

Investigação da precisão de determinar a cor de uma máquina como a cor média dos pixels coloridos 'abox. Precisão média: 75%

imagem

Investigação da precisão da determinação da cor da máquina como a cor mediana dos pixels da caixa de cores. Precisão média: 76%

Como você pode ver, não há uma diferença específica entre os métodos, o que indica uma boa marcação. No futuro, usamos a mediana, porque apresentou o melhor resultado.
A cor do carro será determinada com base na área dentro da caixa delimitadora do carro .

Você precisa de redes?


A questão é inevitável: as redes neurais são realmente necessárias para resolver uma tarefa intuitivamente simples? Talvez você possa pegar a cor mediana ou média dos pixels em uma caixa delimitadora de carro da mesma maneira? As figuras abaixo mostram o resultado dessa abordagem. Como será mostrado mais adiante, é pior que o método que utiliza redes neurais.

imagem

A distribuição da parcela de carros com o valor de erro L2 no espaço LAB entre a cor da caixa de cores definida como a média e a cor da caixa delimitadora do carro do valor desse erro

imagem

Distribuição da parcela de carros com o valor de erro L2 no espaço LAB entre a caixa de cores definida como a mediana e a cor da caixa delimitadora do carro a partir do valor desse erro

Descrição da abordagem da tarefa


Em nosso trabalho, usamos a arquitetura Resnet-10 para destacar recursos. Para resolver um problema de etiqueta e multilabel, foram escolhidas as funções de ativação de softmax e sigmoid, respectivamente.
Uma questão importante foi a escolha da métrica pela qual poderíamos comparar nossos resultados. No caso de tarefas de um rótulo, você pode selecionar a classe que corresponde à resposta máxima . No entanto, essa solução obviamente não funcionará no caso de máquinas com várias etiquetas / várias cores, já que o argmax produz uma cor, provavelmente. A métrica L1 depende do número de classes, portanto, também não pôde ser usada para comparar todos os resultados. Portanto, decidiu-se permanecer na métrica da área sob a curva ROC (ROC AUC - área sob curva) como universal e universalmente reconhecida.

Trabalhamos em dois espaços de cores. O primeiro é o RGB padrão, no qual escolhemos 8 classes: dividimos o cubo RGB em 8 subcubos idênticos: branco, preto, vermelho, verde, azul, rosa, amarelo, ciano. Essa partição é muito grosseira, mas simples.

imagem

Divida o espaço de cores RGB em 8 áreas

Além disso, realizamos estudos com o espaço de cores LAB, que utilizou a partição em 810 classes. Por que tanto? O LAB foi introduzido depois que o cientista americano David MacAdam estabeleceu que existem áreas de cores que não são visíveis ao olho humano ( elipses de MacAdam ). O LAB foi construído de modo que essas elipses tivessem a aparência de círculos (na seção de L - brilho constante).

imagem

Elipses do MacAdam e espaço de cores do LAB ( origem )

No total, existem 81 círculos na seção de círculos, demos o passo 10 em relação ao parâmetro L (de 0 a 100), obtendo 810 classes. Além disso, realizamos um experimento com uma classe L constante e, correspondentemente, 81.

RGB e LAB


Os seguintes resultados foram obtidos para o problema de 8 classes e o espaço RGB:
Função de ativaçãoTarefa de vários rótulosROC AUC
softmax-0,97
sigmóide0,88
Tabela de resultados de reconhecimento de cores para máquinas com um problema de 8 classes

Parece que o resultado da tarefa multilabel já é bastante bom. Para verificar essa suposição, construímos uma matriz de erros, assumindo 0,55 como o valor limite da probabilidade. I.e. se esse valor for excedido em probabilidade para a cor correspondente, assumimos que a máquina é pintada nessa cor. Apesar do fato de o limiar ser escolhido baixo o suficiente, podem ser vistos erros típicos na determinação da cor do carro e tirar conclusões.

imagem

Tabela de resultados de reconhecimento de cores para carros no problema da 8ª classe

Basta olhar para as linhas correspondentes às cores verde ou rosa para garantir que o modelo esteja longe de ser perfeito. Voltaremos à questão de por que, com um grande valor métrico, um resultado tão estranho e malsucedido, retornaremos imediatamente e indicamos imediatamente: ao considerar apenas 8 classes, um grande número de cores cai nas classes "branca" e "preta", portanto, esse resultado .

Portanto, passaremos para o espaço de cores do LAB e realizaremos pesquisas no local.
Função de ativaçãoTarefa de vários rótulosROC AUC
softmax-0,915
sigmóide0.846
Tabela de resultados do reconhecimento de cores da máquina no problema da classe 810

O resultado é menor, o que é lógico, pois o número de classes aumentou em duas ordens de magnitude. Tomando o resultado sigmóide como ponto de partida, tentamos melhorar nosso modelo.

LAB: experimentos com pesos diferentes


Antes disso, todas as experiências foram realizadas com pesos unitários na função de perda ( perda ):

imagem


Aqui o GT é a verdade do solo, W é o peso.

Você pode inserir uma distância no espaço de cores do LAB. Digamos que temos uma unidade no GT. Em seguida, corresponde a um paralelepípedo retangular no espaço de cores do LAB. Esse paralelepípedo (mais precisamente, seu centro) é removido a uma distância diferente de todos os outros paralelepípedos (novamente, seus centros). Dependendo dessa distância, você pode experimentar as seguintes escalas:

a) Zero no lugar de uma unidade no GT, e ao afastar-se dela - um aumento nos pesos;

imagem


b) Inversamente, no lugar de uma unidade no GT, é uma: quando removida, é uma queda nos pesos;

imagem


c) Opção a) mais um pequeno aditivo gaussiano com amplitude de ½ no lugar de uma unidade em GT;

imagem


d) Opção a) mais um pequeno aditivo gaussiano com amplitude de 1 no lugar de uma unidade em GT;

imagem


e) Opção b) com um pequeno aditivo à distância máxima da unidade no GT.

imagem


A última versão das escalas com as quais conduzimos experimentos é, como a chamamos, Gauss tripla, ou seja, três distribuições normais com centros no lugar de unidades no GT, bem como à maior distância delas.

imagem

Três distribuições normais centradas nas unidades do GT e à maior distância delas

Isso terá que ser explicado com mais detalhes. Você pode selecionar os dois paralelepípedos mais distantes e, portanto, as classes e compará-los em distância do original. Para a classe correspondente à mais distante, a amplitude de distribuição é definida como 0,8 e para a segunda é m vezes menor, onde m é a razão da distância da fonte até a remota distante e a distância entre a fonte e o próximo.

Os resultados são mostrados na tabela. Devido ao fato de que nas escalas da opção a) havia peso zero - apenas para unidades no GT, o resultado nelas foi ainda pior do que o ponto de partida, pois a rede não levou em consideração definições de cores bem-sucedidas, aprendendo pior. As variantes dos pesos b) e e) praticamente coincidiram, portanto o resultado nelas coincidiu. O maior aumento em pontos percentuais em comparação com o resultado inicial foi demonstrado pela variante dos pesos f) - gauss triplos.
Função de ativaçãoNúmero de aulasTipo de pesosROC AUC
sigmóide810a)0.844
b) e)0.848
c)0,888
d)0.879
f)0,909
Resultados de reconhecimento de cores de máquinas no problema da classe 810 com diferentes opções de peso

LAB: experimentando novos rótulos


Por isso, realizamos experimentos com diferentes pesos em perdas . Decidimos tentar deixar os pesos como um e alterar os rótulos, que são transferidos para a função de perda e usados ​​para otimizar a rede. Se antes disso os rótulos coincidiam com o GT, agora eles decidiram usar novamente as distribuições gaussianas com centros no local das unidades no GT:

A motivação para esta decisão é a seguinte. O fato é que, com rótulos comuns, todos os carros nos conjuntos de dados se enquadram em um número fixo de classes, inferior a 810, para que a rede aprenda a determinar a cor dos carros apenas dessas classes. Com novos rótulos, valores diferentes de zero se enquadram em todas as classes e podemos esperar um aumento na precisão da determinação da cor do carro. Experimentamos dois sigma (desvios padrão) para as distribuições gaussianas acima: 41.9 e 20.9. Porque assim? O primeiro sigma é escolhido da seguinte forma: a distância mínima entre as classes (28) é obtida e o sigma é determinado a partir da condição de que a distribuição diminua duas vezes na classe adjacente ao GT'noye. E o segundo sigma é apenas duas vezes menor que o primeiro.

imagem

Distribuição de carros de conjunto de dados de treinamento por classes com diferentes rótulos em perda

De fato, foi possível melhorar ainda mais o resultado usando esse truque, conforme mostrado na tabela. Como resultado, a precisão da determinação atingiu 0,955!
Função de ativaçãoNúmero de aulasTipo de etiquetaTipo de pesosROC AUC
sigmóide810habitualuns0.846
habitualtrês gauss0,909
novo, 1três gauss0,955
novo, σ 20,946
Resultados de reconhecimento de cores para máquinas do problema da classe 810: com etiquetas comuns e pesos unitários, com etiquetas comuns e pesos na forma de Gauss triplo, com novas etiquetas e pesos unitários

LAB: 81


Se falamos de experimentos malsucedidos, devemos mencionar a tentativa de treinar uma rede com 81 classes e um parâmetro constante L. Percebemos durante experimentos anteriores que o brilho é determinado pela rede com bastante precisão, e decidimos treinar apenas os parâmetros aeb ( chamadas as outras duas coordenadas no LAB). Infelizmente, apesar do fato de a rede ter sido capaz de treinar perfeitamente no avião, mostrando um valor maior em termos de métrica, a idéia de definir o parâmetro L na saída da rede como média para a caixa delimitadora do carro caiu e a cor real e assim definida foram muito diferentes.

Comparação com a solução de um problema sem o uso de redes neurais


Agora vamos voltar ao início e comparar o que aconteceu conosco com o reconhecimento da cor do carro sem o uso de redes neurais.
Os resultados são mostrados nas figuras abaixo. Pode-se observar que o pico se tornou três vezes mais e o número de carros com um grande erro entre a verdadeira e uma determinada cor diminuiu significativamente.

imagem

A distribuição da parcela de carros com o valor de erro L2 no espaço LAB entre a caixa delimitadora da cor definida como a mediana e a cor da caixa delimitadora do carro do valor desse erro

imagem

Distribuição da parcela de carros com o valor de erro L2 no espaço LAB entre a cor na saída da rede neural e a cor da caixa delimitadora do carro do valor desse erro

Exemplos


A seguir, exemplos de reconhecimento de cores de automóveis. A primeira é que a máquina preta (um caso típico) é reconhecida como preta, e a distância no espaço LAB entre a cor verdadeira e a específica (18,16) é menor que a distância mínima entre as classes (28). Na segunda figura, a rede conseguiu não apenas determinar que o carro estava iluminado (existe uma alta probabilidade de corresponder a uma das classes de cores brancas), mas também sua cor real (prata). No entanto, a máquina da figura a seguir, também iluminada, não foi detectada pela rede como vermelha. A rede não conseguiu determinar a cor do carro mostrada na figura abaixo, que decorre do fato de que as probabilidades para todas as cores são muito pequenas.

De muitas maneiras, a tarefa foi devido à necessidade de reconhecer carros multicoloridos. A última figura mostra um carro preto e amarelo em dois tons. A rede provavelmente reconheceu a cor preta, provavelmente devido à predominância de máquinas desta e de cores semelhantes no conjunto de dados de treinamento, e a cor amarela, que é quase verdadeira, entrou no top 3.
imagemimagem
imagemimagem
imagemimagem
imagemimagem
imagemimagem

Curva ROC: visualização e problemas


Portanto, na saída, obtivemos um resultado métrico bastante alto. A figura a seguir mostra curvas ROC para resolver um problema com 8 classes e para um problema com 810 classes, bem como soluções sem o uso de redes neurais. Pode-se ver que o resultado é um pouco diferente do que foi escrito anteriormente. Os resultados anteriores foram obtidos usando o TensorFlow, os gráficos abaixo foram obtidos usando o pacote scikit-learn.
imagem
imagem
Curva ROC para várias opções para resolver o problema. À direita está o canto superior esquerdo do gráfico esquerdo

Você pode usar números fixos como valores limite (por exemplo, Tensorflow, quando define o parâmetro correspondente como 50, leva o mesmo número de limites de 0 a 1 em intervalos iguais), pode usar os valores na saída da rede ou pode limitá-los de baixo para não considerar valores da ordem de 10 -4 , por exemplo. O resultado dessa última abordagem é mostrado na figura a seguir.

imagem

Curva ROC para várias opções para resolver o problema com um limite de 10 -4

Pode-se observar que todas as curvas correspondentes à solução do problema usando redes neurais são caracteristicamente melhores (maiores) que a solução para o problema sem elas, mas você não pode escolher a definitivamente melhor entre as primeiras. Dependendo do limite escolhido pelo usuário, diferentes curvas corresponderão a diferentes soluções ótimas para o problema. Portanto, por um lado, encontramos uma abordagem que nos permite determinar com precisão a cor da máquina e mostra uma métrica alta, por outro lado, mostramos que o limite ainda não foi atingido e a métrica da área sob a curva ROC tem suas desvantagens.

Pronto para responder a perguntas e ouvir comentários nos comentários.

Source: https://habr.com/ru/post/pt422689/


All Articles