文獻及代碼閱讀報告 - SS-LSTM:A Hierarchical LSTM Model for Pedestrian Trajectory Prediction


概覽

簡述

SS-LSTM全稱Social-Scene-LSTM,是一種分層的LSTM模型,在已有的考慮相鄰路人之間影響的Social-LSTM模型之上額外增加考慮了行人背景的因素。SS-LSTM架構類似Seq2Seq,由3個Encoder生成的向量拼接后形成1個Decoder的輸入,並最終做出軌跡預測,有關Encoder和Decoder具體細節下文介紹。

主要結論與貢獻

  1. 提出了SS-LSTM分層模型,相較於其他LSTM-based模型在benchmark數據集上有更好表現。
  2. 引入了圓形的neighborhood划分方式,經過實際對比得出log圓形區域划分相交線性圓形划分和矩形划分有更好表現。

測試

  1. 數據集:ETH、UCY(采用Alahi等人提出Social LSTM時使用的數據集,位置信息經過了歸一化處理)。

  2. 測試指標:FDE、ADE

  3. 測試對象:

    1. baseline:linear、Vanilla LSTM

    2. LSTM-based:S-LSTM(g,c,l),SS-LSTM(g,c,l)

      g: grid maps, c:circle maps, l: log maps(區別在於區域形狀和划分標准不同)

進一步研究方向

  1. 增加行人的影響權重,例如依據行人間的距離。(此文采用的neighborhood矩陣是Occupancy Tensor而不是Social Tensor,在模型開始跑之間可以完全求出,即每個行人的LSTM數據在運行中不會交叉。詳情請見https://www.cnblogs.com/sinoyou/p/11227348.html
  2. 為模型加入空間-時間的注意力機制。
  3. 為模型加入新網絡以學習其他因素,例如場景中行人之間的舒適距離。

模型

整體框架

[注意]:圖示來自論文,查閱模型代碼后發現部分連線有誤導性,詳情見下一節。


1. Person Scale LSTM Encoder

描述:對於行人\(i\)編碼其自身的軌跡序列

模型輸入:\(X_{obs}^i = [(x_1^i,y_1^i), ..., (x_{obs}^i,y_{obs}^i)]\)

模型迭代:\(p_t^i = LSTM_l^{enc}(p_{t-1}^i, x_t^i, y_t^i, W_1)\)

2. Social Scale LSTM Encoder

描述:對於行人\(i\)編碼其鄰近行人的信息矩陣序列

模型輸入:Occupancy Map \(O_t^i\)

  • Occupancy對於每個行人在每個時間片刻都是不同的。
  • \(O_t^i(a,b) = \Sigma_{j \in N^i} \alpha_{ab}(x_t^j, y_t^j)\) (其中\(\alpha(.,.)\)是判斷函數,根據行人\(j\)是否處在\(i\)編號為\([a,b]\)的區域內,映射至真值域)。
  • 本文注重討論了三種判斷函數:
    • 方形圖
    • 線性半徑的圓形圖
    • log半徑的圓形圖

模型迭代:\(s_o^{i,t} = LSTM_2^{enc}(s_o^{i,t-1}, O_i^t, W_2)\)

3. Scene Scale Encoder

描述:對於行人\(i\)編碼其所處圖像背景信息。

模型輸入:Scene Feature \(F_t\)

  • 從圖片到LSTM的輸入\(F_t\),需要使用CNN網絡提取特征。
  • CNN網絡同其他LSTMs共同訓練,包含三層帶池化的卷積層,兩層全連接層和防止過擬合的Batch Normalization層。

模型迭代:\(s_c^{i,t} = LSTM_3^{enc}(s_c^{i,t-1}, F_t, W_3)\)


4. Decoder

描述:根據三個Encoder編碼出的向量進行解碼,做出軌跡預測。

模型輸入:將來自Person Scale,Social Scale,Scene Scale編碼器的輸入拼接。

  • \(h_i^t = \varphi(p_t^i, s_o^{i,t}, s_c^{i,t}) = p_t^i \oplus s_o^{i,t} \oplus s_c^{i,t}\)
  • [注意]:原文描述與源代碼實現存在出入,原文\(h_i^t\)的計算部分是\(1<=t<=obs\),但源代碼並不是這樣實現的,詳情請見下文。

模型迭代:

\[\hat h_t^i = LSTM^{dec}(\hat h_{t-1}^i, h_t^i, W_d) \]

\[(\hat x_i^t, \hat y_i^t) = W_o\hat h_t^i + b_o \]

[注意]:與Social LSTM,Spatio-Temporal Attention Network等不同的是,SS-LSTM模型的decoder輸出不再是基於高斯二維分布,而是直接將Decoder的輸出經線性變換后即得到預測軌跡的坐標值



SS-LSTM模型細節內容探討

在閱讀SS-LSTM的原文時由於閱讀能力不足/文章描述不充分導致對模型部分細節存在疑惑,好在原文中提供了模型的源代碼,因而解答了這些疑惑,在此做一些記錄。若筆者理解存在問題,懇請批評指正。

Question 1

模型訓練時的損失函數?

模型對於Decoder的輸出並未采用二維高斯分布的假設,因此無法使用negative log-likelihood作為損失函數。經過筆者閱讀,尚未在原文中發現有關損失函數的描述,在源代碼中損失函數采用Mean Square Error。


Question 2

對於Decoder的LSTM,其每步迭代過程中的輸入是什么?

原文有指明Decoder每步運行的輸入:\(h_i^t = \varphi(p_t^i, s_o^{i,t}, s_c^{i,t}) = p_t^i \oplus s_o^{i,t} \oplus s_c^{i,t}\)(即對應的三個encoder每一步輸出的拼接值),但放在實際情況中存在幾個矛盾:

  • \(obs\_length < pred\_length\),則沒有足夠的\(h_i^t\)可以提供。
  • 即使有足夠的\(h_i^t\),decoder最多能夠預測到\(obs\_length+1\)時刻的位置,因為若要預測\(obs\_length+2\)則需要三個encoder提供對應信息,而實際上又無法提供。

根據查閱源代碼,模型中Decoder每運行一步時輸入都是一樣的,為person scale, social scale, scene scale三個Encoder最終一次輸出拼接得到的向量。這是一種Seq2Seq模型中較為簡單的模型,在解碼時都沒有使用Decoder上一步的輸出作為輸入。

model = Sequential()
model.add(Merge([scene_scale, group_model, person_model], mode='sum'))
model.add(RepeatVector(predicting_frame_num))  	# 復制拼接向量,使decoder每步輸入都一致。
model.add(GRU(128,
              input_shape=(predicting_frame_num, 2),
              batch_size=batch_size,
              return_sequences=True,
              stateful=False,
              dropout=0.2))

因此回到上文中文中所給出的SS-LSTM模型的整體結構(見下圖),連接線展現出三個Encoder每步運算后得到的輸出都參與了Decoder輸入的拼接,但這與源代碼是存在矛盾的


Question 3

通過CNN抽取的背景圖像特征\(F_t\),是否需要有下標t?(是否需要雖時間發生變化)

嚴格來說是需要的,但是由於Scene Scale主要用於捕獲圖像的非行人特征,而不同時間段圖像特征的差異主要在行人,因此\(LSTM_3^{enc}\)的每一步輸入可以是一致的,源代碼中采用這種思路,即對於每個行人的軌跡預測,抹去了圖像特征的時間因素

scene_scale = CNN(dimensions_1[1], dimensions_1[0])
scene_scale.add(RepeatVector(tsteps)) # 復制CNN輸出tsteps=obs_length次,使lstm每步輸入相同
scene_scale.add(GRU(hidden_size,
                    input_shape=(tsteps, 512),
                    batch_size=batch_size,
                    return_sequences=False,
                    stateful=False,
                    dropout=0.2))

Question 4

圓形的鄰近區域的數據存儲方式?

如下圖,對於矩形區域,Occupancy Map的形狀為[4,4]或[4x4];而對於圓形區域,Map可按照自行編碼習慣映射為矩陣或向量,例如,以半徑為第一維度,圓角為第二維度,則Map形狀為[3,4]或[3x4]

Article:

H. Xue, D. Q. Huynh and M. Reynolds, "SS-LSTM: A Hierarchical LSTM Model for Pedestrian Trajectory Prediction," 2018 IEEE Winter Conference on Applications of Computer Vision (WACV), Lake Tahoe, NV, 2018, pp. 1186-1194.

Code - implemented with keras:

  • link: https://github.com/xuehaouwa/SS-LSTM
  • The codes is not complete: datasets, self-defined function, program entry of train & sample and etc. So codes are not directly runnable.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM