空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

機械学習のお勉強(DeepPose, OpenPose)

やること

  1. pythonでのcaffe環境構築
  2. OpenPoseを動かしてみる

Caffe Install

設定(GPU)

【Caffe】はじめてCaffeをmakeするまでOn Ubuntu16.04 - 緑茶思考ブログ

Ubuntu 14.04にCaffeをインストール(GPU編) - Qiita

Installing Caffe on Ubuntu (CPU-ONLY) - Chun’s Machine Learning Page

nvcc fatal : Unsupported gpu architecture 'compute_61' · Issue #5141 · BVLC/caffe · GitHub

PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include

to this:

PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/local/lib/python2.7/dist-packages/numpy/core/include

設定(CPU only)

configをcpu onlyに変更

Caffeでニューラルネットワークを試してみる - Sample Space of BB-Club

Ubuntu14.04にCaffeをインストール(CPUモード) - Qiita

OpenPose(Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields)

論文:https://arxiv.org/abs/1611.08050

プレゼン資料:http://image-net.org/challenges/talks/2016/Multi-person%20pose%20estimation-CMU.pdf

Git : GitHub - ZheC/Realtime_Multi-Person_Pose_Estimation: Code repo for realtime multi-person pose estimation in CVPR'17 (Oral)

Git : GitHub - CMU-Perceptual-Computing-Lab/openpose: OpenPose: A Real-Time Multi-Person Keypoint Detection And Multi-Threading C++ Library

実行結果

Realtime_Multi-Person_Pose_Estimation/demo.ipynb at master · ZheC/Realtime_Multi-Person_Pose_Estimation · GitHub

外骨君だとある程度ちゃんとでた↓

f:id:robonchu:20170911141520p:plain

イラスト等ではうまくでないこともあった...

コード理解

part_str = [nose, neck, Rsho, Relb, Rwri, Lsho, Lelb, Lwri, Rhip, Rkne, Rank, Lhip, Lkne, Lank, Leye, Reye, Lear, Rear, pt19]

この体の19点の位置を出力する

f:id:robonchu:20170911162745p:plain

実装部

all_peaks[i][j][0:2]に位置情報が入っている

# visualize
colors = [[255, 0, 0], [255, 85, 0], [255, 170, 0], [255, 255, 0], [170, 255, 0], [85, 255, 0], [0, 255, 0], \
          [0, 255, 85], [0, 255, 170], [0, 255, 255], [0, 170, 255], [0, 85, 255], [0, 0, 255], [85, 0, 255], \
          [170, 0, 255], [255, 0, 255], [255, 0, 170], [255, 0, 85]]
cmap = matplotlib.cm.get_cmap('hsv')

canvas = cv.imread(test_image) # B,G,R order

for i in range(18):
    rgba = np.array(cmap(1 - i/18. - 1./36))
    rgba[0:3] *= 255
    for j in range(len(all_peaks[i])):
        cv.circle(canvas, all_peaks[i][j][0:2], 4, colors[i], thickness=-1)

to_plot = cv.addWeighted(oriImg, 0.3, canvas, 0.7, 0)
plt.imshow(to_plot[:,:,[2,1,0]])
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(12, 12)

この点をつなぐと↓こんな感じ

f:id:robonchu:20170911162935p:plain

わかりやすい参考

www.slideshare.net

http://www-hi.comlab.soft.iwate-pu.ac.jp/wp-content/uploads/2017/04/Realtime_Multi-Persion_2D_Pose_Estimation_using_PAFs.pdf

CVPR2017勉強会 Realtime Multi-Person 2D Pose Estimation using Part Affin…

【やじうまPC Watch】Webカメラからリアルタイムにボーン検出できるソフト「OpenPose」が無償公開 - PC Watch

HACKist on Tumblr | 日々、博報堂アイ・スタジオで挑戦している、ちょっと変わった新しい実験をお知らせしていきます。 | 動画や写真からボーンが検出できる OpenPose を試してみた どうも貴田です。今回は...

OpenPoseチュートリアルのソースコードを読む。 - Qiita

OpenPose de ROS - Qiita

Caffe: Tutorial: Blob, 層, そしてネット : Caffe モデルの解剖 – PyTorch

DeepPose

論文: https://arxiv.org/pdf/1312.4659.pdf

わかりやすい参考:

PyTorchでDeepPoseを実装してみた - Qiita

PyTorchでDeepPoseを実装してみた PartⅡ - Qiita

GitHub - ynaka81/DeepPoseComparison: DeepPose with chainer and pytorch