[dlhacks 実装] deeppose: human pose estimation via deep neural networks
TRANSCRIPT
書誌情報
3
• 論⽂名:“DeepPose: Human Pose Estimation via Deep Neural Networks”– https://arxiv.org/pdf/1312.4659
• 著者:Alexander Toshev, Christian Szegedy– Google
• 公開⽇:20 Aug 2014
• IEEE Conference on Computer Vision and Pattern Recognition, 2014
• ※ 特に断りが無い場合は, 上記論⽂, Slide, Videoから引⽤
CNNによる姿勢推定
• GoogleLeNetチームの⼈が書いたCNNによる姿勢推定• AlexNetのアーキテクチャをそのまま利⽤• Dec 2013時点でSoTA• CNNを利⽤した回帰問題としての姿勢推定の最初の論⽂で以降ベンチマー
ク
5
Introduction
• ⼈間は隠れている関節の位置を推測できる– 他の部位の様⼦や対象⼈物の動きから推測– → 「全体的に⾒て, 推測する」ことが重要
• DNNならこの辺うまくできそう.
• 既存研究では, パーツごと検出してあとでパーツ間の関係を考慮する⼿法が多い.
• → DNNなら特徴量設計しなくていい & パーツ検出器設計いらない & 関節間の相互関係などのモデルもいらない
• DeepPoseでは 複数のDNNを直列につなげる– ⼤まかに各関節の初期位置を推定するDNN– 推定された位置の画像を切り出したもの⽤いて, 関節位置推定するDNN ←– 各関節推定のためのDCNNの直列の繋ぎ合わせ
6
⼈物領域の切り出し
8
• 元画像から固定サイズ(220x220)で⼈物領域を切り出す.– 学習時:アノテーションされている関節位置から上下左右端にある関節に合わせて,
Crop. ⼤きさに合わせてScale, Padding.– 推論時:⼈物領域のbounding box推定.(※)
• 切り出しに合わせて座標位置も変換.
CNNによる関節位置の推定
• 画像xを姿勢ベクトルyに回帰する関数ψ(x;θ) ∈ R2kを学習.(k:関節数)• ψを事前に決めたサイズ(220x220)の3チャンネルの⼊⼒画像を取り, 2k次
元のベクトルy*を出⼒するDeep Convolutional Neural Networkで近似.
• CNNのアーキテクチャ:AlexNet– 最終層は1000unitsではなく2k units– 13層アーキテクチャ:C(55 x 55 x 96) - LRN - P - C(27 x 27 x 256) - LRN - P -
C(13 x 13 x 384) - C(13 x 13 x 384) - C(13 x 13 x 256) - P - F(4096) -F(4096) - F(2k)
– 活性化関数には全てReLu– フィルタサイズは, 下から順位, 11x11, 5x5, 3x3, 3x3
9
複数DCNNの直列接続
• DCNNの⼊⼒が220x220なので荒い画像しか⾒れない.• 各関節の正確な位置推定のため, 同じアーキテクチャのDCNNを複数, 直列
に接続する.– パラメータはステージごとに⽤意(全体で共有はしない)
• 1つ下のステージの予測結果と、正解のズレ(yi(s-1) - yi)の平均と分散を
計算し, これらをパラメータとして1つ正規分布と使って⽣成したノイズを正解に付加して予測結果とする
• 各ステージのBounding boxは, 予測値(y)と, 体幹部の⼤きさ(diam)で取得
10
訓練
• データ前処理– 画像から⼈物領域切り出し.– データセット内のデータを⼈物領域切り出した画像上の座標に変換.
• 誤差関数– 予測ベクトルψ(x;θ)と正解ベクトルyの間のユークリッド距離– K個の関節ごとのL2距離の合計(MSE)
• 勾配降下法:Momentum SGD or Adam• Data Augumentation: ランダムCrop, ランダムノイズ
11