Identificador de Formas Geométricas
Círculo · Triângulo · Quadrado
Classificador de formas geométricas sintéticas em PyTorch. Recebe uma imagem em tons de cinza, redimensionada para 64 × 64 pixels, e retorna uma das três classes: circulo, triangulo ou quadrado.
| Acurácia no teste | Dados de teste | Melhor época | Parâmetros |
|---|---|---|---|
| 90,33% | 300 imagens sintéticas | 40 de 50 | 2.264.067 |
Baixar os pesos (model.safetensors) · Configuração
Uso rápido
git clone https://huggingface.co/DaviNeg/Identificador_de_Formas_Geometricas
cd Identificador_de_Formas_Geometricas
python -m pip install -r requirements.txt
python predict.py caminho/para/imagem.png
É possível carregar os pesos diretamente do Hub em um projeto que tenha model.py e as dependências instaladas:
from PIL import Image
import torch
from model import CLASSES, ShapeMLP, evaluation_transform
model = ShapeMLP.from_pretrained("DaviNeg/Identificador_de_Formas_Geometricas").eval()
image = Image.open("sua_imagem.png").convert("L")
tensor = evaluation_transform()(image).unsqueeze(0)
with torch.inference_mode():
probabilities = model(tensor).softmax(dim=1)[0]
for label, probability in zip(CLASSES, probabilities.tolist()):
print(f"{label}: {probability:.2%}")
predict.py também aceita --model-dir DaviNeg/Identificador_de_Formas_Geometricas, para baixar os pesos do Hub sem clonar todo o repositório, desde que o script e model.py estejam disponíveis localmente.
Entrada esperada: uma forma clara de contorno branco em fundo preto, com ruído leve, semelhante aos dados sintéticos usados no treinamento. A imagem é convertida para cinza, redimensionada para 64 × 64, transformada em tensor com valores em [0, 1] e normalizada para [-1, 1] usando média e desvio padrão de 0,5. A ordem fixa dos índices é 0: circulo, 1: triangulo, 2: quadrado. A rede produz logits; softmax gera escores normalizados, que não são probabilidades calibradas.
Como o modelo foi construído
Este MLP foi treinado do zero. O checkpoint não resulta de fine tuning de um modelo pré treinado. A imagem é achatada de 1 × 64 × 64 para 4.096 valores e passa por três blocos Linear → BatchNorm1d → ReLU → Dropout(0,4), com 512, 256 e 128 neurônios. A última camada linear produz três logits. Não há camadas convolucionais.
Dados e treinamento
O script train.py gera imagens com Pillow: contornos de círculos, triângulos e quadrados em posições, tamanhos e orientações variadas sobre fundo preto, com ruído gaussiano. Há 2.400 imagens de treino, 300 de validação e 300 de teste, equilibradas entre as classes. Os conjuntos são gerados separadamente; os arquivos de imagem não são necessários para usar o modelo.
| Item | Configuração |
|---|---|
| Inicialização | Pesos aleatórios; semente 42 |
| Treinamento | 50 épocas; lote de 32 |
| Otimizador | Adam; taxa inicial 1e-3; weight_decay=1e-4 |
| Agendador | StepLR; taxa pela metade a cada 10 épocas |
| Função de perda | CrossEntropyLoss |
| Aumento de dados no treino | Rotação até ±20°, espelhamento horizontal, translação até 10% |
| Seleção | Menor perda de validação; teste consultado após a escolha |
O script usa CPU ou CUDA conforme a disponibilidade. A execução publicada usou CPU e PyTorch 2.15.0. Para gerar um novo modelo:
python -m pip install -r requirements.txt
python train.py --output-dir nova_execucao
O comando cria config.json, model.safetensors e training_results.json. Os pesos e resultados podem variar entre versões de bibliotecas, hardware e operações aleatórias. O training_results.json deste repositório contém o histórico por época e as métricas da execução publicada.
Avaliação da execução publicada
| Conjunto | Acurácia | Perda |
|---|---|---|
| Validação, época 40 | 85,67% | 0,3813 |
| Teste, checkpoint selecionado | 90,33% (271/300) | 0,2952 |
Matriz de confusão no teste; linhas são classes reais, colunas são previstas:
| Real \ Previsto | Círculo | Triângulo | Quadrado |
|---|---|---|---|
| Círculo | 84 | 4 | 12 |
| Triângulo | 0 | 98 | 2 |
| Quadrado | 0 | 11 | 89 |
Esses números medem desempenho apenas no gerador sintético descrito acima. Não há avaliação em fotos, desenhos livres ou objetos reais.
Adaptação e fine tuning
Para adaptar este checkpoint a imagens próprias, carregue ShapeMLP.from_pretrained(...), mantenha o mesmo pré processamento e a ordem das classes, e separe dados rotulados em treino, validação e teste. Uma taxa menor, como 1e-4, é um ponto de partida para ajustar os pesos existentes. Se o número de classes mudar, substitua a última camada linear e atualize o mapeamento de rótulos. Salve o melhor checkpoint pela validação e reporte o teste separado. Esta versão não passou por fine tuning com dados externos.
Limitações e uso pretendido
O modelo serve para demonstração, estudo e classificação de imagens semelhantes às sintéticas do projeto. Pode falhar com formas preenchidas, várias formas na mesma imagem, traços de outras cores, fundos complexos e formas fora do enquadramento. A conversão para cinza descarta informação de cor. O desempenho informado não deve ser extrapolado para dados do mundo real.
Arquivos
| Arquivo | Finalidade |
|---|---|
model.safetensors |
Pesos treinados para download |
config.json |
Dimensões e dropout necessários para recriar a arquitetura |
model.py |
Arquitetura e pré processamento |
predict.py |
Inferência por linha de comando |
train.py |
Geração dos dados e treinamento reproduzível |
training_results.json |
Métricas e histórico da execução publicada |
assets/preview.png |
Exemplos visuais do gerador sintético |
- Downloads last month
- 42
Evaluation results
- Acurácia no teste (%) on Formas geométricas sintéticas (geração local)self-reported90.330
