Como detectar caixas de papelão usando a Rede Neural

7

Estou tentando treinar uma rede neural para detectar caixas de papelão junto com várias classes de pessoas (pessoas).

Embora seja fácil detectar pessoas e classificá-las corretamente, é incrivelmente difícil detectar caixas de papelão.

As caixas ficam assim:

insira a descrição da imagem aqui

Minha suspeita é que a caixa é um objeto muito simples , e a rede neural tem dificuldade em detectá-lo porque há muito poucos recursos para extrair do objeto.

A divisão do conjunto de dados fica assim:

personA: 1160
personB: 1651
personC: 2136
person: 1959
box: 2798

As pessoas estão usando itens de segurança diferentes, com base nos itens classificados, enquanto detectados como pessoa inteira, não apenas no item.

Eu tentei usar:

ssd300_incetpionv2
ssd512_inceptionv2
faster_rcnn_inceptionv2

Tudo isso está detectando e classificando pessoas muito melhor do que caixas. Não posso fornecer exatamente mAP(não o tenho).

Alguma ideia?

Obrigado.

Martin Brišiak
fonte
Você tentou uma rede mais rasa? Isso deve funcionar bem com recursos menos complexos.
S van Balen

Respostas:

5

Como você disse:

Minha suspeita é que a caixa é um objeto muito simples, e a rede neural tem dificuldade em detectá-lo porque há muito poucos recursos para extrair do objeto.

... e esse é exatamente o problema com esta tarefa. Sugiro que você treine sua rede usando muito aumento de imagem. Se você estiver usando o Keras / TensorFlow 2.0, eles terão funções internas que fazem isso.

Sugiro também que você treine um primeiro modelo e estude com precisão as imagens que sua Rede considera caixas, mas não são (os falsos positivos). Nesse ponto, você seleciona os casos "corretos", juntamente com os casos de falsos positivos, e cria um subconjunto do conjunto de dados que você possui. Esse subconjunto de dados pode ser útil para treinar a rede para distinguir entre caixas reais e objetos que se parecem com caixas.

Mais uma vez: use uma enorme carga de aumento de imagem. Esse é o meu ponto principal e é o que eu faria.

Leevo
fonte
-1

Eu sugiro usar um modelo pré-treinado.

Aqui está o código completo de uma classificação de imagem multiclasse pré-treinada que fiz recentemente: https://datascience.stackexchange.com/a/52772/71442

Existem diferentes modelos pré-treinados que você pode experimentar: https://keras.io/applications/

Com modelos pré-treinados, você pode "reutilizar" as camadas convolucionais de modelos grandes e treinar suas classes no topo. Isso pode ajudar a encontrar os recursos específicos associados às caixas.

As caixas devem ser fáceis de detectar devido à forma e cor distintas e uniformes delas. Então, acho que tentar um modelo pré-treinado, treinado em classes semelhantes (tipo caixa), pode ajudar.

Se todas as caixas forem marrons (como na imagem de exemplo), você poderá detectar caixas com base nos padrões de cores. NN é capaz de fazer isso.

No geral, é difícil dizer o que deu errado sem ver o seu modelo. A arquitetura do modelo pode ser relevante aqui.

Pedro
fonte
i usado modelo pré-treinado cocos, arquiteturas que eu usei são mencionados na pergunta
Martin Brišiak
Sim, claro, eu vi. Mas não sei exatamente o que está acontecendo com coco. Talvez outro modelo funcione melhor. Além disso, a arquitetura do modelo pode importar bastante (quero dizer, o próprio modelo, não vejo isso na sua pergunta). Ainda assim, é um pouco "interessante" que você não possa treinar bem em objetos tão simples.
Peter
-1

Você pode tentar usar os modelos existentes do Tensorflow que foram pré-treinados em grandes conjuntos de dados, como MS-COCO, Kitti e Open Images etc. Você pode ajustar um modelo específico que deseja no seu conjunto de dados.

Uma lista de todos os modelos disponíveis para uso pode ser encontrada aqui: https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

Uma boa fonte sobre como configurar um detector de objetos: https://www.youtube.com/watch?v=Rgpfk6eYxJA (Não se preocupe se você é usuário do Linux, o mesmo tutorial pode ser adaptado, mesmo em sistemas Linux)

Você pode usar uma ferramenta como labellmg para rotular suas imagens para treinamento ( https://github.com/tzutalin/labelImg )

Espero que isto ajude.

Jitesh Malipeddi
fonte
3
Eu fiz isso, a questão é por caixas são mais difíceis de detectar
Martin Brišiak