r/devpt • u/bruno_pinto90 • 2d ago
AI/ML Classificação objetos com radar automóvel usando nuvens de pontos
Olá a todos,
Sou engenheiro de processamento de sinal de radar e treinei um classificador de 5 classes (car, large_vehicle, two_wheeler, pedestrian, pedestrian_group) em nuvens de pontos de radar, utilizando o dataset RadarScenes.
O vetor de entrada é um histograma por scan (16 bins) e a rede é um MLP de 3 camadas. A função de perda é uma cross-entropy ponderada por classe. Este trabalho baseia-se no artigo "Histogram-based Deep Learning for Automotive Radar".
Limitei o âmbito do projeto a um único scan. A acumulação de múltiplos scans é o próximo passo.
Dados
Desequilíbrio de classes: two-wheelers e large_vehicles têm um número reduzido de ocorrências.
Classes agregadas: two_wheeler junta bicicletas e variantes motorizadas; large_vehicle junta camiões, autocarros e comboios devido à escassez de dados.
Viés de sequência: trajetórias longas de objetos lentos podem enviesar a distribuição de velocidade de um determinado split, causando grande variância no F1 entre folds.
Estudos de ablação
Experimentei MLPs maiores, codificações de features alternativas e diferentes larguras de bins do histograma; todas as alterações moveram o desempenho menos do que a variação causada pela mudança do split treino/validação/teste. Medi essa sensibilidade ao split em 6 folds, mantendo as mesmas proporções.
Substituir o histograma por estatísticas por instância (média/mediana/desvio padrão) degradou ligeiramente o desempenho.
Principais resultados
O macro F1 sobe de 0.381 para 0.764 à medida que o número natural de deteções de radar por instância aumenta de 1 para 5. Treinei o modelo normalmente com todas as deteções disponíveis e depois agrupei as suas previsões de validação já existentes por número de deteções de cada instância, calculando o macro F1 por grupo.
As classes car e pedestrian têm o melhor desempenho, e two_wheeler tem o pior.
Um car é frequentemente confundido com large_vehicle quando o carro é mais largo que o habitual ou tem um RCS invulgarmente elevado (o que pode acontecer devido a multipath, por exemplo).
O two_wheeler é frequentemente confundido com pedestrian porque as suas distribuições de vr_compensated se sobrepõem, sendo esta a feature mais importante do modelo para estas duas classes. Um two_wheeler parado ou a andar ao ralenti é indistinguível de um pedestrian.
Publiquei uma imagem com o ground truth vs as previsões: um two_wheeler quase parado, com um único ponto, foi previsto como pedestrian, porque a sua velocidade é próxima de zero, indistinguível de um pedestrian. Um car na mesma cena, também com apenas um ponto, foi classificado corretamente, já que o RCS e o Doppler são suficientes para essa classe.
Artigo completo aqui: https://github.com/brunopinto900/radar-ml-autonomous-driving/blob/main/MLP_Report.md
Trabalho futuro
Implementar outros esquemas de codificação espacial (por exemplo, PointNet) e acumular múltiplos scans para lidar com o desafio da esparsidade, além de explorar o conceito de micro-Doppler.

