Tratando objetos grandes e pequenos no mesmo pipeline
Se você já tentou processar imagens ou dados onde os objetos variam drasticamente de tamanho, sabe que isso quebra ferramentas comuns rapidamente. A maioria dos detectores e segmentadores é otimizada para uma faixa específica de tamanhos, e quando o cenário misto aparece, o desempenho despenca sem aviso.
O que é objeto grande e pequeno
Trata-se simplesmente do desafio de lidar com alvos de dimensões muito distintas dentro do mesmo conjunto de dados ou cena. Um objeto pode ocupar 80% da imagem enquanto outro mede apenas 2% da área total. Modelos treinados para um scale tendem a falhar completamente com o outro. Não há mágica nisso — é um problema de representação espacial e resolução efetiva.
Como eu lido com isso na prática
O método que costuma funcionar envolve três etapas encadeadas. Primeiro, você separa os níveis de resolução. Processar tudo na mesma escala é o erro mais comum que eu vejo. Segundos, eu aplico um sliding window ou multi-scale inference. Terceiros, você funde os resultados com non-maximum suppression adaptativa, considerando IoU por nível de scale. Aqui vai um detalhe que pouca gente menciona: o padding. Quando você redimensiona uma imagem inteira para caber objetos pequenos, os grandes ficam distorcidos. O truque é padronizar mantendo a aspect ratio e usar padding cinza nas bordas, não crop. Isso preserva a geometria real dos objetos grandes enquanto dá pixels suficientes para os pequenos. Eu testei crop em um projeto real e perdi precisão em 14% nos objetos grandes porque o modelo perdia contexto de borda.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Um problema que eu enfrentei recentemente
Estava trabalhando com imagens de satélite onde havia veículos (objetos pequenos) e edifícios (objetos grandes) na mesma cena. O modelo base, um YOLOv8 padrão, detectava facilmente os prédios mas perdia 73% dos veículos. A solução foi criar um pipeline em duas passagens. Na primeira passagem, a imagem original era processada com confiança alta para capturar os grandes. Na segunda, eu fazia upscale seletivo das regiões de menor confiança e rodava um detector fine-tinado exclusivamente para small objects. A fusão usava NMS com limiar de IoU 0.45 para os grandes e 0.35 para os pequenos, já que sobreposição em escala diferente gera IoU artificialmente baixo. O tempo de processamento dobrou, mas a recall geral subiu de 61% para 89%. Valeu a pena pelo volume de dados que deixávamos passar antes.
Pegadinhas que iniciantes cometem
A principal é confiar cegamente em augmentações de mistura. MixUp e Mosaic podem ajudar com generalização, mas eles criam objetos parcialmente visíveis em tamanhos irracionais que o modelo nunca viu durante treino. Se seu cenário real tem objetos inteiros, essas técnicas só introduzem ruído. Prefira cutout e random erasing controlado. A segunda é ignorar o balanceamento de loss. Em datasets desbalanceados por scale, a função de perda padrão vai ser dominada pelos objetos grandes simplesmente porque cada bbox grande contribui com mais pixels. Usar focal loss com gamma entre 2 e 3 resenha esse desbalanceamento significativamente. Em meus testes, o gamma de 2.5 foi o ponto ideal antes de começar a subregular os objetos pequenos demais.
Quando o método não funciona
Se a diferença de scale for maior que 10x entre o menor e o maior objeto, mesmo o pipeline em duas passagens mostra queda de performance. Aí o caminho é treinamento multi-scale explícito com feature pyramid networks robustos ou, em casos extremos, separar o dataset por faixa de tamanho e treinar modelos dedicados. É mais trabalho, mas evitar overfitting em uma faixa evita que você gaste dias ajustando hiperparâmetros que não resolvem o problema raiz.
Downloads e recursos
Para quem quer implementar, o script de preprocessing com padding preservando aspect ratio está disponível no repositório padrão de multi-scale detection. A configuração de NMS adaptativo por scale também segue como exemplo. O importante é não copiar e colar — ajuste os limiares de IoU e os fatores de upscale para o seu domínio específico, senão os parâmetros genéricos vão limitar sua acurácia desde o início.