| by YoungTimes | No comments

C++11-shared_ptr使用的两个坑

1、禁止使用一个裸指针创建多个智能指针

先看下如下的代码,会有什么样的问题呢?没错,ptr_1和ptr_2均使用裸指针(raw pointer),指向同一块内存,但它们彼此不相知。

当ptr_2作用域结束时,它会delete关联的裸指针(raw pointer),然后ptr_1的指针就会悬空,成为一个非法值。

同理,当ptr_1作用域结束时,它会delete关联的裸指针(raw pointer),然后ptr_2的指针就会悬空,成为一个非法值。

2. 禁止从栈对象创建shared_ptr

看下面一段代码:

shared_ptr要求与它关联的内存来自[……]

继续阅读

Read More
| by YoungTimes | No comments

变长数据Features转换为Tensor

ISSUE

从数据集(Dataset)中构造神经网络输入时,遇到同一维度的的Feature元素个数不同的问题,比如:

$$
\text{features} = [[1, 2, 3], [4, 5], [1, 4, 6, 7]]
$$

这种变长的Feature数据在Tensorflow中是不被支持的,当尝试将变长的list转换为Tensor时:

会有如下的报错:

解决的方法就是把各个维度补齐,根据不同的目的补齐的方法不同,常见的就是补零或者重复最后一个元素

补零(Padding With Zeros)

输出:

重复最后的元素(Re[……]

继续阅读

Read More
| by YoungTimes | No comments

自动驾驶数据集-Argoverse Dataset

Argoverse数据集是由Argo AI、卡内基梅隆大学、佐治亚理工学院发布的用于支持自动驾驶汽车3D Tracking和Motion Forecasting研究的数据集。数据集包括两个部分:Argoverse 3D Tracking与Argoverse Motion Forecasting。

Argoverse数据集包含LiDAR数据、$360^{\circ}$ RGB视频数据、前向双目数据、6 DOF的定位数据以及高精地图的数据,所有的数据都跟高精地图数据进行过配准。

Argoverse是第一个包含高精地图的数据集,它包含了290KM的带有几何形状和语义信息的高精地图数据[……]

继续阅读

Read More
| by YoungTimes | No comments

机器翻译的Attention机制

在机器翻译(Neural Machine Translation)中,Seq2Seq模型将源序列映射到目标序列,其中Encoder部分将源序列编码为Context Vector传递给Decoder,Decoder将Context Vector解码为目标语言的序列。

在输入序列很长的情况,在预测目标序列的时候,Attention机制可以使得Model能够将注意力集中在关键的相关词上,从而提升机器翻译模型的效果。

Bahdanau Attention

Bahdanau Attention的公式如下:

$$
\operatorname{score}\left(\bol[……]

继续阅读

Read More
| by YoungTimes | No comments

Python中的曲线插值算法

在实际应用中需要对路径或者曲线进行重采样,重采样的过程就是”曲线拟合->重采样曲线点”的过程。

1.待解决问题

如下一系列点组成的曲线,我们需要对曲线进行拟合重采样。

2. 拟合重采样过程遇到的问题

下面的方法都不Work!!

2.1 Cubic Interpolation

2.2 Cubic Spline Interpolation

Always Fail (ValueError: Error on input data)

原因: 函数要求x严格从小到大有序。

2.3 Parametric Spline Inte[……]

继续阅读

Read More
| by YoungTimes | No comments

Python可视化二维高斯分布

Social LSTM论文中有一张展示行人运动轨迹概率分布的效果图,今天抽空研究下如何用Python可视化二维高斯分布(Gauss Distribution)。

可视化二维高斯分布(Gauss Distribution)本质上是以2D方式展示3D数据(第三维是概率密度),Python中四个matplotlib函数(plt.contour()、plt.contourf()、plt.imshow()、plt.pcolormesh())可以帮助我们完成这一目标。

1. 简单的示例

先引入必要的python依赖文件。

1.1 目标函数

目标函数将平面坐标(x,y)[……]

继续阅读

Read More
| by YoungTimes | No comments

RNN预测行人运动轨迹

最近在研究论文-Social LSTM: Human Trajectory Prediction in Crowded Spaces, 先从最基本的RNN模型入手看看效果。

本文代码已经上传到Github:
https://github.com/YoungTimes/GNN/blob/master/Social-LSTM/train.py

行人轨迹数据集

数据集来源自[1],每个数据目录包含一个pixel_pos.csv文件,它的文件格式如下:

pixel_pose.csv包含4行,它的列数是所有行人轨迹点的数量。

第一行是所有的Frame Number;

第二[……]

继续阅读

Read More
| by YoungTimes | No comments

Ubuntu重启Nvidia显卡失效

最近重装系统的频率明显升高…

开机关机之后,Ubuntu系统的界面变的异常卡顿,根据上次的经验,应该是显卡驱动又出问题了…

输入:

nvidia-smi

输出:

NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

多次重装Nvidia驱动->重启,依然无法解决。这次不想再重装系统,在网上找到如下解决方案:

1.[……]

继续阅读

Read More
| by YoungTimes | No comments

动图详解LSTM和GRU

问题:短期记忆

反向传播(Back Propagation)是一种与最优化方法(比如梯度下降方法)结合、用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度,然后将梯度反馈给最优化方法,用来更新网络权重以最小化损失函数。

在神经网络中一个典型的问题就是梯度消失(Gradient Vanishing)的问题,其原因在于是随着神经网络层数的加深,梯度逐渐减小甚至接近0,当梯度变的非常小的时候,就不能为学习提供足够的信息。

Recurrent Neural Networks(递归神经网络,RNN)也存在梯度消失的问题,当输入的序列足够长时,RNN前期的层通常[……]

继续阅读

Read More
| by YoungTimes | No comments

图神经网络实战-图注意力网络Tensorflow 2.0实现

本文完整代码和数据已经上传到Github.

https://github.com/YoungTimes/GNN/tree/master/GAT

1. GCN的另一个缺陷

GraphSAGE通过采样邻居的策略解决了GCN只能采用Full Patch训练的问题。在GAT中指出了GCN的另外两个缺点:

1) 无法为不同的Neighbor节点指定不同的权重,也就说GCN对于同阶邻域上的不同邻居分配的权重是完全相同的,这限制了GCN模型对于空间信息相关系的捕捉能力;

2) GCN聚合临近节点特征的方式与图(Graph)的结构密切相关,这限制了训练所得模型在其它图(Graph)结构上[……]

继续阅读

Read More