White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

外資に転職して1年が経ちました。

外資に転職して1年が経ったので個人的にメモ。

業務内容はコンサルタントという肩書で、売った製品のデリバリー(導入)や、導入支援を行ってます。また場合によっては営業と一緒にお客さんの悩みについて聞きにいったりします(この辺りはプリセールスっぽい)。

これまでの会社は社内の技術部隊でしたので、イマイチ自分が行っている仕事の金銭的感覚がわかりにくかったですが、今は自分の稼働コスト=売上につながるので貢献度合いはわかりやすくなった気がします。

ボスからの命令は絶対だと思いますが、レポート先のボスは日本にいないのであまりやりとりしていないです。上から降ってくる仕事だけを受け取る人には向いてないですが、逆に仕事受けすぎても自己責任になりそうですね。あと規則は守らなければいけませんが、逆に守るもんさえ守っていれば細かいとこはつべこべ言われません。これは日本の大企業以外そうでしょうけど。(ただしこの段落は人により異なると思います。営業さんは売上出すために大変頑張ってます)

社内のやりとりは英語が多いです。特にサポートとのやりとりは全部英語です。ボスとのやりとりも全て英語です。ただ日本にわざわざ来る方は日本人が英語苦手なの知ってるので、ゆっくりでも話を聞いてくれます。なのでまずは中学レベルでもいいので単語や文章で伝えていけばいいです。ちゃんと取引するならこれじゃダメなんでもっと上達必要ですね。

あと社内のコミュニティは世界トップクラスのやりとりが読めるので重宝してます。Hadoopのコミッタもいますし、CloudFoundryに至ってはコアメンバがいますしね。

転職は日本の大企業に比べると圧倒的に多いです。が日本のWeb企業も結構多いのでそんなもんって感じもします。逆に再就職の出来ない環境の方が怖いでしょう。ある日突然チームごと首を切られるってのも目にしましたが、自分の親も日本の大企業で同じ事やられたからなぁ。

トータルとして前職といいかどうかは人によると思いますが、自分は外資に入ってみていい経験を得ていると感じています。前職でも、とてもいい経験させてもらいました。

 

参考になりそうなもの:

アメリカのIT企業で働くために行った英語の勉強法など - 科学と非科学の迷宮

 

Thinkpad X220を買った

ヤフオクで1万円代で入手できるのがあったので、入手。普通は落札に2万円かかる模様。X220はX230以降と違いキーボードががっちりしていて、X200sではなかったESCキーの大型化がされていてVimmerにも使いやすい。またメモリも最大16GBと手元のMacBookAir(2011 late)よりも多く積める。

HDDを外しIntel X25-Mのゴムを外して装着。(X220が7mmまでのHDD/SSDに対応の為。ゴムありだと9mm)

さらに液晶をIPSの新品に変えたら世界が変わった。当分使えそう。

 

きんいろDeepLearning

http://deep-learning-hackathon.connpass.com/event/12867/

このイベントに参加して、DeepLearning(Caffe)を回してみました。

大体これまで上がってる記事で、ゴチうさでDeepLearningされてるのがあったので対抗してきんモザでやってみました。n番煎じです。((既にラブライブ等でもされてるようなので))

環境

問題設定

事前にanimefaceで顔領域を検出した部分に対し、アリスであるかカレンであるか、それとも他のキャラであるかを判定したい

単純な3クラス分類問題ですが、アリスもカレンもキンパツなので、色によるキャラ判別はできません。おそらく輪郭や目つきの情報を使う必要があります。

手順

ご注文はDeep Learningですか?[1]のところとほぼ同じです。 ソースもほぼそのまま使っています。

まずアリス、カレン、他の画像を用意しました。アリスが700,カレンが600、他が6000枚くらいです。画像の用意には[1]のコードをそのまま使っています。

次に自分の手元のマシンRX3上にCaffeをインストールして、LevelDBに上の画像をセットしました。さらにcifar10_quick_train_test.prototxtとcifar10_quick.prototxtを書き換えます。

今回はアリス、カレン、その他の判別なので、ip2レイヤーのnum_outputを3にしています。

また、最近のCaffeの更新で、データの読み込みDBがLevelDBからLMDBとかいうのに変わっているため、LevelDBを読むように書きなおしました。

$ vim examples/cifar10/cifar10_quick_train_test.prototxt

name: "CIFAR10_quick"
layer {
  name: "cifar"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mean_file: "examples/cifar10/mean.binaryproto"
  }
  data_param {
    source: "examples/cifar10/cifar10_train_leveldb"
    batch_size: 100
    backend: LEVELDB
  }
} 
layer { 
  name: "cifar"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  } 
  transform_param {
    mean_file: "examples/cifar10/mean.binaryproto"
  }
  data_param {
    source: "examples/cifar10/cifar10_test_leveldb"
    batch_size: 100
    backend: LEVELDB
  }
} 

また、mean.binaryprotoファイルがないので、

cd $CAFFE_ROOT/data/cifar10
./get_cifar10.sh
cd $CAFFE_ROOT
./examples/cifar10/create_cifar10.sh

を実行して作ります。一緒にcaffe/examples/cifar10/cifar10*lmdbとかできますが使わないので消します。

ここまで編集し終わったら、EC2のN.Virginiaにつないで、 ami-763a311eをベースとしたg2.2xlargeのSpotInstanceを立ち上げます。このインスタンスは既にCUDA+Caffeまで入った状態なので、すぐに学習ができます。

インスタンスを立ち上げたら、RX3のcaffe/examples/cifar10以下をEC2:caffe/examples/cifar10以下に上書きします。

$ build/tools/caffe train --solver examples/cifar10/cifar10_quick_solver.prototxt

を実行すると学習が始まります。なおRX3ではCUDAを入れずにコンパイルが通りましたが、実行の際には examples/cifar10/cifar10_quick_solver.prototxtの中にあるsolver_modeをCPUに変える必要がありました。

# solver mode: CPU or GPU
solver_mode: CPU

学習時間

RX3で1時間以上、g2インスタンスで1分です。やはりGPUインスタンス早いですね。スポットインスタンスで起動からTerminateまで1時間も使ってないはずです。

学習結果

[1]と同様に元の動画に当てはめてみたのが下の画像です。ピンクがアリス、青がカレン、他が水色です(ゴチうさの判定器のチノ、ココア、リゼを他、アリス、カレンに当てはめただけです)。

f:id:showyou:20150524174057p:plain f:id:showyou:20150524174132p:plain f:id:showyou:20150524174152p:plain

大体顔と判定出来ているところでは、ほとんどアリスとカレンが正しく識別できています。画像突っ込んだだけで他に特徴抽出とかパラメータ設定などは一切行っていません。

明らかに失敗しているパターンも貼っつけておきます。 f:id:showyou:20150524174241p:plain

アリスなのにカレンと判定されています。

元のサイトの方でも書かれていますが、AnimeFaceの検出能力はかなり高いと感じるのですが、その検出能力に不満を感じるぐらい精度よくアリス・カレンの認識が出来ています。

参考サイト

[1]ご注文はDeep Learningですか? http://kivantium.hateblo.jp/entry/2015/02/20/214909

[2]Caffeのインストール http://kivantium.hateblo.jp/entry/2015/01/03/223607

[3]アニメ顔検出 https://github.com/nagadomi/lbpcascade_animeface

[4]cifar10 tutorial http://caffe.berkeleyvision.org/gathered/examples/cifar10.html

[5]Caffe on EC2 Ubuntu 14.04 Cuda 7 https://github.com/BVLC/caffe/wiki/Caffe-on-EC2-Ubuntu-14.04-Cuda-7

失敗談

MacでOpenCV2.4.9をbrewで入れたのですが、シンボリックリンク貼ってもimport cvが通りませんでした。なのでLinuxを使っています。

久々にOpenCV使ったので、動画の出力時に入力と同サイズじゃないとダメな件を忘れてました。正直Caffeのインストールより手こずってます。UbuntuベースであるMint使ってるせいか、Caffeのインストールはすんなり行きました。

またavidemuxから音声が抜き出せていません。

データ集計・分析環境のあれこれ

現在自分の主業務はデータ集計・分析基盤の構築なのだけども、意外とまとまった情報ってなさそうなのでまとめてみる。まずは雑多に並べてみて、あとで整理します。あと自分が触ってないものもあります。

 

・何を使っていくべきか?

まず機械学習とか分析するのにいきなりHadoopクラスタ組み上げるのも大変なので、必要に応じて学んで行けばよいかと。

逆に大量ログデータを一括で処理したいって場合にはHadoopでも組み上げた方がいいかと。

 

参考:昨年秋の日記

http://showyou.hatenablog.com/entry/2014/09/15/005055

 

・言語

Python

R

Julia

SQL

HiveQL

 

・並列計算エンジン

Hadoop

 Hive, HBase, Pig, YARNなどはHadoop上の1部品。Hadoopの中身を列挙するだけでも長くなるので別エントリで

Spark

 Sparkはメモリ上でのバッチ計算を行うシステムで、メモリに乗るレベルの計算ならHadoopより早い(対MapReduce. YARNベースのものは要比較)

 

・KVS

HBase

 Hadoopの上で動く

Redis

   シンプル故に早い

MongoDB

   jsonでデータやりとり出来るのが楽。トランザクションで偶に泣きを見てる人がいる気がする。

Riak

Cassandra

 Column(列)ベース

Geode

 Pivotal GemFire の OSS 版、Geode のビルド - めざせ!細マッチョ

   https://network.pivotal.io/products/project-geode

 in memory KVS. Pivotal GemfireのOSS版。ビルドは一手間いりそう。

最近couchDBは聞かなくなった気が

 

・DB

MySQL

PostgreSQL

Greenplum

Vertica

Redshift

Hive

 DBというより、Hadoop上のファイルや集計処理をDBのように扱えるツールといった感じ。SQLとは少し違うHiveSQLを使用。

Impala, Presto, Drill,  HAWQ

 このあたりもHadoop上で動くSQLエンジン

 

・Streaming処理

Apache Storm

Norikra

 http://norikra.github.io/

Spark Streaming

 自分まだ触ってないですが、バッチ処理を細かくして実行間隔を短くしてるので、上2つほどではない気が

 

・視覚化

ipython notebook

RStudio

Hue

shib

Pentaho

Tableau

Microstrategy

 

・ログ・データ転送

Flume

Sqoop

fluentd

embulk

pentaho

 

機械学習

scikit-learn(python)

Torch7

madlib

 http://madlib.net/

 SQL, Rから利用できるOSSのライブラリ。

libsvm(liblinear)

 

・Deep Learning

Deep Learning リンク集 - 人工知能に関する断創録

Torch7

H2O

 http://0xdata.com/

 

適当に列挙するだけじゃなくて、ユースケースに応じて使い方を紹介した方がよさそうですね。

#ingress UPV 10000行くための行動方法

UPVは、今(2014年12月)時点ではもう少し増えてるかと思いますが、少し前はA16のエージェントでも2000程度でした。私は5000強です。恐らく日本の人でUPV10000ってのもそうそういないと思うので、10000目指したいと思います。

 とか書いてましたが、3ヶ月でUPV10000行きました。東京も多いですが、地方にも結構顔を出しています。

f:id:showyou:20150322205442p:plain

前回からですと、

  1. 名古屋周辺。というか名古屋から東京までの東海道線沿線
  2. 上野公園
  3. 広尾
  4. 中野・杉並
  5. 栃木
  6. 仙台
  7. 盛岡

あたりに顔を出しました。既に東急バス沿線は大体ハック済みです。

コツですが、

  1. Portal密集区間はmissionを頼りにする
  2. 移動は路線バス+徒歩メイン
  3. 旅行を楽しむ

あたりでしょうか。Portalが増えたのはいいのですが、多すぎてどこから攻めればいいかわからない場合があります。その場合はmissonで15min(分)未満のものを選んで行けば自然と近場にあるPortalをまとめて取れるわけです。あとingressを目的に実施すると途中で虚しくなるので、旅行のついでにハックするくらいの方が気楽でいいと思います。

横須賀・猿島に行ってきた

2月はいろいろありましたが、とりあえず生きてます。

たまたま軽く休みができたので、今日でingressのキャンペーン終了だとか言う横須賀まで行ってきました。

ちょうど行った時間が14:00時だったので、無人島の猿島を散策できる、ぎりぎり最終の便に乗ることができました。

これが猿島に行く船。出発地点の三笠公園では激しい闘いが広げられてました。

f:id:showyou:20150228145612j:plain

ぼやけてますが猿島

f:id:showyou:20150228150246j:plain

船上から横須賀南東方向

f:id:showyou:20150228150555j:plain

猿島の船着場

f:id:showyou:20150228150852j:plain

降りたところ

f:id:showyou:20150228151049j:plain

島の中の施設

f:id:showyou:20150228153927j:plain

ミッションクリアの様子(一番左2つのメダル)

f:id:showyou:20150301022037p:plain

キャンペーン最終日だし何としてもPortalを取りに行くエージェントいるかと思いましたが、明日も恐らく船があるからか、あんま攻撃激しくなかったですね。

何とか一箇所だけは占拠しました。

島の南部は特に問題無いですが、北端あたりだと電波がかなりつかみにくいですね。

f:id:showyou:20150301023221j:plain

んで、キャンペーン応募が今日までだったのですが・・帰って寝てたら日付が変わってたというオチ。残念。