Como contamos pessoas que usam visão computacional

imagem
Fotos de fontes abertas

Reuniões em massa de pessoas criam problemas em vários campos (varejo, serviços públicos , bancos, desenvolvedores). Os clientes precisam combinar e monitorar informações sobre o número de pessoas em muitos lugares: em escritórios de serviço, prédios administrativos, canteiros de obras, etc.

As tarefas de contar pessoas têm soluções prontas, por exemplo, o uso de câmeras com análises integradas. No entanto, em muitos casos, é importante usar um grande número de câmeras instaladas anteriormente em diferentes departamentos. Além disso, uma solução que leve em consideração as especificidades de um cliente em particular será melhor para ele.

Nossos nomes são Tatyana Voronova e Elvira Dyaminova, estamos envolvidos na análise de dados no Center 2M. Embora o tópico pareça ser o mais simples do que está sendo considerado atualmente nos problemas de visão computacional, mesmo nesse problema, quando se trata de prática (implementação), muitas subtarefas complexas e não triviais precisam ser resolvidas. O objetivo do nosso artigo é mostrar a complexidade e as abordagens básicas dos problemas de visão computacional, usando o exemplo de solução de um dos problemas básicos. Para os seguintes materiais, queremos atrair colegas: devops, engenheiro, gerentes de projeto em análise de vídeo, para que falem sobre os recursos de computação envolvidos, medições de velocidade, as nuances da comunicação com os clientes e histórias de implementação de projetos. Vamos nos concentrar em alguns dos métodos de análise de dados usados.

Vamos começar com a seguinte declaração: você precisa exibir o número de pessoas na fila no escritório de serviço. Se a fila, de acordo com as regras internas da empresa cliente, for considerada crítica, o cenário interno começará a ser elaborado:
  • notificação da necessidade de abrir uma entrada / caixa adicional;
  • chamada do gerente;
  • informando sobre a necessidade de redirecionar fluxos de pessoas para outros balcões (mais gratuitos).

Assim, nosso trabalho economizará muitos nervos aos clientes.

Modelos de aprendizado de máquina usados


Detecção de silhuetas de pessoas


Inicialmente, decidimos usar um modelo já treinado para detectar pessoas (silhuetas), uma vez que tais tarefas têm soluções bastante boas, por exemplo, a definição de silhuetas .

Portanto, na biblioteca TensorFlow, há um grande número de modelos pré-treinados .

Após a realização dos testes, primeiro estabelecemos duas arquiteturas: R-CNN mais rápida e YOLO v2. Mais tarde, depois que a nova versão apareceu, adicionamos o YOLO v3.

Descrição dos modelos .

Um exemplo de resultado de reconhecimento para YOLO v2 (a seguir, imagens são obtidas de fontes gratuitas - não podemos publicar quadros de câmeras de clientes):

imagem

Um exemplo de resultado de reconhecimento para Faster R-CNN:

imagem

A vantagem do YOLO é que o modelo responde mais rapidamente e, em algumas tarefas, isso é importante. No entanto, na prática, descobrimos que, se não for possível usar uma versão pré-treinada do modelo, e a reciclagem for necessária em seu conjunto de treinamento especializado, é mais correto usar o R-CNN mais rápido. Se a câmera foi instalada longe o suficiente das pessoas (a altura da silhueta é inferior a 100 pixels para uma resolução de 1920 por 1080) ou foi necessário reconhecer adicionalmente o equipamento de proteção individual de uma pessoa: capacetes, fixadores, elementos de vestuário de proteção, nessas situações a qualidade do treinamento resulta em seu próprio conjunto de dados (até 10 mil objetos diferentes) para o YOLO v2, não ficamos satisfeitos.

O YOLO v3 mostrou resultados aceitáveis, no entanto, os testes de velocidade não deram uma vantagem significativa para o YOLO v3 em comparação ao R-CNN mais rápido. Além disso, encontramos uma maneira de aumentar a velocidade de reconhecimento usando o lote (processamento em grupo de imagens), análise seletiva de imagens (mais sobre isso abaixo).

Para todos os tipos de modelos, aprimoramos a precisão usando o pós-processamento dos resultados: removemos valores discrepantes de valores, obtivemos os valores mais comuns para um conjunto de quadros consecutivos. Um segundo de uma câmera geralmente corresponde a 25-50 quadros. Obviamente, para melhorar o desempenho (com um número crescente de câmeras), analisamos nem todos os quadros, mas muitas vezes é possível dar uma resposta final por um intervalo de vários segundos, ou seja, usar vários quadros. Essa decisão pode ser tomada dinamicamente, levando em consideração o número total de câmeras (fluxos de vídeo para processamento) e a capacidade computacional disponível.

Um exemplo de uso do modelo Faster R-CNN, treinado em nosso próprio conjunto de dados:

imagem

Agora estamos realizando testes com o modelo SSD-300. Esperamos que isso nos dê um aumento de produtividade, mantendo uma qualidade de reconhecimento aceitável.

Criando seu próprio conjunto de dados de treinamento


Nos casos em que você deseja criar seu próprio conjunto de aprendizado, desenvolvemos para nós mesmos o seguinte procedimento:
  • coletamos videoclipes com os objetos necessários: vídeos de clientes, vídeos de domínio público (vídeos definidos, câmeras de vigilância);
  • recortamos e filtramos fragmentos de vídeo para que o conjunto de dados resultante seja equilibrado entre vários objetos de reconhecimento;
  • Distribuímos quadros entre marcadores para destacar os objetos necessários. Um exemplo de uma ferramenta de marcação ;
  • verificar seletivamente os resultados dos marcadores;
  • se necessário, realizamos aumento: geralmente adicionamos curvas, reflexão, alteramos a nitidez (formam um conjunto de dados marcado e estendido).

Usando zonas de detecção


Um dos problemas com a contagem de pessoas na fila é a interseção das áreas de visibilidade de várias câmeras. Mais de uma câmera pode ser instalada em uma sala; portanto, é importante preservar a área sobreposta das imagens e, quando uma pessoa entra no campo de visão de várias câmeras, ela deve ser levada em consideração uma vez.

Em algumas situações, as pessoas precisam ser detectadas apenas em uma determinada área da sala (perto das janelas de serviço) ou plataforma (perto do equipamento).

Por razões óbvias, é errado verificar se o retângulo da borda (caixa / quadro), restringindo toda a pessoa, cai na zona (polígono). Nessa situação, a parte inferior (terceira / metade) do retângulo é dividida em pontos - nós (uma grade de 10 por 10 nós) e a queda na zona dos nós selecionados individualmente é verificada. Os nós "significativos" são alocados pelo administrador do sistema com base na geometria da sala (os valores padrão também são selecionados - se a configuração para uma sala específica não for inserida).

imagem

Além disso, a aplicação da arquitetura Mask R-CNN para nossas tarefas está sendo testada . O método permite determinar o contorno da silhueta - isso permitirá evitar o uso de um retângulo de borda ao analisar a interseção com uma zona .

imagem

Outra abordagem: detecção de cabeça (modelo de treinamento)


A qualidade nem sempre é alcançada escolhendo um modelo, aumentando / alterando o conjunto de treinamento e outros métodos puramente de ML. Às vezes, uma melhoria decisiva só pode ser obtida alterando toda a formulação do problema (por exemplo, no nosso problema). Nessas filas, as pessoas se amontoam e, portanto, se sobrepõem, de modo que a qualidade do reconhecimento geralmente é insuficiente para usar apenas esse método em condições reais.

Veja a imagem abaixo. Fechamos os olhos para o fato de a foto ter sido tirada no telefone e o ângulo de inclinação não corresponder ao ângulo de inclinação das câmeras de CFTV. Há 18 pessoas no quadro, e o modelo de detecção de silhueta identificou 11 pessoas:

imagem

Para melhorar os resultados, passamos da definição de silhuetas para a definição de objetivos. Para isso, o modelo R-CNN mais rápido foi treinado em um conjunto de dados retirado delink (o conjunto de dados inclui quadros com um número diferente de pessoas, incluindo grandes grupos, entre os quais pessoas de diferentes raças e idades).

Além disso, enriquecemos o conjunto de dados com quadros do material (das câmeras) do cliente em cerca de um terço (principalmente devido ao fato de que o conjunto de dados original tinha poucas cabeças). Um tutorial foi útil para o aprendizado de um modelo .

Os principais problemas que encontramos são a qualidade da imagem e a escala dos objetos. As cabeças têm tamanhos diferentes (como pode ser visto na imagem acima), e os quadros das câmeras do cliente têm uma resolução de 640x480, por isso, objetos interessantes (capuzes, bolas de Natal, encostos de cadeiras) às vezes são detectados como cabeças.

Por exemplo, no conjunto de dados de treinamento, rotulamos chefes:

imagem- estas são cabeças em um conjunto de dados;

imagem- e este é o encosto da cadeira, mas o modelo quer acreditar que este é o chefe.

No entanto, em geral, esse modelo lida muito bem nos casos em que há uma grande concentração de pessoas. Assim, no quadro acima, nosso modelo identificou 15 pessoas:

imagem

Assim, nesta imagem, o modelo não conseguiu encontrar apenas três cabeças, que foram significativamente bloqueadas por objetos estranhos.

Para melhorar a qualidade do modelo, você pode substituir as câmeras atuais por câmeras com uma resolução mais alta e coletar e marcar adicionalmente o conjunto de dados de treinamento.

No entanto, deve-se ter em mente que, com um pequeno número de pessoas, o método de detecção por silhuetas e não por cabeças é mais adequado, pois é mais difícil sobrepor ou confundir completamente com objetos estranhos. No entanto, se houver uma multidão, não há saída; portanto, para contar as pessoas na fila, foi decidido usar dois modelos em paralelo - para cabeças e silhuetas - e combinar a resposta.

Silhuetas e cabeças, um exemplo de resultado de reconhecimento:

imagem

Classificação de precisão


Ao testar o modelo, foram selecionados quadros que não participaram do treinamento (conjunto de dados com um número diferente de pessoas no quadro, em diferentes ângulos e tamanhos diferentes), para avaliar a qualidade do modelo, usamos recall e precisão.

Lembre -se de que a integridade mostra qual proporção de objetos que realmente pertencem à classe positiva, previmos corretamente.

Precisão - a precisão mostra qual a proporção de objetos reconhecidos como objetos de uma classe positiva que previmos corretamente.

Em quadros de câmeras em locais de teste (as imagens nessas salas estavam no conjunto de dados) métricas:

imagem

Em quadros de novas câmeras (essas salas não estavam no conjunto de dados):

imagem

Quando o cliente precisava de um dígito, uma combinação de precisão e integridade, fornecíamos uma média harmônica ou medida F :
imagem

Comunicando


Uma parte importante do serviço é estatística. Juntamente com quadros individuais (e pessoas dedicadas contadas por eles), os clientes desejam ver os resultados na forma de relatórios prontos (painéis) com ocupação média / máxima para diferentes intervalos de tempo. O resultado geralmente é interessante na forma de gráficos e tabelas que caracterizam a distribuição do número de pessoas ao longo do tempo.

Por exemplo, em nossa solução para o quadro, o número de pessoas para os dois modelos (silhuetas e cabeças) é calculado e o máximo é selecionado. Se houver várias câmeras na sala, a zona de sobreposição da imagem (predefinida por meio da interface) é salva e, quando uma pessoa entra no escopo de várias câmeras, ela é levada em consideração uma vez.
Em seguida, o valor do número de pessoas na fila é formado por vários quadros consecutivos - para o intervalo Δt . Dentro de uma hora, os valores para vários desses intervalos são descarregados para cada sala.

O tamanho do intervalo de tempo e o número de intervalos são determinados com base no número de salas e na potência de computação usada. Para cada intervalo, uma matriz de valores é formada com o número de pessoas na sala.

O valor mais comum (modo) é selecionado. Se houver vários valores com a mesma frequência, o máximo será selecionado.

O valor resultante é o número de pessoas na fila no momento timediatamente após o intervalo em questão. Em apenas uma hora, um conjunto de valores é obtido para diferentes intervalos - ou seja, valores nos instantes de tempo t_1, t_2 .... t_n .

Mais para t_1, t_2 .... t_n, os valores máximo e médio do número de pessoas são calculados - esses valores são exibidos no relatório como cargas médias e de pico por uma determinada hora.

Diagrama da distribuição de pessoas por tempo para carga máxima (exemplo simples):

imagem

Diagrama da distribuição de pessoas por tempo para carga máxima (exemplo simples):

imagem

Multidões


Concluindo, para concluir o tópico, gostaria de mencionar casos de multidões muito grandes, por exemplo, multidões em estádios, em locais de intenso tráfego humano.

Essas tarefas são sobre estimar o tamanho da multidão: se for uma multidão de 300 pessoas, uma resposta de 312 ou 270 será considerada aceitável.

Na prática, não tivemos que resolver esses problemas com a ajuda da análise de vídeo (se este for um evento organizado, será mais fácil para cada pessoa emitir um rótulo). No entanto, realizamos testes. Para tais tarefas, são utilizados métodos separados, uma visão geral dos métodos .

O resultado do modelo da revisão (modelo pré-treinado na CSRNet) foi reproduzido:

imagem

O ângulo é importante para as configurações deste modelo, ou seja, se o local da gravação for fixo, o resultado será melhor do que quando aplicado a diversas imagens. De um modo geral, há uma oportunidade de treinar novamente este modelo - a qualidade pode ser aprimorada durante a operação do modelo, quando o vídeo real das câmeras instaladas está ativado.

Autores do artigo: Tatyana Voronova (tvoronova), Elvira Dyaminova (elviraa)

All Articles