点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
作者:林大佬 | 来源:知乎 https://zhuanlan.zhihu.com/p/142776606 本文仅做学术分享,如有侵权,请联系删除。
·摄像头的投影矩阵,位姿变换; ·基于关键点热力图的预测模型; ·3D世界坐标系与摄像头坐标系的转换; ·摄像头坐标系与像素点的转换; ·摄像头内参外参的概念; ·必要的深度学习知识。
·原始版本只能从dataloader里面做inference,我们实现了只需要输入一张image,就可以将3D框预测出来并visualize; ·原始的版本有着各种各样的路径bug,而现在你可以传入一个KITTI的video sequence path,就可以直接对这个video进行预测,所有的内参外参都自动帮你处理; ·原始的版本依赖于DLA,我们尝试修改了不同的骨干网络,实验发现,更轻量的网络可以在更小的计算量下获得差不多的性能。 ·我们探索了模型在wild数据上的效果,比如我们从网上找的交通场景的3D检测方法(当然前提是你得知道摄像头的内参),具体实验结果我们也在我们的fork版本中有提供。
01 smoke模型结构

whl
xyz
class KittiSmokeDetectionInfo(object):
def __init__(self, line):
'''
[ 0.0000000e+00 1.6826042e+00 4.7441586e+02 1.8074373e+02
5.3575635e+02 2.2734413e+02 1.4526575e+00 1.6065563e+00
3.7408915e+00 -6.1363697e+00 -2.0827448e-01 3.2981182e+01
1.4986509e+00 6.4066571e-01]
'''
self.name = line[0]
self.alpha = float(line[1])
self.xmin = float(line[2])
self.ymin = float(line[3])
self.xmax = float(line[4])
self.ymax = float(line[5])
self.h = float(line[6])
self.w = float(line[7])
self.l = float(line[8])
self.tx = float(line[9])
self.ty = float(line[10])
self.tz = float(line[11])
self.rot_global = float(line[12])



02 端到端的单目3D目标检测
·标注的物体长宽高,在真实3D环境下的物体尺寸,单位是m; ·摄像头的内参,其实这个内参主要是将物体的中心点位置,映射到摄像机的坐标系下; ·物体的中心点位置; ·物体的航向角。
data_f = args.data
calib_f = args.calib_file
if not calib_f:
calib_f = os.path.join(os.path.dirname(
os.path.dirname(data_f)), 'calib_cam_to_cam.txt')
print('calib file: ', calib_f)
# we have to load image sequence or image's intrinsics K first
K = get_P_from_str(
'7.215377e+02 0.000000e+00 6.095593e+02 4.485728e+01 0.000000e+00 7.215377e+02 1.728540e+02 2.163791e-01 0.000000e+00 0.000000e+00 1.000000e+00 2.745884e-03')
K = K[:3, :3]
calib = get_P_from_str('7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 3.485728000000e+01 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 1.163791000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.745884000000e-03')
print('K: ', K)
print('P: ', calib)
if os.path.isdir(data_f):
all_imgs = glob.glob(os.path.join(data_f, '*.png'))
all_imgs = sorted(all_imgs)
print(all_imgs[0])
img = cv2.imread(all_imgs[0])
videowriter = cv2.VideoWriter('res.mp4', cv2.VideoWriter_fourcc(*'DIVX'), 25, (1242, 375))
for img_f in all_imgs:
# img = cv2.imread(img_f)
img = Image.open(img_f)
inn, target = prepare_data(img, cfg, K)
# 开始预测
03 最后
·模型真的是sensor independent的吗?假如我们有自己的数据集,用KITTI train的模型,是否也可以inference? ·如果我们要train自己的data,我们如何去prepare我们的数据?需要用到Lidar吗?
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿 
▲长按关注公众号

▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款 
圈里有高质量教程资料、可答疑解惑、助你高效解决问题 整理不易,请给工坊点赞和在看!

