行人轨迹预测ETH数据集坐标转换

这篇具有很好参考价值的文章主要介绍了行人轨迹预测ETH数据集坐标转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前记

最近几天对CVPR2018的一篇行人轨迹预测Social GAN进行了复现,过程中发现ETH数据集中行人的坐标已经转为了世界坐标,因此无法进行可视化,询问博主后得知要通过单应矩阵H将世界坐标反转为像素坐标,经过多次尝试成功反转,以此记录。

ETH数据集

官方链接下载的数据集分为两个文件夹seq_eth,seq_hotel以及README.txt,每个文件夹中为视频以及对应的标注信息,主要关注两个文件:obsmat.txt(标注)以及H.txt(单应性矩阵)。注:SGAN作者还对obsmat.txt进行了预处理,仅保留了[frame_id, p_id, wpx, wpy],若复现SGAN建议直接下载作者提供的链接(否则要改动代码)

转换公式


这个不难理解,左乘逆矩阵反转嘛,但是转换前和转换后还需要对两个坐标做一点处理。

1.worldpos为3x1列向量,[wpx, wpy, wpz],前两个元素直接读取就好,但ETH数据集没有使用wpz,标注中wpz全为0,转换前需要将wpz设置为1,即   

2.求得的pixelpos同理,[px, py, pz],但需要将pz再转为1,即  ,像素坐标系中pz是无意义的,这可能也是为什么要再除以pz。

详细代码

    data = read_file('./datasets_/eth/test/obsmat.txt')
    H = np.array([
        [2.8128700e-02, 2.0091900e-03, -4.6693600e+00],
        [8.0625700e-04, 2.5195500e-02, -5.0608800e+00],
        [3.4555400e-04, 9.2512200e-05, 4.6255300e-01]
    ])
    H_inv = np.linalg.inv(H)
    frames = np.unique(data[:, 0]).tolist()  # 总帧数
    frame_data = []
    pixel_poses = []
    for frame in frames:
        frame_data.append(data[frame == data[:, 0], :])  # 重组gt, frame_data列表的每一个元素代表当前帧下所有Person的出现情况
    for frame_data_ in frame_data:
        world_pos = np.vstack((frame_data_[:, 2], frame_data_[:, 4]))
        world_pos = np.vstack((world_pos, np.ones((world_pos.shape[1]))))
        pixel_pos = np.dot(H_inv, world_pos)
        pixel_pos_ = pixel_pos[:2, :] / pixel_pos[2:, :]
        pixel_poses.append(pixel_pos_)

其中read_file为SGAN作者提供的方法,稍做了一点修改(标注文件不一致的问题)

完整可视化代码

import numpy as np
import cv2


def read_file(_path, delim='\t'):
    data = []
    if delim == 'tab':
        delim = '\t'
    elif delim == 'space':
        delim = ' '
    delim = ' '
    with open(_path, 'r') as f:
        for line in f:
            line = line.strip().split(delim)
            line = [i for i in line if not i == '']
            line = [float(i) for i in line]
            data.append(line)
    return np.asarray(data)


if __name__ == '__main__':
    data = read_file('./datasets_/eth/test/obsmat.txt')
    H = np.array([
        [2.8128700e-02, 2.0091900e-03, -4.6693600e+00],
        [8.0625700e-04, 2.5195500e-02, -5.0608800e+00],
        [3.4555400e-04, 9.2512200e-05, 4.6255300e-01]
    ])
    H_inv = np.linalg.inv(H)
    frames = np.unique(data[:, 0]).tolist()  # 总帧数
    frame_data = []
    pixel_poses = []
    for frame in frames:
        frame_data.append(data[frame == data[:, 0], :])  # 重组gt, frame_data列表的每一个元素代表当前帧下所有Person的出现情况
    for frame_data_ in frame_data:
        world_pos = np.vstack((frame_data_[:, 2], frame_data_[:, 4]))
        world_pos = np.vstack((world_pos, np.ones((world_pos.shape[1]))))
        pixel_pos = np.dot(H_inv, world_pos)
        pixel_pos_ = pixel_pos[:2, :] / pixel_pos[2:, :]
        pixel_poses.append(pixel_pos_)

    video = cv2.VideoCapture(r'D:\yjy\PycharmProjects\sgan-master\ewap_dataset\seq_eth\seq_eth.avi')
    k = 0
    index = 0
    while True:
        _, frame = video.read()
        if frame is None:
            break
        img = frame.copy()
        img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        if k == frames[index]:
            positions = pixel_poses[index]
            positions = np.transpose(positions)
            for p in positions:
                cy, cx = np.int32(p)
                cv2.rectangle(img, (cx - 10, cy - 20), (cx + 10, cy + 20), (255, 255, 255), thickness=2)
            index = index + 1
            cv2.imwrite('./imgs/{}.jpg'.format(k), img)
        cv2.imshow('video', img)
        cv2.waitKey(10)
        k = k + 1

结语

本身方向并不是轨迹预测,机缘巧合下找到SGAN并进行复现,并且发现该方向相关资料较少,可能这个反转操作对大佬来说确是小菜一碟,在此献丑还望大家海涵,欢迎学术交流。文章来源地址https://www.toymoban.com/news/detail-769588.html

到了这里,关于行人轨迹预测ETH数据集坐标转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解析 ETH 区块数据交易input

    这里使用了一个开源项目:https://github.com/rvullriede/evm-abi-decoder 在pom中添加依赖即可: 这个jar需要jdk11,想使用jdk8的同学可以把项目中net.osslabz.evm.abi.definition.AbiDefinition#fromJson(java.lang.String) 的入参 Files.readString(Path.of(abiFilePath)) 改一下,这个Files.readString(Path.of(abiFilePath)) 方法只

    2024年02月22日
    浏览(48)
  • GPS学习(一):在ROS2中将GPS经纬度数据转换为机器人ENU坐标系,在RVIZ中显示坐标轨迹

    本文记录在Ubuntu22.04-Humbel中使用NMEA协议GPS模块的过程,使用国产ROS开发板鲁班猫(LubanCat )进行调试。 在淘宝找了款性价比较高的轮趣科技GPS北斗双模定位模块作为入门学习使用,支持GNSS系统(北斗、GPS、GLONASS、日本的QZSS以及卫星增强系统SBAS),定位精度在2.5m左右,属于民用

    2024年02月03日
    浏览(69)
  • [自动驾驶算法][从0开始轨迹预测]:一、坐标系和坐标系变换

    既然要从0开始轨迹预测,那从哪开始写起呢?回想下自己的学习历程,真正有挑战性的不是模型结构,不是繁琐的训练和调参,而是数据的制作!!! 笔者自认为不是一个数学基础牢固的人,那么我们的轨迹预测之旅就从坐标转换开始吧~~~ 由难至简,才能做到【删繁就

    2024年01月22日
    浏览(52)
  • 【TODO】【ETH】以太坊16进制数据解码

    技术角度了解区块链 获取 ERC20 合约 name,是 16 进制数据,解码为可阅读文字

    2024年02月09日
    浏览(48)
  • eth以太坊数据块-交易收据树和日志

    交易收据包含交易的产出(状态和日志)。收据数据存储在状态数据库,根哈希值存储在block的header中。 区块中智能合约的信息存储有2种方式,账户存储和日志存储。 账户存储(Account Storage) 定义了智能合约状态以及可访问的合约。在下图所示的state Trie里 日志存储(Log

    2024年02月01日
    浏览(44)
  • SLAM 轨迹评估方法 evo(包括GPS坐标转换成TUM)

    安装 evo 运行ORBSLAM 之后会生成一个TUM格式的轨迹FramTrajectory_TUM_Format.txt 我们也需要将获取的GPS轨迹转化成笛卡尔坐标下TUM格式坐标 使用此代码,将GPS的经纬度海拔信息转换成笛卡尔坐标下的坐标,并且保存成TUM格式 轨迹对比图像 链接:https://www.guyuehome.com/18717 里详细介绍了

    2024年01月21日
    浏览(43)
  • 改进YOLOv5:结合位置编码CoordConv,提升行人目标等预测能力 | 卷积加上坐标,从而使其具备了空间感知能力

    众所周知,深度学习里的卷积运算是具有平移等变性的,这样可以在图像的不同位置共享统一的卷积核参数,但是这样卷积学习过程中是不能感知当前特征在图像中的坐标的,论文中的实验证明如下图所示。通过该实验,作者证明了传统卷积在卷积核进行局部运算时,仅仅能感

    2024年02月02日
    浏览(96)
  • ifconfig不是eth0(eth1/2/3/4其他网卡)的解决办法

    1. 编辑你网卡的配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0,更改eth0中HWADDR 更改为eth1网卡的信息(这里是16位的mac地址) 2. 编辑配置文件 vi /etc/udev/rules.d/70-persistent-net.rules 打开该文件,这时你会发现,里面有包括eth0,eth1两个网卡的信息,删掉其中eth0网卡,把eth1更改为et

    2024年02月16日
    浏览(42)
  • 北京大学肖臻老师《区块链技术与应用》ETH笔记 - 13.0 ETH-美链 事件

    13.0 ETH-美链 事件 2018年4月发生的事件,美链是发行在以太坊上的代币,这些代币没有自己的区块链,而是以智能合约的形式运行在以太坊的EVM平台上。发行这个代币的智能合约,对应的是以太坊状态树的一个节点,这个节点有它自己的账户余额,就相当于这个智能合约一共有

    2023年04月27日
    浏览(44)
  • 北京大学肖臻老师《区块链技术与应用》ETH笔记 - 7.0 ETH挖矿算法篇2

    7.0 ETH挖矿算法篇2 7.1 伪代码理解以太坊挖矿算法 mkcache:根据一个seed,填充整个cache数组。 calc_dataset_item:通过cache来生成大数据集中的第i个元素,基本思想是通过伪随机的顺序读取cache中的256个数,每次读取的位置是由上一个读取的数计算得到的。第一个要从cache读取的数据

    2024年02月01日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包