单眼三维行人定位及不确定性估计
monoloco的Python项目详细描述
单声道
< Buff行情>我们从单目rgb图像中解决了三维人体定位的基本不适定问题。
受神经网络输出点估计的限制,
我们用一种新的神经网络来解决任务中的模糊性,该神经网络通过
基于拉普拉斯分布的损失函数。
我们的架构是一个重量轻的前馈神经网络,它可以预测给定的二维人体姿势的三维坐标。
该设计特别适合于小训练数据和跨数据集的泛化。
我们的实验表明(i)我们在kitti和nuscenes数据集上的性能优于最新的结果,
(ii)对于远处的行人甚至优于立体声,并且(iii)估计有意义的置信区间。
在有限的观测和分布外样本的情况下,我们进一步分享对不确定性模型的见解。
@article{bertoni2019monoloco,
title={MonoLoco: Monocular 3D Pedestrian Localization and Uncertainty Estimation},
author={Bertoni, Lorenzo and Kreiss, Sven and Alahi, Alexandre},
journal={arXiv preprint arXiv:1906.06059},
year={2019}
}
查看我们的视频,方法说明和定性结果请访问YouTube
提供现场演示!(更多信息请参见网络摄像头部分)
设置
安装
python 3是必需的。不支持Python2。 不要克隆此存储库,并确保当前目录中没有名为monloco的文件夹。
pip3 install monoloco
为了开发monoco源代码本身,您需要克隆此存储库,然后:
pip3 install -e '.[test, prep]'
nuscenes开发工具包需要python 3.6或3.7。 pifpaf姿势检测器的所有详细信息,请访问openpifpaf
数据结构
Data
├── arrays
├── models
├── kitti
├── nuscenes
├── logs
运行以下命令创建文件夹:
mkdir data
cd data
mkdir arrays models kitti nuscenes logs
预先培训的车型
- 从下载Monoco预培训模型
谷歌硬盘并将其保存在数据/模型中
(默认)或在任何文件夹中,并通过命令行选项调用它
--model<;model path>;
- PIFPAF预先训练的模型将在第一次运行时自动下载。
使用命令行选项时,有三个标准的、经过预训练的模型可用
--检查点resnet50
,--检查点resnet101
和--检查点resnet152
。 或者,您可以从openpifpaf下载pifpaf预训模型 并使用--checkpoint<;pifpaf model path>;
接口
所有的命令都是通过一个名为main.py
的主文件运行的。
要检查解析器和子解析器(包括openpifpaf)的所有命令,请运行:
python3-m monoloco.run--帮助
python3-m monoloco.run predict--帮助
python3-m monoloco.run train--帮助
python3-m monoloco.run eval--帮助
python3-m monoloco.run prep--帮助
或者检查文件monoco/run.py
预测
predict脚本接收图像(或使用glob表达式的整个文件夹)。
调用pifpaf对图像进行二维人体姿态检测
并运行monoloc以获取检测到的姿势的三维位置。
命令 输出选项包括json文件和/或在正面模式下显示图像上的预测,
鸟瞰模式或组合模式可指定为with 如果您提供一个ground truth json文件来比较monloco的预测,
该脚本将使用联合度量上的交集匹配每个检测。
可以使用子parser 如果您不提供一个基本真相文件,脚本将寻找一个预定义的路径。
如果找不到文件,它将生成图像
所有的预测都没有地面真值匹配。 下面是一个有和没有基本真理匹配的例子。它们已创建(添加或删除 与地面真相匹配(仅匹配人员):
没有地面真实匹配(所有检测到的人):
为了准确估计距离,焦距是必要的。
然而,在校准矩阵不可用的情况下,仍有可能在图像上测试monoco。
绝对距离没有意义,但相对距离仍然有意义。
下面是一个关于来自Web的通用图像的示例,使用创建:
Monoco可以在只有CPU和低分辨率图像(如256x144)的个人计算机上以~2fps的速度运行。
它支持3种可视化类型: 上面的gif是在macbook上运行命令获得的: 下载Kitti地面真相文件和摄像机校准矩阵进行训练
从这里和
分别保存到 从nuscenes下载nuscenes数据集(mini或trainval)。
将其保存在任何位置,并将其软链接到 nuscenes预处理需要 monoloc是使用二维人体姿势关节进行训练的。要创建它们,请在kitti或nuscenes训练图像上运行pifaf。
您可以运行predict脚本并使用 Monoloco是使用与地面真实位置相匹配的二维人体姿势关节进行训练的。
努塞内斯或基蒂阿塔塞特要创建关节,请运行: 预处理脚本还输出第二个名为names-<;date time>;.json的json文件,该文件提供一个索引字典
通过图像名称可以方便地访问用于评估和预测目的的地面真相文件。 提供包含预处理关节的json文件作为参数。 简单如 所有的超参数选项都可以在 在日志空间中提供随机搜索。例如: 我们为在nuscenes或kitti上训练的模特提供kitti评估。我们把它们和其他单眼
立体声基线:--networks
定义是否保存pifpaf输出、monloco输出或两者都保存。
您可以在openpifpaf上检查pifpaf的所有命令。
--输出类型
地面真值匹配
prep
生成基本真相文件,并使用命令--path\u gt
调用该文件。
有关详细信息,请检查预处理部分,或从
此处--path-gt
):
python3-m monoloc.run predict--glob docs/0022282.png--output戡type combined--scale 2--model data/models/monoloc-190513-1437.pkl--n戡dropout 50--z戡max 30
无校准矩阵的图像
python3-m monoloc.run predict--glob docs/surf.jpg--输出类型组合--模型数据/模型/monoloc-190513-1437.pkl--n庠退出50--z庠max 25
网络摄像头
front
,bird
和combined
。
可以在不同的窗口中组合多个可视化效果。python3 -m monoloco.run predict --webcam --scale 0.2 --output_types combined --z_max 10 --checkpoint resnet50 --model data/models/monoloco-190513-1437.pkl
预处理
数据集
1)基蒂数据集
data/kitti/gt
和data/kitti/calib
中。
要提取pifpaf关节,还需要下载training images软链接到data/kitti/images
2)使用数据集
数据/nuscenes
pip3 install nuscenes devkit
要预处理的批注
--networks pifpaf
输入训练关节
python3-m monoloco.run prep
指定:--dir_ann
包含kitti或nuscenes的pifpaf关节的注释目录。--数据集
要预处理的数据集。对于nuscenes,所有三个版本的
支持数据集:nuscenes_mini、nuscenes、nuscenes_teaser。用于评估的基本事实文件
培训
python3-m monoloco.run--train--joints<;json file path>;
python3-m monoloco.run train--help中选中。
超参数调整
python3-m monloco.run train--hyp--multiplier 10--r\u seed 1
。
乘法器的一次迭代包括6次运行。评估(Kitti数据集)
- mono3d:从此处下载验证文件
并将它们保存到
data/kitti/m3d
- 3dop:从此处下载验证文件
并将它们保存到
data/kitti/3dop
- 单深度:使用以下脚本计算每个实例的平均深度
这里
并将它们保存到
data/kitti/monodepth
- 几何基线:提供几何基线比较。
运行以下程序可获得用于比较的平均几何值:
python3-m monoco.run eval——几何——模型数据/models/monoco-190719-0923.pkl——关节数据/arrays/joints-nuscenes嫒teser-190717-1424.json
运行得到以下结果:
python3-m monoco.run eval--模型数据/models/monoco-190719-0923.pkl--生成--包含Kitti图像的PIFPAF注释的目录>;