頭部姿態估計——multi-loss
阿新 • • 發佈:2018-12-13
- 《Fine-Grained Head Pose Estimation Without Keypoints》 2018,Nataniel Ruiz Eunji Chong James M. Rehg. multi-loss 程式碼連結:https://github.com/natanielruiz/deep-head-pose
1.引言: 本文提出了一種簡潔和魯棒的方式來確定姿態,通過訓練一個multi-loss的卷積神經網路。 直接使用RGB結合分類和迴歸損失來預測Euler angles(yaw,pitch and roll)。
2.網路結構: 本文提出使用3個分離的losses,為每一個角度。每個loss由兩部分組成:a binned pose classification and a regression component 組成。
最後為每一個尤拉角的損失為: 實現細節: 1) 對尤拉角(Yaw,Pitch,Roll)按角度區間進行分類,比如3度,那麼Yaw:-90-+90,可以分成180/3= 60個類別,Pitch和Roll同Yaw角類似。這樣就可以進行分類任務了。 2) 對分類的結果恢復成實際的角度,類別*3-90,在和實際的角度計算迴歸損失。 3) 最後將回歸損失和分類損失進行合併來得到最後的損失,迴歸損失的前面增加了一個權重係數α。
3.測試: 1)不同測試集的測試結果 2)不同網路結構設定α引數的結果比較 不同的網路結構需要自行去調節α進行訓練。
4.小結: 使用分類和迴歸的方式進行約束,可以提升姿態估計的準確率。 但資料集構建比較麻煩。
5.部分參考程式碼:
虛擬碼: # 類別數(yaw:60類) idx_tensor1 = [idx for idx in xrange(60)] idx_tensor1 = tf.convert_to_tensor(idx_tensor1,dtype=tf.float32) # yaw角groundtruth獲取 # continous labels label_yaw_cont=ordinal_batch[:,0] # binned labels label_yaw_bin=nominal_batch[:,0] # 分類損失 # Cross entropy loss loss_yaw_cl =tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits (labels=tf.cast(label_yaw_bin,tf.int64), logits=logits_nominal_yaw)) # 迴歸損失 # MSE loss yaw_predict = tf.nn.softmax(logits_nominal_yaw) logits_ordinal_yaw = tf.reduce_mean(yaw_predict*idx_tensor1,1)*3-90 loss_yaw_reg = tf.reduce_mean((logits_ordinal_yaw-label_yaw_cont)**2) # 總損失 #total loss alpha=FLAGS.alpha loss_yaw =tf.add_n([loss_yaw_cl,alpha * loss_yaw_reg])