Este projeto implementa uma solução de ponta a ponta para a competição do Kaggle "CSIRO - Image2Biomass Prediction". O objetivo é desenvolver um modelo de Deep Learning (Visão Computacional) capaz de prever cinco componentes de biomassa (ex: Dry_Green_g, Dry_Clover_g) analisando imagens aéreas de pastagens.
Este repositório documenta a evolução de um modelo de baseline (base) para uma arquitetura SOTA (Estado-da-Arte), detalhando o pipeline de dados e as estratégias de treino.
- Competição: CSIRO - Image2Biomass Prediction
- Linguagem: Python
- Bibliotecas de Dados: Pandas, NumPy, Scikit-learn
- Frameworks de Deep Learning: TensorFlow/Keras e PyTorch/Transformers (Hugging Face)
- Outras: Kaggle API, Streamlit (para a app de protótipo)
O primeiro desafio técnico foi o pré-processamento dos dados. O train.csv fornecido estava em formato "longo", com 5 linhas para cada imagem (uma por alvo). Para o treino, era necessário um formato "largo" (uma linha por imagem, com 5 colunas de alvos).
Ação (ETL):
- Carregar: Ler o
train.csv(1785 linhas). - Pivotar: Usar
pandas.pivot_tablepara transformar os dados.index='image_path'columns='target_name'values='target'
- Juntar: Combinar os alvos "pivotados" com os metadados originais (como
State,Species). - Salvar: O resultado é um
train_processed_WIDE.csvlimpo (357 linhas), que se torna a nossa "fonte da verdade" para o treino.
Com um dataset de treino muito pequeno (357 imagens), o risco de overfitting (sobreajuste) era o inimigo principal. A estratégia evoluiu em duas fases:
O primeiro modelo foi construído em TensorFlow/Keras para estabelecer uma baseline robusta.
-
Modelo:
EfficientNetB0(pré-treinado em ImageNet). - Técnica: Transfer Learning (Aprendizagem por Transferência)
-
Estratégia de Treino:
-
Treino da "Cabeça" (Head): O
base_modelfoi "congelado" (trainable=False) e apenas uma nova "cabeça" de regressão foi treinada por 60 épocas. -
Callbacks:
ModelCheckpointfoi usado para salvar apenas o melhor modelo, eEarlyStoppingpara prevenir treino desnecessário.
-
Treino da "Cabeça" (Head): O
-
Resultado: Esta abordagem foi bem-sucedida e alcançou um score de 0.40
$R^2$ no leaderboard público.
Para bater a baseline de 0.40, o projeto foi migrado para uma arquitetura SOTA: DINOv2 (Vision Transformer), um modelo que aprendeu representações visuais robustas através de auto-supervisão.
- Framework:
PyTorch&Transformers (Hugging Face). - Modelo:
metaresearch/dinov2(PyTorch/base). - Técnica de Combate ao Overfitting:
- Data Augmentation: Implementei
torchvision.transforms(comoRandomHorizontalFlip,RandomRotation,RandomVerticalFlip) para "mexer" nas 303 imagens de treino, criando dados novos em cada época. - Fine-Tuning em Duas Fases:
- Fase A (Treino da Cabeça): Treino de uma "cabeça" de regressão em PyTorch com o
dino_basecongelado (requires_grad=False). - Fase B (Fine-Tuning): O
dino_basefoi "descongelado" e treinado com uma taxa de aprendizagem (learning rate) muito baixa (1e-6), permitindo ao modelo adaptar-se ao nosso problema específico sem "esquecer" o seu conhecimento prévio.
- Fase A (Treino da Cabeça): Treino de uma "cabeça" de regressão em PyTorch com o
- Data Augmentation: Implementei
-
Modelo Baseline (EfficientNetB0): 0.40
$R^2$ -
Modelo Avançado (DINOv2):
57
O DINOv2 provou ser um backbone superior, e a combinação de Data Augmentation e Fine-Tuning foi crucial para gerir o dataset pequeno e melhorar o score da baseline.
Este projeto existe em dois locais:
Uma app interativa que demonstra o conceito de multi-input (combinando imagens com metadados).
# 1. Clone o repositório
git clone https://github.com/wSanice/Biomass_Prediction_multi-imput.git
cd Biomass_Prediction_multi-imput
# 2. Instale as dependências
pip install -r requirements.txt
# 3. Execute a app
streamlit run app.py