4D毫米波雷达分类和工程实现

4D毫米波目标检测信息丰富,可获得目标3维位置信息、径向速度vr和rcs等,能够对目标准确分类。

4D毫米波和激光做好时空同步,可以用激光目标给4D毫米波做标注,提升标注效率。

1 激光用做4D毫米波分类真值

128线激光推理的结果作为4D毫米波雷达的真值,但不同类别的尺寸存在重叠,存在分类错误可能。

1.1 小车,类别0,点数0~70,长度2m~7m,宽度1.6m~2.7m

1.2 大车,类别1,点数0~120,长度4.5m~14m,宽度1.9m~3.3m

1.3 两轮车,类别4,点数0~24,长度1.4m~2.4m,宽度0.55m~1.1m

1.4 行人,类别5,点数0~14,长度0.5m~1.5m,宽度0.55m~0.9m

总体来看,128线激光标注的真值可靠性较高,但仍存在一些小问题,会对4D雷达分类结果造成一定影响,如果要求更高的标注准确度和精度,则需要提升128线激光雷达目标检测的性能,或者人工辅助标注。

2 特征统计和分类验证

对标注数据进行统计分析,部分统计结果如下:

2.1 行人特征

2.2 两轮车特征

2.3 运动小汽车特征

2.4 运动大巴特征

从统计结果可以发现,不同目标的特征有明显差异,比如点云数量、RCS等,通过对这些特征数据的训练,则能对毫米波目标进行分类。

实验使用了距离、朝向、点云数、最大rcs、最大snr做训练,使用了9000多组数据,80%用做训练集,20%用做测试集,验证两轮车和一般车辆的分类准确率。

总共使用了3种机器学习方法,最近邻(KNN)、支持向量机(SVM)和决策树(Decision Tree),分类准确率均在95%以上。

3 决策树用作4D毫米波分类的实现方法

使用4D毫米波雷达的一些特征,可以对其做准确的分类。这里使用点数、距离、方位角、长、宽作为特征,长宽通过估计目标朝向后将点云投影到朝向方向上计算得到。本文使用决策树算法来实现分类,下面是详细的实现过程。

训练使用python的sklearn,直接导入即可。

python 复制代码
from sklearn.tree import DecisionTreeClassifier

这里使用了三个类别(小车、大车、自行车)8万多组数据,80%用做训练集,20%用做测试集。

python 复制代码
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

然后调用函数进行训练。

python 复制代码
decision_tree = DecisionTreeClassifier()       

decision_tree.fit(X_train, y_train)

训练完成后在测试集上验证。

python 复制代码
y_train_pred = decision_tree.predict(X_train)

y_test_pred = decision_tree.predict(X_test)

再验证准确率。

python 复制代码
from sklearn.metrics import accuracy_score

print('decision tree train accurary socre:', accuracy_score(y_train, y_train_pred), 'test accurary socre:', accuracy_score(y_test, y_test_pred))

train_error_score = 1 - accuracy_score(y_train, y_train_pred)

test_error_score = 1 - accuracy_score(y_test, y_test_pred)

print('decision tree train error socre:', train_error_score, 'test error socre:', test_error_score)

如果使用默认参数,则训练集准确率为100%,测试集准确率为95%。

获取决策树深度,发现有33层,叶子数有2179个,实在过于庞大。

python 复制代码
tree_depth = decision_tree.get_depth()

tree_leaves = decision_tree.get_n_leaves()

print('depth',tree_depth,',leaves:',tree_leaves)

调用决策树可视化工具,可以看到结果,由于叶子树太多,全屏显示只能看到一个个小点。

将其放大到100%才能看清细节。

这么多的层数和叶子树存在过拟合风险,而且实现的代码也非常复杂,因此考虑降低层数。

python 复制代码
decision_tree = DecisionTreeClassifier(max_depth=9) 

在生成决策树模型的时候设置最大深度为9,则最后生成的决策树体量大幅减小,实测结果层数为9,叶子树为230。

训练集准确度有所降低,但测试集反而提升,表明降低了过拟合,提升了泛化性能。

模型生成之后,代码编写费事费力,这里参考这位博主的方法,用代码自动生成。不过python脚本有点小问题,需要自行发现修改才能得到最后的结果。

使用Python训练好的决策树模型生成C++代码_class=versicolor-CSDN博客

使用m2cgen库也可以实现模型到c代码的转换, 详细信息可以查看m2cgen · PyPI

python 复制代码
import m2cgen as m2c

code = m2c.export_to_c(decision_tree)

file = open('radar_tree_m2cgen_code.txt','w')

file.write(code)

file.close()

最后得到可以运行的C语言代码。

如果对效果不满意,可以使用不同的特征组合进行对比实验,以获得期望的结果。

相关推荐
NAGNIP9 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab10 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab10 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP13 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年14 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼14 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS14 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区15 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈15 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang16 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx