Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

👁️ Blind Assist AI: Neural Image Captioning & Text-to-Speech

Status: Concluído ✅
Arquitetura: CNN (ResNet50) + Transformer Decoder
Inferência: Beam Search (k=5) + Text-to-Speech
Aplicação: Tecnologia Assistiva para Deficientes Visuais

O Blind Assist AI é uma solução de Engenharia de Machine Learning focada em acessibilidade. O sistema utiliza Deep Learning para "enxergar" o mundo através de imagens e convertê-las em áudio descritivo para pessoas com deficiência visual.

Diferente de implementações básicas, este projeto implementa uma arquitetura Encoder-Decoder do zero, conectando uma ResNet (Visão) a um Transformer (Linguagem) através de mecanismos de Cross-Attention, finalizando com um pipeline de inferência robusto que evita repetições e sintetiza voz.

Python PyTorch Transformers Accessibility


🗂️ Estrutura do Projeto

blind-assist-ai/
│
├── checkpoints/         # Pesos do modelo treinado (.pth)
│
├── data/
│   └── raw/             # Datasets
│
├── src/
│   ├── dataset.py       # Custom Dataset (Tokenização CLIP + Padding)
│   ├── model.py         # CaptionModel (ResNet + Transformer)
│   ├── train.py         # Loop de treinamento
│   └── predict.py       # Inferência (Beam Search + TTS)
│
├── requirements.txt     # Dependências
│
└── README.md           # Este arquivo

🛠️ Tecnologias Utilizadas

🔹 Deep Learning

  • PyTorch: Framework principal de Deep Learning
  • Torchvision: ResNet50 pré-treinada
  • Transformers (Native): Implementação nativa do Transformer Decoder

🔹 Processamento de Linguagem

  • CLIP Tokenizer: Vocabulário de ~49k tokens
  • Beam Search: Algoritmo de busca em feixe
  • Repetition Penalty: Penalização customizada

🔹 Text-to-Speech

  • gTTS (Google Text-to-Speech): Síntese de voz
  • pydub: Manipulação de áudio

🔹 Visualização & Análise

  • Matplotlib: Visualizações
  • Pillow: Processamento de imagens
  • NumPy: Operações numéricas

🧠 Sobre o Projeto

🔹 Motivação

A deficiência visual afeta milhões de pessoas globalmente. Este projeto demonstra como Deep Learning pode criar tecnologias assistivas que proporcionam maior autonomia e independência, permitindo que pessoas com deficiência visual "vejam" através de descrições auditivas.

🔹 Aplicação Social

Casos de Uso:

  • 🏠 Navegação doméstica: Identificar objetos e pessoas
  • 📸 Redes sociais: Descrever fotos de amigos e familiares
  • 🛒 Compras: Identificar produtos e embalagens
  • 🚶 Mobilidade: Descrever ambientes e obstáculos
  • 📚 Educação: Acessibilizar conteúdo visual

Impacto:

  • ✅ Aumenta autonomia e independência
  • ✅ Reduz barreiras de acessibilidade
  • ✅ Promove inclusão digital
  • ✅ Melhora qualidade de vida

🏗️ Arquitetura do Modelo

O sistema segue o paradigma Encoder-Decoder com Cross-Attention:

┌─────────────────────────────────────────────────────────────┐
│                     INPUT IMAGE (224x224x3)                 │
└───────────────────────────┬─────────────────────────────────┘
                            │
                ┌───────────▼───────────┐
                │   VISUAL ENCODER      │
                │   (ResNet50)          │
                │   Pretrained ImageNet │
                └───────────┬───────────┘
                            │
                  [2048 x 7 x 7 features]
                            │
                ┌───────────▼───────────┐
                │   Feature Projection  │
                │   2048 → 512          │
                └───────────┬───────────┘
                            │
                     [49 x 512 tokens]
                            │
                            ├─────────────┐
                            │             │
                ┌───────────▼─────┐   ┌──▼──────────────┐
                │  TRANSFORMER    │   │  Cross-Attention│
                │  DECODER        │◄──┤  Mechanism      │
                │  (Autoregressive)│   └─────────────────┘
                └───────────┬─────┘
                            │
                   [Generated Caption]
                            │
                ┌───────────▼───────────┐
                │   BEAM SEARCH         │
                │   (k=5 paths)         │
                └───────────┬───────────┘
                            │
                ┌───────────▼───────────┐
                │   TEXT-TO-SPEECH      │
                │   (gTTS)              │
                └───────────┬───────────┘
                            │
                      🔊 Audio Output

🔍 Componentes Detalhados

🔹 1. Visual Encoder (O Olho)

Backbone: ResNet50

  • Pré-treinada na ImageNet (1.4M imagens)
  • Extração de features sem a camada linear final
  • Output: (Batch, 2048, 7, 7) feature maps

Feature Projection:

# Achatar features espaciais: (B, 2048, 7, 7) → (B, 49, 2048)
features = features.flatten(2).permute(0, 2, 1)

# Projetar para dimensão do Transformer
features = linear_projection(features)  # (B, 49, 512)

Por que preservar informação espacial?

  • Cada um dos 49 tokens representa uma região 32x32 da imagem original
  • O Transformer pode "focar" em regiões específicas via attention

🔹 2. Textual Decoder (O Cérebro)

Tokenização:

  • Tokenizer: CLIP (Contrastive Language-Image Pre-training)
  • Vocabulário: ~49.000 tokens
  • Tokens especiais: <SOS> (Start), <EOS> (End), <PAD>

Transformer Nativo:

decoder_layer = nn.TransformerDecoderLayer(
    d_model=512,
    nhead=8,
    dim_feedforward=2048,
    dropout=0.1
)
decoder = nn.TransformerDecoder(decoder_layer, num_layers=6)

Mecanismo de Cross-Attention:

  • A cada palavra gerada, o decoder "olha" para regiões específicas da imagem
  • Attention weights indicam qual região foi relevante para cada palavra
  • Exemplo: "blond" → foca na região do cabelo

🔹 3. Pipeline de Inferência Avançado

Beam Search (k=5):

Em vez de escolher apenas a próxima palavra mais provável (Greedy Decoding), o Beam Search explora 5 caminhos simultâneos:

Iteração 1:  <SOS> → [this, a, the, woman, man]

Iteração 2:  this → [person, man, woman, girl, boy]
             a → [woman, man, person, girl, boy]
             ... (mantém os 5 melhores)

Iteração N:  Score final de cada sequência completa
             Seleciona a melhor

Vantagens:

  • ✅ Frases mais coerentes globalmente
  • ✅ Evita escolhas "míopes" do greedy
  • ✅ Melhor qualidade de texto

Text-to-Speech (TTS):

from gtts import gTTS

tts = gTTS(text=caption, lang='en', slow=False)
tts.save('descricao_audio.mp3')

📊 Dataset

CelebA (Celebrity Faces)

  • 200k imagens de rostos de celebridades
  • Atributos faciais como labels
  • Adaptado para geração de descrições

🔹 Pré-processamento

Imagens:

transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225]
    )
])

Texto:

  • Tokenização com CLIP Tokenizer
  • Padding dinâmico até max_length
  • Target shifting (professor forcing durante treino)

🎯 Treinamento

🔹 Loss Function

Cross-Entropy Loss com masking para padding:

loss = nn.CrossEntropyLoss(ignore_index=PAD_TOKEN)

🔹 Otimização

Técnicas Implementadas:

  • Adam Optimizer: lr=1e-4
  • Gradient Clipping: Evita explosão de gradientes (max_norm=5)
  • Teacher Forcing: Durante treino, usa ground truth como entrada
  • Learning Rate Scheduling: ReduceLROnPlateau
  • Early Stopping: Paciência de 5 épocas

📈 Resultados

🔹 Exemplos de Predições

Imagem de Entrada Descrição Gerada (Beam Search k=5) Saída de Áudio
"this person has arched eyebrows... she has blond hair, pointy nose... she is young and smiling." 🔊 descricao_audio.mp3 gerado automaticamente
"this woman has high cheekbones , and wavy hair . she wears lipstick . she is smiling . the person has big nose , bangs , brown hair..." 🔊 descricao_audio.mp3 gerado automaticamente

🔹 Capacidades do Modelo

O modelo é capaz de capturar:

  • Detalhes físicos: Cor de cabelo, formato de nariz, sobrancelhas
  • Expressões: Sorrindo, sério, pensativo
  • Acessórios: Óculos, chapéus, brincos
  • Maquiagem: Batom, sombra, delineador
  • Idade e gênero: Jovem, adulto, homem, mulher

⚙️ Como Executar

1️⃣ Clone o repositório

git clone https://github.com/seu-usuario/blind-assist-ai.git
cd blind-assist-ai

2️⃣ Instale as dependências

pip install -r requirements.txt

3️⃣ Baixe o dataset (opcional)

Para treinar do zero:

https://www.kaggle.com/datasets/kashyapkvh/mm-celeba-hq-dataset

4️⃣ Treine o modelo (opcional)

python src/train.py --epochs 10 --save_dir ./checkpoints

Argumentos de treinamento:

python src/train.py \
  --epochs 20 \
  --save_dir ./checkpoints

5️⃣ Execute inferência (Gerar descrição + áudio)

python src/predict.py \
  --image "caminho/para/imagem.jpg" \
  --model_path "checkpoints/model_epoch_10.pth" \
  --beam_width 5

O script irá:

  1. ✅ Processar a imagem
  2. ✅ Gerar a legenda no terminal
  3. ✅ Salvar descricao_audio.mp3 na raiz do projeto

🎛️ Argumentos da Linha de Comando

Train Script

Argumento Descrição Padrão
--epochs Número de épocas 10
--save_dir Diretório para salvar checkpoints ./checkpoints

Predict Script

Argumento Descrição Padrão
--image Caminho da imagem -
--model_path Caminho do checkpoint checkpoints/best.pth
--beam_width Largura do beam search 5

📦 Dependências Principais

# Deep Learning
torch>=2.0.0
torchvision>=0.15.0

# NLP
transformers>=4.30.0
clip>=1.0

# Text-to-Speech
gtts>=2.3.0
pydub>=0.25.0

# Image Processing
pillow>=10.0.0
opencv-python>=4.8.0

# Utilities
numpy>=1.24.0
tqdm>=4.66.0

# Visualization
matplotlib>=3.7.0

🚀 Roadmap: Próximos Passos

🔹 1. App Mobile (React Native)

  • Interface para captura de fotos em tempo real
  • Botão de acessibilidade para ativar descrição
  • Integração com câmera do smartphone
  • Modo offline com modelo otimizado

🔹 2. Attention Maps Visualization

  • Visualizar onde o modelo "focou" para gerar cada palavra
  • Heatmaps sobrepondo a imagem original
  • Análise de interpretabilidade do modelo

🔹 3. Suporte Multilíngue

  • Tradução automática da descrição para PT-BR
  • Síntese de voz em português
  • Tokenizer multilíngue (mBERT)

🔹 4. Detecção de Objetos + Captioning

  • Pipeline híbrido: YOLO → Detectar objetos → Descrever cena
  • Descrições mais estruturadas (lista de objetos + relações espaciais)
  • Exemplo: "Na esquerda há uma cadeira, no centro uma mesa..."

🔹 5. Fine-Tuning com RLHF

  • Reinforcement Learning from Human Feedback
  • Usuários avaliam qualidade das descrições
  • Modelo aprende preferências humanas

✅ Principais Aprendizados

  • Arquitetura Encoder-Decoder: Implementação completa de multimodalidade (visão + linguagem)
  • Cross-Attention: Mecanismo que permite o decoder "focar" em regiões da imagem
  • Beam Search: Inferência mais sofisticada que greedy decoding
  • Teacher Forcing: Técnica essencial para treinar modelos autoregressivos
  • Gradient Clipping: Crucial para estabilidade em Transformers
  • Tecnologia Assistiva: Aplicação prática de AI para impacto social positivo

🎯 Conclusão

O Blind Assist AI demonstra com sucesso a aplicação de Deep Learning multimodal para criar tecnologia assistiva, conectando visão computacional e processamento de linguagem natural.

Conquistas:

  • ✅ Arquitetura Encoder-Decoder completa implementada do zero
  • ✅ Beam Search para geração de texto de alta qualidade
  • ✅ Pipeline end-to-end: Imagem → Texto → Áudio
  • ✅ Mecanismos de atenção para interpretabilidade

Impacto Social:

  • 🌍 Potencial de melhorar a vida de milhões de pessoas com deficiência visual
  • 🤝 Tecnologia assistiva acessível e escalável
  • 📱 Base para aplicativos mobile de acessibilidade

Este projeto serve como demonstração de como Deep Learning pode ser usado para resolver problemas reais de acessibilidade e inclusão, com potencial de impacto social significativo.


📌 Autor

Álvaro Braz

LinkedIn

Projeto desenvolvido para fins de estudo, pesquisa e portfólio profissional em Deep Learning, Multimodalidade e Tecnologia Assistiva.


🙏 Agradecimentos

  • OpenAI CLIP: Por tokenizer e embeddings multimodais
  • PyTorch Team: Framework excepcional
  • gTTS: Síntese de voz acessível
  • Comunidade de Acessibilidade: Por feedback sobre necessidades reais
  • Vaswani et al. (2017): Paper original "Attention is All You Need"

📚 Referências

  1. Vaswani, A., et al. (2017). Attention is All You Need. NeurIPS.
  2. Xu, K., et al. (2015). Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. ICML.
  3. Anderson, P., et al. (2018). Bottom-Up and Top-Down Attention for Image Captioning. CVPR.
  4. Radford, A., et al. (2021). Learning Transferable Visual Models From Natural Language Supervision. ICML.

⚠️ Aviso Importante

Este projeto é desenvolvido para fins educacionais e de pesquisa. Para uso em produção como tecnologia assistiva real, seria necessário:

  • ✅ Validação extensiva com usuários com deficiência visual
  • ✅ Certificação de acessibilidade
  • ✅ Testes de robustez em diferentes condições
  • ✅ Considerações de privacidade e segurança
  • ✅ Otimização para dispositivos móveis

About

A Neural Image Captioning system built from scratch with PyTorch. Features a ResNet + Transformer architecture, Beam Search inference, and Text-to-Speech (TTS) for accessibility.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages