数据集:
- YOLO v3:
./images/dataset/xqqds-0620-train/
和./images/dataset/xqqds-0620-val/
- CNN Classifier:
./classifier/bbox/
模型文件和权重:
上传到 Google Drive
运行:
- 下载darknet,把python-numpy一起编译进去,见 lyq/CW-Hw/hw3/hw3_1
- 下载模型文件和权重
- 检测视频,运行
./detector/detect2-2.py
;检测图片,运行./detector/detect0-2.py
目录结构:
./
|----darknet/
| |----darknet.py
| |----final.weights
| |----cfg/
| |----model.cfg
|----detect2-2.py
|----detect0-2.py
|----bump.mov
|----test.jpg
|----model.json
|----weights.h5
运行环境:
见 lyq/CW-Hw/hw3/hw3_1 配置说明
python3 + keras + tensoflow-gpu + opencv3
文档、ppt、演示视频在 ./doc/final-pre/
有其他疑问的话,发邮件给我吧0.0
或者毛毛
或者崔崔
计算 相机内参(5)、畸变参数(3+2 径向、切向)
Matlab Camera Calibrator App
标定的代码见 ./calibration/calibration.m
mtx = np.array([[366.8414, 0, 337.4132],
[ 0, 366.1242, 182.8138],
[ 0, 0, 1.0000]])
dist = np.array([-0.347049837762688,
0.165398310868444,
0,
0,
-0.0444392622226221])
矫正代码见 ./calibration/test.py
使用Matlab计算单应矩阵
-
选点:
im = imread('im1.jpg'); imshow(im); [xi,yi] = getpts();
-
计算矩阵
K = fitgeotrans([xi yi],[xi2;yi2]','projective'); B = imwarp(im,K); imshow(B);
固定相机角度(螺丝刀,垫纸)
TAC砖代替标定布
困难:标定视野范围有限
解决:鸟瞰视图的转换矩阵跟高度没有关系,所以先把摄像头放在相对比较低的高度,扩大标定范围(标定鸟瞰视图转换矩阵)。然后把摄像头放回小车,标定像素距离单位。
测距最远距离:~6m
标定图(原图,实际中先增强对比度,不然找不到点....没有标定布的尴尬):
假的假的,后来又拿了一张重新拍了,啧啧啧
后来找到了一个好的位置,拍到了范围比较大的图,美滋滋
然后就重新标定了一下,新数据已改,图没换
标定像素距离单位:
- 5*60cm per 298pix
- 4*60cm per 238pix
- 3*60cm per 182pix
1 pix =~ 1cm
测试:
177(3*60), 172(3*60), 236(4*60)
精度:97.5%
标定鸟瞰视图底部到摄像机的距离:
p -> 底部:114像素
p -> 摄像机:4*60 = 240cm
底部 -> 摄像机:126cm
mat = np.array([[-0.5115, -1.4774, 428.8531],
[-0.0880, -3.6296, 847.1490],
[-0.0001, -0.0054, 1.0000]
])
测距代码见 ./toEyesView/birdsView/distance.ipynb
标定:
- 鸟瞰视图的 像素间距(m/pix)
- 鸟瞰视图下边界到摄像机的距离
图片 => 鸟瞰视图 => 点到图片底部距离d
点到相机距离 pd =? d + d' =? D
d'为底部到相机的距离(待标定)
- 手机拍摄 => resize
- 小摄像头拍摄 => calibration
- 百度、谷歌图片 => filter => resize
数据标注:labelImg
数据扩充:数据集 => 水平翻转 => 279张
VOC数据集 => filter => person
Yolo v3
训练集(~2k):bump * 3 + VOC2007-test * 0.5
验证集(~4k):bump * 7 + VOC2012-train+val * 0.5
训练步数:30k
计算的距离是框底部到相机的距离,但是当减速带是倾斜的时候,计算的距离就是减速带近点到相机的距离,而不是减速带中心。
当然了,也可以改进测距,计算框的中心到相机的距离再减去减速带的宽,就是减速带到相机的距离。
评估用到的距离数据,测距的时候也不是很准确。
有个问题:对距离的定义略有模糊。这里输出的距离到底是什么?
当前算出来的距离是,__减速带近点__到相机的水平距离,但是我们更倾向于算出相机到减速带的垂直距离,也就是相机到__减速带所在直线__的距离。
蓝:减速带所在直线
绿:对角线所在直线
红:检测框
检测框图像 => resize => CNN => 对角线类型 => 计算相机到对角线的距离