Skip to content

oalvarobraz/ThumbNet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

👁️ ThumbNet: YouTube Thumbnail Analytics

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.

Python PyTorch YouTube Status


🗂️ Estrutura do Projeto

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

🛠️ Tecnologias Utilizadas

🔹 Deep Learning

  • PyTorch: Framework principal de Deep Learning
  • Torchvision: Transfer Learning e transformações de imagem
  • ResNet18: Backbone pré-treinado na ImageNet

🔹 Data Collection & Processing

  • YouTube Data API v3: Coleta automática de metadados e thumbnails
  • Pillow: Processamento de imagens
  • Pandas: Manipulação e análise de dados

🔹 Utilidades

  • Python-dotenv: Gerenciamento de credenciais
  • Requests: Downloads de imagens
  • Matplotlib: Visualizações

🧠 Sobre o Projeto

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.

🔹 Motivação

Ao analisar uma thumbnail do YouTube, humanos fazem duas inferências automáticas:

  1. "Que tipo de conteúdo é este?" (Gaming, Sports, Music, Tech)
  2. "Quão popular será?" (Estimativa de visualizações baseada em qualidade visual)

O ThumbNet replica esse comportamento com Deep Learning.

🔹 Tarefas Simultâneas

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)

🏗️ Arquitetura do Modelo

O ThumbNet utiliza uma arquitetura Multi-Head (Duas Cabeças) com backbone compartilhado:

🔹 Estrutura

                    ┌─────────────────────┐
                    │   Input Image       │
                    │    (224x224x3)      │
                    └──────────┬──────────┘
                               │
                    ┌──────────▼──────────┐
                    │   ResNet18          │
                    │   (Backbone)        │
                    │   [Transfer Learn]  │
                    └──────────┬──────────┘
                               │
                ┌──────────────┴──────────────┐
                │                             │
       ┌────────▼────────┐          ┌────────▼────────┐
       │ Classification  │          │   Regression    │
       │     Head        │          │      Head       │
       │   (FC Layers)   │          │   (FC Layers)   │
       └────────┬────────┘          └────────┬────────┘
                │                             │
       ┌────────▼────────┐          ┌────────▼────────┐
       │   4 Classes     │          │   View Count    │
       │   (Softmax)     │          │   (log scale)   │
       └─────────────────┘          └─────────────────┘

🔹 Componentes

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)

📊 Dataset

🔹 Estratégia de Coleta

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

🔹 Classes

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

🔹 Limpeza de Dados

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

🎯 Treinamento

🔹 Loss Function Multi-Task

total_loss = classification_loss + regression_loss

🔹 Estratégias Implementadas

  • 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

📈 Resultados

O modelo final demonstrou capacidade de generalização robusta, superando desafios visuais complexos.

🔹 Métricas de Classificação

Métrica Valor Status
Acurácia (Validação) ~75% 🟢 Bom
Generalização Alta 🟢 Excelente

🔹 Análise Qualitativa

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:

⚠️ Esportes Eletrônicos vs. Gaming

  • Thumbnails de e-sports podem confundir o modelo
  • Requer mais exemplos dessa categoria específica

⚠️ Music Videos com Performance ao Vivo

  • Pode ser confundido com Sports em alguns casos
  • Necessita melhor separação de features

⚙️ Como Executar

1️⃣ Clone o repositório

git clone https://github.com/oalvarobraz/ThumbNet.git
cd ThumbNet

2️⃣ Instale as dependências

pip install -r requirements.txt

3️⃣ Configure a API do YouTube

Crie um arquivo .env na raiz do projeto:

YOUTUBE_API_KEY=sua_chave_aqui

Obtenha sua chave: Google Cloud Console → YouTube Data API v3

4️⃣ Colete dados

Para criar seu próprio dataset do zero:

python src/data/downloader.py

Isso baixará metadados e thumbnails de múltiplas regiões automaticamente.

5️⃣ Treine o modelo

python src/train.py

6️⃣ Execute predições

Testar uma imagem específica:

python src/predict.py caminho/da/sua/thumbnail.jpg

Testar imagem aleatória dos samples:

python src/predict.py

📦 Dependências Principais

# 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

🧪 Exemplos de Predição

Exemplo 1: Gaming

🎯 Categoria Predita: Gaming
📊 Confiança: 97.3%
👁️ Estimativa de Views: 1.2M

Exemplo 2: Sports

🎯 Categoria Predita: Sports
📊 Confiança: 72.1%
👁️ Estimativa de Views: 850K

Exemplo 3: Tech

🎯 Categoria Predita: Tech
📊 Confiança: 85.4%
👁️ Estimativa de Views: 450K

🚀 Roadmap: Próximos Passos

🔹 1. Multimodalidade com OCR

  • 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

🔹 2. Expansão do Dataset

  • Aumentar para 10.000+ imagens
  • Adicionar mais categorias (Education, Entertainment, News)
  • Coletar mais exemplos de casos ambíguos (e-sports, performance ao vivo)

🔹 3. API de Produção

  • Implementar FastAPI para servir o modelo
  • Endpoint: POST /predict recebe thumbnail e retorna análise
  • Containerização com Docker

🔹 4. Modelo de Clickbait Detection

  • Adicionar terceira cabeça para detectar thumbnails "clickbait"
  • Features: Texto exagerado, rostos com expressões extremas, cores saturadas

🔹 5. Fine-Tuning do Backbone

  • Descongelar camadas finais do ResNet18
  • Fine-tuning específico para thumbnails do YouTube
  • Experimentar com modelos maiores (ResNet50, EfficientNet)

✅ Principais Aprendizados

  • 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

🎯 Conclusão

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.


📌 Autor

Desenvolvido por Álvaro Braz Cunha.

LinkedIn

Projeto desenvolvido para fins de estudo, pesquisa e portfólio profissional em Visão Computacional e Multi-Task Learning.


🙏 Agradecimentos

  • 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

About

Sistema de Visão Computacional com Multi-Task Learning (ResNet18) que analisa thumbnails do YouTube para classificar categorias e prever visualizações simultaneamente.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors