Status: Concluído ✅
Modelo: ResNet18 (Multi-Task Learning)
Acurácia Final: ~75% (Classificação)
Arquitetura: Multi-Head Network (Classification + Regression)
O ThumbNet é um sistema de Visão Computacional que utiliza Multi-Task Learning para analisar thumbnails do YouTube, realizando simultaneamente classificação de categorias e estimativa de visualizações. O modelo simula a percepção humana ao avaliar miniatura: identificar o tópico instantaneamente e julgar o potencial de viralização.
Diferente de classificadores simples, o ThumbNet utiliza uma arquitetura Multi-Head compartilhando um backbone visual para duas tarefas simultâneas: determinar a categoria do vídeo e prever a quantidade de visualizações.
thumbnet-youtube-analytics/
│
├── data/
│ ├── raw/ # Dataset bruto (gerenciado pelo downloader)
│ └── samples/ # Imagens para teste de inferência
│
├── models/ # Checkpoints dos modelos treinados (.pth)
│
├── notebooks/
│ └── 01_exploratory_analysis.ipynb # Análise Exploratória de Dados (EDA)
|
├── src/
│ ├── data/
│ │ ├── downloader.py # Script de coleta multi-região
│ │ └── dataset.py # Custom Dataset (Image, Label, Views)
│ ├── models/
│ │ └── model.py # Arquitetura ThumbNetMultiTask
│ ├── train.py # Loop de treinamento
│ └── predict.py # Script de inferência e visualização
│
├── requirements.txt # Dependências
│
└── README.md # Este arquivo
- PyTorch: Framework principal de Deep Learning
- Torchvision: Transfer Learning e transformações de imagem
- ResNet18: Backbone pré-treinado na ImageNet
- YouTube Data API v3: Coleta automática de metadados e thumbnails
- Pillow: Processamento de imagens
- Pandas: Manipulação e análise de dados
- Python-dotenv: Gerenciamento de credenciais
- Requests: Downloads de imagens
- Matplotlib: Visualizações
O ThumbNet explora o conceito de Multi-Task Learning (Aprendizado Multitarefa), onde um único modelo neural aprende a resolver múltiplas tarefas relacionadas simultaneamente, compartilhando representações visuais.
Ao analisar uma thumbnail do YouTube, humanos fazem duas inferências automáticas:
- "Que tipo de conteúdo é este?" (Gaming, Sports, Music, Tech)
- "Quão popular será?" (Estimativa de visualizações baseada em qualidade visual)
O ThumbNet replica esse comportamento com Deep Learning.
1. Classificação (Classification Head)
- Determinar a categoria do vídeo entre 4 classes
- Saída: Probabilidades softmax para cada categoria
2. Regressão (Regression Head)
- Predizer a estimativa de visualizações (escala logarítmica)
- Saída: Valor numérico representando log(views)
O ThumbNet utiliza uma arquitetura Multi-Head (Duas Cabeças) com backbone compartilhado:
┌─────────────────────┐
│ Input Image │
│ (224x224x3) │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ ResNet18 │
│ (Backbone) │
│ [Transfer Learn] │
└──────────┬──────────┘
│
┌──────────────┴──────────────┐
│ │
┌────────▼────────┐ ┌────────▼────────┐
│ Classification │ │ Regression │
│ Head │ │ Head │
│ (FC Layers) │ │ (FC Layers) │
└────────┬────────┘ └────────┬────────┘
│ │
┌────────▼────────┐ ┌────────▼────────┐
│ 4 Classes │ │ View Count │
│ (Softmax) │ │ (log scale) │
└─────────────────┘ └─────────────────┘
Backbone (Shared Features):
- ResNet18 pré-treinado na ImageNet
- Feature extractor congelado inicialmente
- Output: 512 features
Classification Head:
- Linear(512 → 256)
- ReLU + Dropout(0.5)
- Linear(256 → 4)
Regression Head:
- Linear(512 → 256)
- ReLU + Dropout(0.3)
- Linear(256 → 1)
O dataset foi construído para evitar viés cultural e geográfico, coletando thumbnails de múltiplas regiões:
Regiões contempladas:
- 🇧🇷 Brasil (BR)
- 🇺🇸 Estados Unidos (US)
- 🇯🇵 Japão (JP)
- 🇰🇷 Coreia do Sul (KR)
- 🇩🇪 Alemanha (DE)
- 🇷🇺 Rússia (RU)
- Entre outros
| Categoria | Descrição | Desafios |
|---|---|---|
| 🎮 Gaming | Jogos e gameplay | Confusão com esportes digitais |
| ⚽ Sports | Esportes reais | Distinção de FIFA/PES |
| 🎵 Music | Videoclipes e performances | Variação visual alta |
| 💻 Tech | Reviews e tutoriais | Sobreposição com outros tópicos |
Pipeline automático de qualidade:
- ✅ Remoção de YouTube Shorts (formato vertical)
- ✅ Filtro de imagens corrompidas ou incompletas
- ✅ Balanceamento entre categorias
- ✅ Normalização de metadados
total_loss = classification_loss + regression_loss- Transfer Learning: Pesos pré-treinados da ImageNet
- Data Augmentation: Rotação, flip, color jitter adaptativo
- Early Stopping: Paciência de 5 épocas
- Checkpoint Automático: Salva o melhor modelo baseado em validation loss
- Learning Rate Scheduling: Redução adaptativa
O modelo final demonstrou capacidade de generalização robusta, superando desafios visuais complexos.
| Métrica | Valor | Status |
|---|---|---|
| Acurácia (Validação) | ~75% | 🟢 Bom |
| Generalização | Alta | 🟢 Excelente |
Casos de Sucesso:
✅ Thumbnail de Minecraft
- Predição:
Gaming(97% de confiança) - Análise: Identificou corretamente elementos visuais característicos
✅ Jogo de Futebol Real
- Predição:
Sports(72% de confiança) - Análise: Superou a confusão visual com games de esporte (FIFA/PES)
✅ Tech Review
- Predição:
Tech(85% de confiança) - Análise: Reconheceu padrões de thumbnails de tecnologia
Desafios Identificados:
- Thumbnails de e-sports podem confundir o modelo
- Requer mais exemplos dessa categoria específica
- Pode ser confundido com Sports em alguns casos
- Necessita melhor separação de features
git clone https://github.com/oalvarobraz/ThumbNet.git
cd ThumbNetpip install -r requirements.txtCrie um arquivo .env na raiz do projeto:
YOUTUBE_API_KEY=sua_chave_aquiObtenha sua chave: Google Cloud Console → YouTube Data API v3
Para criar seu próprio dataset do zero:
python src/data/downloader.pyIsso baixará metadados e thumbnails de múltiplas regiões automaticamente.
python src/train.pyTestar uma imagem específica:
python src/predict.py caminho/da/sua/thumbnail.jpgTestar imagem aleatória dos samples:
python src/predict.py# Deep Learning
torch>=2.0.0
torchvision>=0.15.0
# Data Collection
google-api-python-client>=2.100.0
requests>=2.31.0
# Data Processing
pandas>=2.0.0
numpy>=1.24.0
pillow>=10.0.0
# Utilities
python-dotenv>=1.0.0
tqdm>=4.66.0
# Visualization
matplotlib>=3.7.0
seaborn>=0.12.0
🎯 Categoria Predita: Gaming
📊 Confiança: 97.3%
👁️ Estimativa de Views: 1.2M
🎯 Categoria Predita: Sports
📊 Confiança: 72.1%
👁️ Estimativa de Views: 850K
🎯 Categoria Predita: Tech
📊 Confiança: 85.4%
👁️ Estimativa de Views: 450K
- Implementar Tesseract OCR para extração de texto das thumbnails
- Combinar features visuais + texto para melhor classificação
- Pipeline: Image Features + Text Embeddings → Fusion → Prediction
- Aumentar para 10.000+ imagens
- Adicionar mais categorias (Education, Entertainment, News)
- Coletar mais exemplos de casos ambíguos (e-sports, performance ao vivo)
- Implementar FastAPI para servir o modelo
- Endpoint:
POST /predictrecebe thumbnail e retorna análise - Containerização com Docker
- Adicionar terceira cabeça para detectar thumbnails "clickbait"
- Features: Texto exagerado, rostos com expressões extremas, cores saturadas
- Descongelar camadas finais do ResNet18
- Fine-tuning específico para thumbnails do YouTube
- Experimentar com modelos maiores (ResNet50, EfficientNet)
- Multi-Task Learning: Compartilhar representações visuais melhora eficiência e generalização
- Dataset Balanceado: Coleta multi-região é essencial para evitar viés cultural
- Transfer Learning: ResNet18 fornece base sólida mesmo para domínio específico (thumbnails)
- Desafios de Classificação: Distinção entre categorias visualmente similares (esportes reais vs. digitais)
- Data Quality: Limpeza automática de dados é crítica para performance do modelo
O ThumbNet demonstra com sucesso a aplicação de Multi-Task Learning em um problema real de visão computacional, alcançando 75% de acurácia na classificação de thumbnails do YouTube.
Conquistas:
- ✅ Arquitetura multi-head funcional
- ✅ Pipeline de coleta de dados multi-região
- ✅ Generalização robusta entre diferentes estilos visuais
- ✅ Capacidade de distinção entre categorias visualmente similares
Próximos Desafios:
- 🔄 Integrar OCR para multimodalidade (visual + texto)
- 📊 Expandir dataset para 10K+ imagens
- 🚀 Deploy como API em produção
Este projeto serve como base para sistemas de análise automática de conteúdo visual, com aplicações em marketing digital, moderação de conteúdo e recomendação de vídeos.
Desenvolvido por Álvaro Braz Cunha.
Projeto desenvolvido para fins de estudo, pesquisa e portfólio profissional em Visão Computacional e Multi-Task Learning.
- YouTube Data API v3: Por fornecer acesso aos metadados
- PyTorch Community: Por tutoriais sobre Multi-Task Learning
- Torchvision: Por modelos pré-treinados de alta qualidade
- Comunidade Open Source: Por compartilhar conhecimento sobre Computer Vision