Quantas imagens por turma são suficientes para treinar uma CNN

12

Estou iniciando um projeto em que a tarefa é identificar os tipos de tênis nas imagens. Atualmente, estou lendo as implementações TensorFlow e Torch . Minha pergunta é: quantas imagens por classe são necessárias para alcançar um desempenho razoável de classificação?

Feynman27
fonte
Definir "razoável"? Seu objetivo é obter uma precisão que possa ser usada em um sistema de produção? Seu objetivo é outra coisa? Quantas aulas existem? Existem algumas variações no pré-treinamento e no treinamento semi-supervisionado que podem economizar seu esforço, para que você possa esclarecer se sua preocupação está no esforço de rotular imagens ou simplesmente buscar qualquer imagem. Finalmente, quão limpas e simples são suas imagens de destino? Imagens onde a iluminação e a pose são fixas serão mais fáceis de treinar do que as fotografias do mundo real com os tênis sendo usados.
Neil Slater
Sim, isso será usado na produção. Atualmente, não sei quantas classes haverá, pois não sei quantos tipos diferentes de tênis existem na biblioteca de imagens. Meu melhor palpite seria da ordem de 50 a 100, mas quanto mais a descrição do tênis, menos as classes (por exemplo, air-jordan vs. air-jordan-ultrafit). Infelizmente, a biblioteca de imagens é uma mistura de tênis usados ​​e colocados como itens fixos com um fundo branco.
precisa saber é o seguinte

Respostas:

2

De Quão poucos exemplos de treinamento são escassos ao treinar uma rede neural? no CV:

Realmente depende do seu conjunto de dados e da arquitetura da rede. Uma regra geral que li (2) foi de alguns milhares de amostras por classe para a rede neural começar a ter um desempenho muito bom. Na prática, as pessoas tentam ver.


Uma boa maneira de avaliar até que ponto pode ser benéfico ter mais amostras de treinamento é traçar o desempenho da rede neural com base no tamanho do conjunto de treinamento, por exemplo, a partir de (1):

insira a descrição da imagem aqui


Franck Dernoncourt
fonte
0

A melhor abordagem é coletar o máximo de dados possível. Em seguida, inicie o projeto e faça um modelo de dados.

Agora você pode avaliar seu modelo para ver se ele possui alta polarização ou alta variação.

Alta variação : nessa situação, você verá que o erro de validação cruzada é maior que o erro de treinamento após a convergência. Existe uma lacuna significativa se você plotar o mesmo em relação ao tamanho dos dados de treinamento.

Viés alto : nessa situação, o erro de validação cruzada é um pouco maior que o erro de treinamento, que é alto quando representado graficamente em relação ao tamanho dos dados de treinamento. e erros de plotagem.

Se você vir seu modelo com alta variação (super ajuste), adicionar mais dados geralmente ajudará em contraste com o modelo de alto viés (baixo ajuste), onde a adição de novos dados de treinamento não ajuda.

Também por classe, você deve tentar obter o mesmo número de imagens, caso contrário, os conjuntos de dados podem ficar distorcidos (mais de um tipo).

Sugiro também que, se você estiver usando o TensorFlow , leia mais sobre o INCEPTION Image Classifier do GOOGLE . Ele já é um classificador treinado no banco de dados de imagens do Google e você pode usá-lo para suas imagens, assim os requisitos para o número de imagens diminuem drasticamente.

Xeqtr
fonte
Eu já realizei um teste rápido usando o Inception-v3 do TensorFlow. O melhor que ele poderia fazer é fornecer uma classificação muito clara, como "tênis de corrida", mas preciso de algo um pouco mais granular, como "air-jordan-ultrafit". É por isso que estou criando um novo conjunto de treinamento para usar com o Inception.
precisa saber é o seguinte
Essa é uma definição estranha de "um pouco mais granular".
Jivan 22/02