Módulo de Classificação¶
Classificação de imagens entre Ultralytics YOLO-cls e HuggingFace Transformers por meio de um
único Classifier — carregue um modelo, chame classify, e obtenha resultados top-k tipados.
A mesma API cobre treinamento, avaliação e ferramentas de dataset ImageFolder / HuggingFace,
via a CLI nectar-ai classify.
Resumo rápido¶
from nectar.ai.classification import Classifier
classifier = Classifier("yolo26n-cls.pt")
classifier.load()
result = classifier.classify(image)
print(result.top1_name, result.top1_confidence)
for pred in result.topk(5):
print(pred.class_name, pred.confidence)
Tutorial (Colab)¶
Fluxo ponta a ponta de classificação (dataset → train → TensorBoard → eval → Hub):
Arquitetura¶
flowchart TB
subgraph API["User API"]
Classifier["Classifier"]
end
subgraph Core["Core"]
BCM["BaseClassificationModel"]
Types["Classification / ClassificationResult"]
Configs["ClsTrainingConfig / ClsEvaluationConfig"]
end
subgraph Models["Models"]
UM["UltralyticsClsModel"]
TM["TransformersClsModel"]
end
subgraph Eval["Evaluation"]
CE["ClassificationEvaluator"]
end
subgraph External["External"]
YOLO["ultralytics *-cls"]
HF["transformers AutoModelForImageClassification"]
end
Classifier -->|creates| UM
Classifier -->|creates| TM
UM --> BCM
TM --> BCM
BCM --> Types
CE --> BCM
UM --> YOLO
TM --> HF
Classifier¶
from nectar.ai.classification import Classifier
from nectar.ai.core import Framework
classifier = Classifier("yolo26n-cls.pt")
classifier = Classifier("google/vit-base-patch16-224-in21k", framework=Framework.TRANSFORMERS)
classifier.load()
result = classifier.classify(image, topk=5)
annotated = classifier.draw_classification(image, result)
Detecção automática de framework: -cls → Ultralytics; vit / google/ / facebook/ →
Transformers.
Configs de exemplo¶
Templates portáveis em configs/ (só caminhos relativos; sem IDs de Hub específicos de
organização):
| Config | Backend | Preparo do dataset |
|---|---|---|
mnist_yolo26n_cls.yaml |
Ultralytics YOLO-cls | dataset download --source ultralytics --dataset mnist160 |
mnist_vit_example.yaml |
Transformers ViT | dataset download --source huggingface --repo ylecun/mnist --max-samples 128 |
cifar10_yolo26n_cls_example.yaml |
Ultralytics + opções de Hub | dataset download --source ultralytics --dataset cifar10 --max-samples 200 |
Copie um config e altere dataset_path, model, epochs, e opcionalmente habilite o upload
para o Hub.
Treinamento¶
Layout ImageFolder (formato de dataset de classificação do Ultralytics):
from nectar.ai.classification import Classifier, ClsTrainingConfig
classifier = Classifier("yolo26n-cls.pt")
classifier.load()
result = classifier.train(ClsTrainingConfig(
dataset_path="data/mnist160",
epochs=50,
imgsz=64,
tensorboard=True,
))
# Ultralytics + TensorBoard
nectar-ai classify train --config configs/mnist_yolo26n_cls.yaml --tensorboard
# Transformers ViT
nectar-ai classify train --config configs/mnist_vit_example.yaml
# Enable Hub upload (requires HF_TOKEN): set in YAML or override
nectar-ai classify train --config configs/cifar10_yolo26n_cls_example.yaml \
--push-to-hub --hub-model-id your-org/cifar10-yolo26n-cls
Traga seu próprio ImageFolder da mesma forma: aponte data.dataset_path para qualquer árvore
train/<class>/*.jpg (Food-101, dados próprios, etc.).
Avaliação¶
Produz um conjunto plano de artefatos, alinhado com detection/segmentation:
- Métricas: acurácia top-1 / top-k, P/R/F1 macro e ponderado, tabela por classe
- Curvas:
P_curve,R_curve,F1_curve,PR_curve - Plots:
confusion_matrix,error_analysis,performance_analysis,results,prediction_samples - Tabelas:
metrics_summary.json,evaluation_metrics.csv,per_class_metrics.{json,csv},pr_analysis_results.csv,error_statistics.csv,evaluation_report.json,evaluation_results.json
nectar-ai classify eval --model-path best.pt --dataset-path data/mnist160 \
--framework ultralytics --split test --conf-threshold 0.0 --topk 5
Gerenciamento de dataset¶
# Tiny Ultralytics set (recommended for smoke tests)
nectar-ai classify dataset download --source ultralytics --dataset mnist160 \
--output data/mnist160
# CIFAR-10 cached under nectar/ai/data/ultralytics/, then a small subset
nectar-ai classify dataset download --source ultralytics --dataset cifar10 \
--max-samples 200 --output data/cifar10-subset
nectar-ai classify dataset download --source huggingface --repo ylecun/mnist \
--max-samples 128 --output data/mnist-hf
nectar-ai classify dataset analyze --input data/mnist160
nectar-ai classify dataset convert --input data/raw --output data/normalized
nectar-ai classify dataset stratify --input data/unsplit --output data/split
nectar-ai classify dataset subset --input data/full --output data/subset --max-train-samples 1000
nectar-ai classify dataset upload --target huggingface --repo user/my-cls --dataset data/mnist160 --public
CLI¶
nectar-ai classify <command> [options]
Commands: train | predict | eval | dataset
Aliases: classification, cls
Frameworks suportados¶
| Framework | Train | Eval | Predict |
|---|---|---|---|
| Ultralytics YOLO-cls | sim | sim | sim |
| HuggingFace Transformers | sim | sim | sim |
Layout¶
classifier.py— facade e factoryClassifiercore/— tipos, configs,BaseClassificationModelmodels/— backends Ultralytics e Transformerstraining/— configs de treinamento específicas de frameworkevaluation/—ClassificationEvaluator+ plotsdatasets/— ferramentas ImageFolder, conversores HF, handlerscli/,configs/,scripts/- Compartilhado entre tasks:
nectar.ai.core(Framework, ModelLoader, utils)