ヘッダーナビゲーション

2016年12月21日水曜日

パソコン使いすぎの人のための肩こり解消

問題点

ソフトウェアエンジニアの方だと、公私含めて一日10時間以上パソコンの前に座ってる方もザラで、それ故肩こりに悩まされているかたも多いかと思います。
肩こりがひどくなると頭が回らなくなってしまいますし、パソコンに向かう時間を減らして生産性が下がるのも問題かと思います。
僕もパソコンの使いすぎで肩こりや首が痛かったりして相当悩まされたのですが、色々試行錯誤した結果最近はある程度解消でき、ほとんど問題にならないレベルになりました。

解決策

以下、それらの解消法を簡単に説明させていただきたいと思います。上から効果が高いように感じる順です。僕が身長が180cm以上あり、身長から生じる問題もあるかと思うので、その点も踏まえて御覧ください。

  1. 薬の服用
     武田薬品工業から出ている、アクテージSN錠という薬がとても効きます。この薬は、肩・首筋のこりの解消を目的としている薬で、血液の流れの悪化、筋肉の硬直、硬直した筋肉による末梢神経の圧迫及び損傷を解消する成分が入っているそうです。あまりエンジニアの方には有名で無いですが、もってこいの薬可と思います。難点としては少し値段が高いところで、定価だと28日分で5880円です。Amazonだと3891円で売られておりお求めやすい価格になっています。個人的には、生産性の向上と比較するとこの価格でもそんなに高く無いと思います。
  2. 良い椅子を使う
    肩への負担を軽減するという意味では、ハイバック(背もたれの高い)で、肘掛けやヘッドレスト、ランバーサポート(腰の負担を減らすための可動式のでっぱり)のついている、座り心地の良い椅子を使うべきかと思います。他にも肘掛け調整機能や、ヘッドレスト調整機能もあると良いかもしれません。概して10万円以上の椅子だとそれらの要件を満たせると思うのですが、椅子にそこまでお金をかけれる人はそんなに多くないかと思います。しかし、1万円台でもおすすめ(で僕が今使ってる)の椅子があります。それはニトリが出しているタンパ3という椅子で、ハイバック、肘掛け、ヘッドレスト、ランバーサポートがついていて、(少なくとも僕には)座り心地が良く、価格は13797円というコスパの良い椅子です。この椅子に限らず、長時間を座って過ごすエンジニアにとっては椅子に対する投資は比較的割に合うものなのかなと思います。会社で働いている場合だと椅子の変更はなかなか難しいのかもしれませんが。
  3. ノートパソコンを使う時間を減らす
    ノートパソコンを使う場合、机をかなり高くするなど工夫をしなければ基本的に猫背になってしまうと思います。なので、ノートパソコンを使う時間を意識して減らしています。Mac Bookなどの場合はクラムシェルモードを使って、外部キーボードと外部ディスプレイの組み合わせでも良いかと思います。
  4. 運動をする
    単純ですが、デスクワークが中心のエンジニアは概して運動不足になりがちかと思います。定期的にジムなどに通い意識的に運動をすることは、肩こりを始め健康維持に重要かと思います。僕は大体週一ぐらいを目処に運動してます。
  5. ディスプレイの輝度を調整する
    ちょとこれはそんなに効果が無いかもしれないのですが、ディスプレイの輝度から眼精疲労が来るとされます。そこで、ディスプレイの輝度を調整して低くすることによってある程度解消が見込めるのでは無いかと思います。MacやLinuxだと、f.luxっていうアプリが時間帯に合わせて(夜になると眩しくなりすぎないように)ブルーライトをカットしてくれるので割りと便利です。

こんな感じで僕は対策していますね。お金がかかるものも多いですが、生産性が下がるのを食い止められると考えれば割に合うのかなと思います。

ではでは!

2016年12月20日火曜日

Deep Learningによる感情認識

目次


はじめに

本記事はDeepLearning Advent Calendar 12月22日の記事です。
間違いが無いよう注意を払っていますが、記載している内容に間違いがあれば教えていただけると幸いです。

こんにちは。京都で大学院生をやらせてもらっている、くさのと申します。
最近は、下図のような生活を送っています。


自己紹介はこれぐらいで、本題に入ろうかと思います。

今日お話するテーマである感情認識とは文字通り、人間の顔画像などから人間の感情を認識するタスクのことで、困難なタスクであることが知られています。例えば、笑ってる顔の人の画像を見て、この人は幸せそうだ。という感じの予測をするタスクです。 ちょっと大げさに言うと、機械に人間の心が理解できるかみたいな大きな問題につながっており、人間の知能を機械で再現できるかという人工知能の流れ的にそれなりに重要な問題であると言えるかと思います。

そして、2016年初めにAppleが感情認識のスタートアップを買収したというニュースをご覧になった方もいるかと思いますが、近年感情認識が流行っている様で、このページによると把握されているだけでも、感情認識系のAPIが20個以上も既にあるそうです。 Deep Learningの発展とともに、これまでマーケティングなどに有効だと分かりつつも、困難なタスクと考えられてきた感情認識分野の技術も近年実用レベルまで進歩しつつあるのでは無いのでしょうか。

このように、まさに

乗るしか無い、このビッグウェーブに!!!

との様相を呈している感情認識なのですが、上述の感情認識のAPIは当然ですが基本的にアルゴリズムは公開していない他、統一的なベンチマークの仕方も一般物体認識などと比べると自明ではなく、アルゴリズムと性能の対応がわかりにくく、専門外の人からすると波に乗りにくい印象を受けます。

目次に戻る

EmotiW2016について

そこで、今回は、その感情認識に焦点を当て、一般なシチュエーションでの感情認識のコンペティションであり、国際学会ACM ICMI 2016, Tokyoに併設して行われたEmotion Recognition in the Wild Challenge 2016(EmotiW 2016)の紹介及び、その中で行われたVideo based emotion recognition sub-challengeの優勝者のモデルがDeep Learningを上手く使ったモデルなので紹介させていただきます。

EmotiW 2016は、その名の通り、一般なシチュエーションでの感情認識のコンペティションで、2つのsub-challengeによって構成されます。1つ目が、ビデオから感情を認識する、Video based emotion recognition sub-challengeで、2つ目が、写真に写っている人の集団の感情を予測するGroup level emotion recognition sub-challengeです。 以下で、Video based emotion recognition sub-challengeについて説明します。
目次に戻る

EmotiWの詳細について

Video based emotion recognition sub-challengeでは、音声がついた短いビデオに6つの主要な感情(怒り、嫌悪、恐れ、幸福、悲しい、驚き)と中間という7つのクラスのうち1つがラベル付けされたデータセットが与えられます。そして、音声がついた短いビデオから、それに対応するラベルを予測する、多変量時系列データの分類という風に定式化されています。


一般に、感情は人間の潜在的な状態であることから、正解データを作ることが難しく、蓋然性を正確に測ることが難しい他、データ・セット依存性がかなり高く、モデルの評価も難しいのでは無いかと思っています。 しかし、今回のコンペティションの特徴は、トレーニングデータセットは映画の映像なのですが、テストデータセットはリアリティーテレビの動画も用いているそうです。リアリティーテレビの動画はより一般な状況であるゆえ、特徴モデルの一般性を測るのに寄与するとのことです。用いられたデータ数は1749個で、トレーニング(773個)、 Validation(383個)、テスト(593個)に分けて提供されたとのことです。

また、ベースラインとして主催者側から提供されるモデルは、LBPOP descriptorとSVRを用いたモデルで、Validation accuracyが38.81で、Train setで学習させた上記モデルをTest dataで評価したaccuracyが40.47%だそうです。そして、どの様なモダリティを使うかなどの制約は無く、テストデータセットでの性能のみを競うとのことです。感情認識のアプローチとしては大きく分けて3つあり、視覚入力、音声入力、生体センサからの入力なのですが、今回は音声が伴うビデオを対象とするということで、視覚入力、音声入力を用いての感情認識で競うことになるかと思います。

そして、EmotiW 2016のVideo based emotion recognition sub-challengeには、22グループが参加し、チームごとの性能は以下の様になっているそうです。横軸が正答率で、右に行けば行くほど良く、昇順にソートされており、下のチームの方が優れています。ベースラインを下回ってるチームが結構ありますが、過学習しまくってたってことなんですかね。感情認識こわい。。。








また、EmotiW2016については、こちらを参考にさせていただきました。 http://dl.acm.org/citation.cfm?id=2997638 詳しく記載されていますので、詳細を知りたい方は参照してください。
目次に戻る

優勝者のモデルの解説

優勝者はIQIYIという会社のチームです。IQIYは、中国のBaidu(百度)の子会社で、無料動画サイトを運営している会社だそうです。このチームのモデルは、Video-based Emotion Recognition Using CNN-RNN and C3D Hybrid Networks というもので、http://dl.acm.org/citation.cfm?id=2997632に詳しく記載されています。動画や音声をうまく特徴として使い、Deep Learningを用いて学習させ、最終的に複数モデルをアンサンブルしたようなモデルです。 モデルを簡単に説明させていただくと、以下のようになります。

まず、ビデオから音声と画像の集合を切り分ける。画像は前処理をした後、2つのモデルに渡される。1つ目が、空間方向のCNNで視覚特徴を取った後、隠れ層のベクトルをLSTMに渡し逐次的に画像集合を処理させる、CNN-RNNを用いて予測する。2つ目が、空間方向と時系列方向の両方を畳み込む3次元Convolutionを行うCNNである、C3Dを組み、フレームの系列を直接入力し、予測させる。 そして、音声は、音声特徴を作り、線形カーネルを用いたSVMで予測させる。 これら3つの予測を重み付けし、最終的な予測結果を出すとの流れになっています。学習は、それぞれのモデルを独立して学習させ、最後に各自の性能に合わせて重み付けをします。









このようになっています。


ちなみに、CNN-RNNのCNNには、VGG-16-Face modelをFER2013のface emotion datasetを用いてpre-trainさせ、LSTMの1イテレーションごとに、16個の顔特徴がランダムに選ばれる用設計し、LSTMは128次元のembedding出力を持ちます。C3Dの方では、それぞれのビデオで、16枚の顔の系列が入力として選ばれ、C3Dでは8個のConvolution層、5個のmax-poolings層、2個の全結合層があり、soft-max層を伴い出力されるそうです。また、16枚の顔の系列は、8フレームごとに、1枚ずつサンプリングしていき生成します。

そして、最終的に、CNN-RNNとC3Dのアンサンブルのさせ方で精度を比較した結果が以下のようになります。






CNN-RNNと3個のC3Dの組み合わせが一番精度が出たようですね。CNN-RNNの個数が変わってもあまり精度が変わらないのに、C3Dの個数が変わると精度が変わるのは奇妙ですね。C3Dの方が、空間情報を保持した上で、時系列方向に畳み込みが出来ていて、いい特徴を取りやすいってことですかね。心当たりがあるのが、画像から心拍・呼吸の情報を読み取ることができ、それらの情報が感情推定に有用であることは知られています。これは、EmotiW2016のKeyNote Talkでも話しているDr. Daniel McDuffさんの研究なのですが、空間情報を保持した上で、時系列に畳み込みが出来ると、心拍情報・呼吸情報に基づいた感情推定で行われているのと似たような操作が出来るので、そういった情報も寄与しているのかなと思います。

この、レポートhttp://dl.acm.org/citation.cfm?id=2997632 想像以上に充実してい、示唆に富む、実用上参考になりそうな情報が一杯書いてあるので、感情認識に興味が有る方や、仕事でやる必要がある方などは読んでみると面白いかと思います。そして、実装もhttps://github.com/lidian007/EmotiW2016に公開されています。
目次に戻る

他のチームのモデルとの比較

また、他のチームとのモデルの比較としては、
2~4位のチームの違いとしては、そもそもビデオの時系列情報は含めず画像からの感情予測であったり、音声を特徴として用いていなかったり、Deep Learningを使わないもののビデオと音声を特徴にした予測などがありました。(ざっと見なので間違っていたらすみません。) 今回のEmotiW2016では、モデルを提出する際、モデルについて記載した論文が義務づけられているそうで、1位以外の論文もネットに公開されているので、気になる方は参考にしてください。

印象としては、動画や音声の特徴を上手く取り入れ、Deep Learningの枠組みに落とし込んで解いたIQIYIのチームが勝ったのでは無いかという感じです。(彼らはアンサンブルも取り入れていたし、このようなアプローチは必然的に計算資源も膨大になると思うので、計算資源の勝利という見方もできなくもないかも…!笑)

目次に戻る

感想

感想としては、今回のケースは、対象が感情という予測しにくいラベルで、音声が伴う動画という扱いにくいデータが約千個という小さなデータセット、かつトレーニングとテストの性質が異なるという極めて困難な状況だと思います。 そのような状況下であっても、学習のさせかたを工夫するとDeep Learningが上手く適用でき、約6割程の正解率をあげられることを知り、Deep Learningの適用範囲がやはり広がってきているのだなと実感しました(小並)

長文でしたが、最後までお付き合いいただきありがとうございました。

2016年12月19日月曜日

Chromeでパスワードを忘れた時の確認の仕方

Webサイトのパスワードって管理が大変ですよね。 オンラインで保存していても忘れてしまうし、オフラインで保存していて家族とかに見られてもまずい。
でも、最近は便利なもので、Google Chromeなどのブラウザがパスワードを覚えていてくれる。 僕なんかそういった機能のせいで、パスワードを問われないものだから忘れていってしまいます笑

そういった、自分はパスワードを忘れているのにChromeだけ知っている状況で、Chromeからパスワードを表示させるやり方を今回紹介したいと思います。

Chromeは大抵のサイトをAuto fillしてくれますが、クレジットカードの通常と異なるドメインのサイトに対してなどはAuto fillしてくれないので、そのようなケースやパソコンの買い換え等が主な対象になるかと思います。


1. passwords.google.comにアクセスする。おそらく(設定していれば)、スマートフォンを通した認証を要求される。
2. 認証した後、表示されたページのSaved passwordsの中から、該当サイトを探す。
3. 該当サイトの右側に書いてある、目をクリックする。
4. パスワードが表示されるので、確認する。

となっています。便利ですが、ここまで簡単だと逆に攻撃者にも悪用されそうですね^^;

参考: 保存したパスワードを管理する
ではでは〜

2016年12月18日日曜日

Razer Core - VRを携帯したい人のための低コストな解決策

問題設定

VRアプリ等の開発をしていると、展示会や外部でデモをすることもあるかと思います。
その際困るのが、VR HMDを動かすためのゲーム用パソコンの用意です。

解決策の比較

通常候補としては、ゲーム用デスクトップ、ゲーム用ノートパソコン、ゲーム用モバイルデスクトップ を運び込むなどがあるかと思います。
どれも長所短所があります。

今回のケースで、パソコンを評価するとすると、汎用性、価格、携帯性、携帯時の耐久性の項目かと思います。
以下、それぞれの選択肢で上記評価項目を評価したものです。


ゲーム用デスクトップ
ゲーム用ノートパソコン
ゲーム用モバイルデスクトップ
汎用性
価格
携帯性
携帯時の耐久性

評価の理由

評価の理由としては、
デスクトップは持ち運ぶことを想定されていなく携帯性に乏しく、耐久性も低い。
ゲーム用ノートパソコンは、概してコストパフォーマンスが悪く、発熱が激しい他非常に重いので汎用性、価格ともに劣っています。
ゲーム用デスクトップを小型化し、持ち運びやすくしたゲーム用デスクトップモバイルパソコンも近年出現しているようです。しかし、多少軽量化や筐体を小さくしても、基本的にはデスクトップパソコンなので上記のような問題は存在します。

新たな解決策の提案

そして、今回紹介したい解決策というのが、画像処理能力の高くない軽量モバイルPCに対して、外付けでGPUユニットを取り付け、画像処理能力を向上させるというアプローチです。
中でも、Razer社が提供している、Razer Coreが選択肢の1つにあっても良いのかなと思います。
これを用いると、(条件が揃えば)6万円程度で上記評価項目をすべて満たす環境を構築することができます。

パソコンに対して画像処理能力を与えてあげることができるのが、この外付けGPUユニットのRazer Coreです。サイズは- 104.9 mm (幅) x 339.9 mm (奥行) x 218.4 mm (高さ)、重さは4.94Kg、価格は直販サイトで61800円からです。同社のUltra BookであるRazer Blade Stealthを同時に買うと、12800円引きになるみたいですね。値段もそこまで高くなく、重さ・サイズともにかなり控えめなのでは無いかと思います。

ビデオカードは同梱されていないのですが、フルサイズ、マルチスロット占有たいぷのPCIeビデオカードに対応しており、Thundebolt3に対応しているパソコンであれば使用可能です。また、USB3.0 x 4などの端子も存在し、ハブとしても使えるようです。 実際にGPUが乗っていないパソコンにRazer Coreをつないで、Oculusが動くか試したところ、動いたとの報告(GPU以外のCPU等の性能でボトルネックが生じて動かない等は当然あると思います。)もあるようです。ただ、デスクトップで同一GPUを使用した場合と比べて性能が多少低減するほか、ファンの音がうるさいようですね。。。

ちなみに、上記同社が提供しているUltra BookであるRazer Blade Stealthは見た目も良く、性能も12.5インチWQHD(か4K)液晶、第六世代Corei7にメモリ8GBを搭載し、重さは1.25kgのパワフルなUltra Bookです。他にもバッテリー性能や端子の豊富さ含めて、エンジニアが普段使いできるレベルの性能を備えていると思います。そして値段は119800円からとなっています。実は、最近ノートパソコンを買い替えたいと思って探していて、VR関係なく購入候補に入っていました。

以上が紹介となっています。

まとめ

まとめると、外付けGPUユニットであるRazer Coreを用いると、画像処理能力の高くないモバイルPCにもOculusなどVRヘッドセットを駆動させるのに必要な画像処理能力を与えることができる。モバイルPCであれば汎用性にも優れるほか、価格もそこまで高くなく、携帯性・携帯時の耐久性にも富んでいる。

以上のことから、VRを携帯する場合の有力な選択肢であると考えられる。特に、既にThunderbolt3が付いている高性能モバイルPC、十分な性能のGPUを持っている人にとっては、実現に必要な費用が6万円程度ですみ、極めて有力な選択肢なのではないかと思います。

2016年12月17日土曜日

Deep LearningとVRのための自作PC

はじめに

Deep Learning(ディープラーニング)とVR(バーチャルリアリティー)用途で自作PCを組んだので、どんなパーツを買って、どれくらい費用がかかり、どういう感じでセットアップしたのか、組み立てたPCでどれだけの性能が達成できたのかをまとめておこうと思います。(2016年度9月末の情報なので、価格等の情報が古くなっている可能性もあります。)

要件

まず、今回作るPCに求める要件は、

1. 予算はPC+GPU1つで20万前後
2. OculusやHTC ViveといったハイスペックなVRが実行でき、VRコンテンツの開発が行える。
3. 数GB~数十GB単位ぐらいのアドホックデータ分析が安定して高速に出来る
4. 今後GPUを増やす可能性が高いので、それに耐えられる様な拡張性や電源性能 です。

自作したPCのスペック

部品は全て秋葉原のTSUKUMOで買いました。ネットで買っても大体同じぐらいの値段で買えると思います。グラボは演算性能とIOに関してコスパの良いGTX1070を用いることにします。Deep Learningのみの場合は、IOがそこまで重要では無いかと思うので、Maxwell世代のGPUがコスパが良いと思います。しかし、今回用途を想定しているVRの場合、IOが極めて重要なので、IO性能が高く、演算性能のコスパも高いPascal世代のGTX1070を用います。Core i7 6700KとLGA1151対応マザーボードの組み合わせがコスパが良いように思ったので、それらを中心に揃えました。

構成は以下の通りです。
  • マザーボード: ASUS Z170 Pro Gaming
    Intelの次世代CPUアーキテクチャである、Kaby Lakeが公表された影響か、LGA1151のマザーボードとCPUが安くなっていたので、LGA1151に対応しているZ170 Pro Gamingにしました。 USB3端子が豊富であり、オーバークロックしやすいことから、Z170 Pro Gamingです。 高耐久性のSABERTOOTH Z170 MARK 1も魅力的でしたが、今回の用途ではそこまで必要ないだろうということで、諦めました。 
  • CPU: Intel Core i7 6700K
    4GHz、4コアという高性能かつ、先述の理由でコスパの良くなっているCPU。
  • CPUクーラー: 風魔 SCFM-1000
    ケースにいい感じに収まるLGA1151に対応しているクーラー
  • 電源ユニット: HX1000i CP-9020074-JP 
    80PLUS PLATINUM
    GPUを複数台使っても安定して電源供給できるぐらいの高性能電源
  • メモリ: Crucial CT2K8G4SFD8213 x2 合計32GB
  • SSD: SAMSUNG MZVKW512HMJP-00000
    512GB M.2 2280 PCI-Express 3.0 x4接続 NVMe SSD MLC V-NAND Read 最大3200MB/Sec Write 最大1700MB/Sec
    IOに優れ、容量もそこそこあるのでこれにしました。若干オーバースペックかも
  • ケース: Core V5
    ファンが2つつけれて冷却性能に優れるケース
  • ファン:QF120BALANCE x 2

ここまでGPUを含まない構成で保証も含めて、15万5000円ぐらい
  • グラボ: ASUS ROG STRIX-GTX1070-O8G-GAMING
    ASUS GTX1070のオーバークロックが出来るバージョンです。 信頼性が高いというASUSを買っておきました。 Amazon.comからGTX1080を直輸入すると7万円以下で買えるらしいです。しかし、初期不良にチキったのとサポートが厚い方がいいなと思い、結局日本で買いました。  
GPUが保証も含めて60000円ぐらい合計21万5000円
となっています。BTOなどと比較すると結構コスパ良く組めたのでは無いかと思います。

ベンチマーク

定性的な評価としては、
現状UnityでOculus Rift用VRゲームを作成したり、Oculus Rift向けゲームを実行する上で特に不便なことは無く、サクサク動き、問題無いかと思います。ただ、Deep Learning・データ分析用途では、まだチュートリアルを動かした程度でほとんど使っていなく、細かく性能を見たりはしていません。


定量的な評価としてはWindows10公式のベンチマークであるWindows エクスペリエンスインデックス(ゲーム用のベンチマークのほうが、比較として良いとは思うのですが、簡易的に)を用いて評価しました。

Windows エクスペリエンスインデックスでは、以下のような結果になりました。結果としては上位ゲーミングデスクトップ並の性能は出ているのかと思います。
Windows エクスペリエンス インデックスお使いのコンピューターのパフォーマンスの評価と改善
コンポーネント評価についての詳細サブスコア基本スコア
プロセッサ:1秒あたりの計算8.58.5一番低い
サブスコア
メモリ(RAM):1秒あたりのメモリ操作8.5
グラフィックス:Windows Aeroのデスクトップパフォーマンス8.9
ゲーム用グラフィックス:3Dビジネスおよびゲームグラフィックス パフォーマンス-※1
プライマリ ハードディスク:ディスクのデータ転送速度8.9
Windows エクスペリエンス インデックスは、主要なシステム コンポーネントを1.0から9.9のスコアで評価した値です。
※ ゲーム用グラフィックスはWindows8.1/10では計測されません
これらの性能が一般に流通しているパソコンと比較してどうなのかを示した図が以下になります。



評価項目の詳細は以下のとおりです。
CPUIntel(R) Core(TM) i7-6700K CPU @ 4.00GHz
CompressionMetric908.3 MB/s
EncryptionMetric6300 MB/s
CPUCompression2Metric2227.2 MB/s
Encryption2Metric2556.4 MB/s
CompressionMetricUP174.9 MB/s
EncryptionMetricUP866.2 MB/s
CPUCompression2MetricUP457.6 MB/s
Encryption2MetricUP641.1 MB/s
DshowEncodeTime0.82 s
Memory29GB
Bandwidth29462 MB/s
GraphicsNVIDIA GeForce GTX 1070
DWMFps4950.6 F/s
VideoMemBandwidth84058.6 MB/s
MFVideoDecodeDur0.07 s
DiskSAMSUNG MZVKW512HMJP-00000

Sequential Read2633.2 MB/s
Random Read732.7 MB/s