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:
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.
fonte
Respostas:
Como você disse:
... 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.
fonte
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.
fonte
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.
fonte