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.

Exemplos sintéticos das três classes: círculo, triângulo e 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
Safetensors
Model size
2.27M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Evaluation results

  • Acurácia no teste (%) on Formas geométricas sintéticas (geração local)
    self-reported
    90.330