单眼三维行人定位及不确定性估计

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以获取检测到的姿势的三维位置。 命令--networks定义是否保存pifpaf输出、monloco输出或两者都保存。 您可以在openpifpaf上检查pifpaf的所有命令。

输出选项包括json文件和/或在正面模式下显示图像上的预测, 鸟瞰模式组合模式可指定为with--输出类型

地面真值匹配

下面是一个有和没有基本真理匹配的例子。它们已创建(添加或删除--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

与地面真相匹配(仅匹配人员): 预测地面真相

没有地面真实匹配(所有检测到的人): 预测不匹配

无校准矩阵的图像

为了准确估计距离,焦距是必要的。 然而,在校准矩阵不可用的情况下,仍有可能在图像上测试monoco。 绝对距离没有意义,但相对距离仍然有意义。 下面是一个关于来自Web的通用图像的示例,使用创建: python3-m monoloc.run predict--glob docs/surf.jpg--输出类型组合--模型数据/模型/monoloc-190513-1437.pkl--n庠退出50--z庠max 25

无校准

网络摄像头

example image

Monoco可以在只有CPU和低分辨率图像(如256x144)的个人计算机上以~2fps的速度运行。 它支持3种可视化类型:frontbirdcombined。 可以在不同的窗口中组合多个可视化效果。

上面的gif是在macbook上运行命令获得的:

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)基蒂数据集

下载Kitti地面真相文件和摄像机校准矩阵进行训练 从这里和 分别保存到data/kitti/gtdata/kitti/calib中。 要提取pifpaf关节,还需要下载training images软链接到data/kitti/images

2)使用数据集

从nuscenes下载nuscenes数据集(mini或trainval)。 将其保存在任何位置,并将其软链接到数据/nuscenes

nuscenes预处理需要pip3 install nuscenes devkit

要预处理的批注

monoloc是使用二维人体姿势关节进行训练的。要创建它们,请在kitti或nuscenes训练图像上运行pifaf。 您可以运行predict脚本并使用--networks pifpaf

输入训练关节

Monoloco是使用与地面真实位置相匹配的二维人体姿势关节进行训练的。 努塞内斯或基蒂阿塔塞特要创建关节,请运行:python3-m monoloco.run prep指定:

  1. --dir_ann包含kitti或nuscenes的pifpaf关节的注释目录。

  2. --数据集要预处理的数据集。对于nuscenes,所有三个版本的 支持数据集:nuscenes_mini、nuscenes、nuscenes_teaser。

用于评估的基本事实文件

预处理脚本还输出第二个名为names-<;date time>;.json的json文件,该文件提供一个索引字典 通过图像名称可以方便地访问用于评估和预测目的的地面真相文件。

培训

提供包含预处理关节的json文件作为参数。

简单如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数据集)

我们为在nuscenes或kitti上训练的模特提供kitti评估。我们把它们和其他单眼 立体声基线:

mono3d3dop单深度和我们的 几何基线

  • 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注释的目录>;

Kitti_Evaluation基蒂评估表

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java操作数组上的字符串   java JAXB内容未实例化   图形在Java中如何绘制垂直居中的字符串?   java Apache Ant:使用Junit时出现NoClassDefFoundError   java无法从服务器上运行perl脚本   如何在java中沿树进行预排序遍历,并打印0和1以对应每个节点上的特定字符?   java如何创建。p12文件?   java线程访问无效   java只匹配命名空间中的XML节点,而不知道NS前缀   从java获取2d arraylist元素   数组Java动态集合对象   java Xpath通过通配符或布尔运算查找以相同名称开头的节点?   java注释元素类型   java在中看不到Super()。反编译后的类文件