python svm 实战_人工智能实战笔记之军用雷达识别项目

前言

一天一篇文章太难了没得发了,我把我先前做的一个雷达识别项目的笔记分享给你们吧(其实那个时候我还在打下手,原谅我吹牛逼了。)有点乱,其实我也屡不清楚了,看着有用就拿着用别客气。

bdcdb91d4f761e273144b37f5ba4c6ee.png

雷达识别项目实战日志

回顾一

  • SVM 一定不要忘记Normalize,而且要注意用training set的norms 和 mean 来 normalize testing set。特别是要注意二者的先后顺序要统一,如果training set是先norm后mean,那么test set也要先norm 后 mean。sklearn.preprocessing.normalize得到的norm要开方!
  • 正确的标注非常重要
  • joblib可以储存object,特别是训练好的classifier,pickle也可以做到,但是效率不如Joblib
  • 不仅要分析正确率,还要分析false positive和false negative,因为当negative sample非常多的时候,比如positive:negative = 1:10,那么即使所有的prediction都是0,正确率也大于90%。
  • 在对于SVM这样的分类器调参数的时候,可以用spreadsheet记下来调参数的过程。
  • Python无法选择传引用还是传递值,默认的传引用,除非是不能更改的变量。
  • Python的等号在赋值包含其他元素的变量(比如list)的时候,只是将同一个内存单元的指针指向了新的变量名,改变旧变量名所指向的内存单元的值会改变新变量。
  • Python 的变量传递规则结合到对feature进行的normalize,就有可能会重复normalize
  • 可以将标记为positive的像素点overlay到radar image上,来看是否标记了正确的groundtruth。

回顾二

  • 做可视化的时候,如果想要从图片生成视频,最好把每个图片都按照0001,0002,0003 这样固定的位数排序,否则在用os.listdir(dir_path)这种口令时候,会按照从高到低位的数字来排序,比如1,100,1000
  • 注意不同传感器的坐标之间的转换
  • ros的quaternion与别的系统顺序不同
  • 用新的python环境要pip install rospkg
  • 不同物体的bounding box不是按照marker points的序号排列的,而是按照marker points的颜色排列的,所以用相机来做annotation的时候,要筛选bounding box的颜色。
  • hard negatives are very important
  • 写一个helper的脚本,每天下班后让电脑跑一遍cross-validation
  • 循环引用package的问题:可以在使用该package的地方(比如函数内)使用import,避免循环引用
  • 用TSNE(t-distributed stochastic neighboring embedding)可以可视化高维向量。
  • tsne的运算量很大,可以先用pca把数据降维到50
  • line_profiler 可以计算代码的耗时,用来寻找hotspot

回顾三

  • 程序的实现远比想象中难,比如把雷达从极坐标remap到直角坐标生成一个新的矩阵,矩阵中每个新的cell的物理尺度就不再随着距离而变化了,但是这个warp是不直观的。所以,在真正编程实现之前,一定要想好究竟这样做是不是合理的。比如插值的问题,最开始认为把原来的16个角度remap到笛卡尔坐标系就行了,没想到只map这么少的点是难以做插值的,忘记考虑数据稳定性的问题了。
  • 程序一定要尽可能地模块化,采集数据时候,数据的导出格式一定要尽可能固定,在最早的、最简单的数据时候,就把这个格式想好,把所有可能的情况都考虑到。比如:一个帧有一个detection就要考虑到未来一个帧有多个detection时候的情况,以及多个detection的label不同的情况。
  • 关于雷达的16个beam的角度与实际物理空间不对应的问题,应该在得到radar cube之后直接转换,而不是在visualization时候才转换。
  • 对数据的清洗太重要了,比如说SSD只能独立地检测bike和human,但我要的是cyclist和human,要想办法把距离bike的detection最近的human的detection删掉,但又要确保这个Human足够近从而不会勿删。有两套逻辑,第一套是删掉所有距离自行车在一定的threshold之下的行人,第二套是根据自行车的数量n删掉最多n个行人,而这n个行人是距离每个自行车最近、且在threshold以下的行人。选第二个吧,fuck。如果这时候SSD在同一个地方predicts出两个bbx怎么办?
  • 为什么我们的相机检测node用的是SSD?应该主要是考虑到效率。但是SSD的准确性确实不是很高。
  • 取negative samples的方法也要改变,之前我们只有一个行人,只要不在那个行人的位置取,其他的位置都可以,现在我们有多个行人,取点就不能在某一个行人的位置外任意取了。
  • SSD对于纵向的自行车检测效果很差,SSD在自行车被其他行人挡住时候无法检测到。
  • 现在有了内存占用的问题,学校的工作站是64G,可以不考虑,但我的台式机内存是8G的,我的谷歌云instance是15G的,在后两种内存容量下,均会出现内存占用太高导致程序中断的问题。我把存储成npy的文件分成了若干个小的npy,结果还是不行,最后发现问题是我之前用来上取样原始240 x 16雷达数据的上采样因子太大了,把这个因子变小就可以了。
  • 判断一个数是不是None可以用

if value is None:

pass

  • 先插值再相加与先相加再插值是不一样的效果,另外插值只根据位置,不根据Doppler bins,因此还是一个2D插值
  • 每次做demo还是应该从一张图的prediction开始。
  • 今天开始把之前的python脚本全部都归档到modules
  • 需要项目的顶层文件夹的时候,可以import一个cfg文件
d0892f1177d9b5319ca715e82cb49eb6.png

最后

告诉你们一个好消息老大和一家公司谈妥了合作教学,1月10日试讲。再告诉你们一个坏消息,老大说我技术不过关让我自己一边做项目玩泥巴去,哎!少了一次当祖国园丁的机会真烦。有需要加入到人工智能这个行业的老铁私信我。(什么基础(数学理论基础和编程基础)都没有的就不要来了,其实我比较适合当劝退专家。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,下面我来为你介绍一下 OpenCV-Python 实现目标检测的过程。 OpenCV-Python 是一款基于 Python 的计算机视觉库,它可以帮助我们完成各种图像处理任务,包括图像的读取、处理、显示等。在使用它进行目标检测时,我们可以使用传统方法 HOG+SVM 实现。 HOG(Histogram of Oriented Gradient)特征是一种常用的图像特征,它可以描述图像中的边缘、角点等信息,其中梯度方向直方图是 HOG 特征的核心部分。在目标检测中,我们需要先提取出图像中的 HOG 特征,然后再使用 SVM(Support Vector Machine)进行分类,从而实现目标检测。 下面是一个简单的 OpenCV-Python 实现目标检测的示例代码: ```python import cv2 # 加载 SVM 分类器 svm = cv2.ml.SVM_load('svm.xml') # 加载测试图片 img = cv2.imread('test.jpg') # 创建 HOG 描述符 hog = cv2.HOGDescriptor() # 设置 SVM 分类器 hog.setSVMDetector(svm) # 检测目标并绘制矩形框 rects, weights = hog.detectMultiScale(img, winStride=(8, 8), padding=(32, 32), scale=1.05) for (x, y, w, h) in rects: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) # 显示结果 cv2.imshow('result', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在代码中,我们首先加载了训练好的 SVM 分类器,并加载了测试图片。然后创建了 HOG 描述符,并设置 SVM 分类器。最后使用 detectMultiScale 函数检测目标,并绘制矩形框,最终在窗口中显示检测结果。 当然,这仅仅是一个简单的示例,实际的目标检测过程还需要根据具体的应用场景进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值