« 2016年2月 | トップページ | 2016年5月 »

2016年4月

2016年4月17日 (日)

我が家におけるWindows Home Server興亡記

この4月12日でWindows Home Server 2011のサポートが終了しました。 この製品ラインは後続バージョンが出ていませんので、 これで終息ということになります。 公式には、移行先はWindows Server Essentialsということになるのかな。 Windows Server Essentialsを「家庭用」に直接使うのはちょっときついけど。

で、まあ、 「あー」と遠い目などしていたところ、 以下のツイートが。

> マイクロソフトの絵本「ママ、なぜおうちにサーバーがあるの?」

なにこの絵本…?!Σ(・□・;)
最近はマイクロソフトはクラウドに力を入れてるから、この絵本は古い内容になだていそう。

https://t.co/hzfgbZMsjR

ちょまど@MS入社しました (@chomado) 2016年4月15日

最近の若い人はもう知らないかねえ(よぼよぼ)、 という気分なのですが、 折しも熊本の地震の様子を見つつ、 阪神淡路大震災や東日本大震災のことを思い出したりして、 たいした話で無くとも体験したことはどっかに書き残す方がいいのかなあ、 という気になったので、 書いてみます。

Windows Home Serverとは

Windows Home Server(WHS)はMicrosoftが提供していた家庭/SOHO向けのサーバーOSです。 USでのリリース時期は以下の通り。

  • 初代(Windows Server 2003 R2ベース): 2007年夏
  • 2011(Windows Server 2008 R2ベース): 2011年春

USでは、HPが最初の頃からWHSマシンを出してました。 コンパクト(当時基準)なマシンがテーブルの端とかにのっかっているイメージ写真を見て、 「おおっ」などと思ったわけです。 今HPのサイトを探してもその写真はもう無いようなので、 検索したところ、 「そうそう、そんな感じ」という写真を見つけました。

HP EX470が本棚に置かれている写真

誰の写真だろうと思ったら、Scott Hanselmanじゃないですか。 2007年12月8日のBlog

主な機能は、

  • ファイルサーバー
  • クライアントPCからの自動バックアップ
  • リモートからの家庭内ネットワークに対する窓口

ですかね。

例によってなかなか日本に来てくれなかった

で、発表直後から「これ欲しいなあ」と思っていたのですが、 なかなか日本語版が出る気配が見えず、 じりじりしていました。 一時は英語版でシステム組もうかと検討していました。 なんでそうしなかったんだっけな。 なにか理由があったような気がしたけど、忘れた。 ともかく、日本語版が発売されたのは一年あまり後の2008年の8月30日でした。

この前後の期間、 マイクロソフトでWHSを担当していたのは林憲一さんという方でした。 その当時のマイクロソフトのカンファレンスや展示会でWHSを説明してらして、 私もそういう場で話を聞き、 冒頭のツイートの「ママ、どうしておうちにサーバーがあるの?」日本語版冊子をもらいました。 今でもどこかにあるはず。 私的にはこの冊子は結構うけたんですけど、 家に帰って妻に見せたら「意味わかんない」的な反応をされました。 まあ、その妻もその後WHSを(本人はあまり意識すること無く)使うことになるわけですが。

林さんは、 最近GPU関係でお名前を見かけたような気がするな、 と思って検索したら、 今はNVIDIAの偉い人っぽい。

日本語版WHSリリースに合わせて、 いくつかのメーカーがマシンを発表したのですが、 ほとんどのモデルのCPUがAtomでした。 ちょうどAtomの出始めというタイミングのせいだったのでしょうが、 私は省電力性よりも動画とかを家庭内に配信できるサーバーが欲しかったので、 なんか思てたんと違うなあ、と。

というわけで、自力でサーバーを組む

というわけで、 サーバーを組み立てることにしました。

各社の使えそうなマシンを物色したところ、 日本HPの法人向け直販サイトがProLiant ML110 G5を キャンペーン価格(2万円くらい)で販売していたので、それを購入。 別途ハードディスクとWHSのDSP版を買い、 ホームサーバーを組み立てました。

インストールとかで苦労した記憶はないなあ。 覚えていないだけかも。

ProLiantは一般的なタワー型筐体なので、 先にあげた写真のようにコンパクトにはなりませんが、 まあ、仕方ないね。 あと、 サーバー用マシンにはよくあることですが、 起動直後しばらくの間ファンが全力で回り、 かなり騒がしくなります。 Windows Updateの日とか、 真夜中に自動的に再起動がかかり、 マシンが突然唸りだしてびっくりする。

使ってみて

うちではWHSをクライアントPCの自動バックアップと ファイルサーバ(メディアサーバーを兼ねる)目的で使っていました。

PCのバックアップは便利だったなあ。 各PCにエージェントを仕込んでおくと、 毎日夜中に自動的にスリープを解除してバックアップを行います。 バックアップは毎日取りますが、 日ごとのもの月ごとのものそれぞれに保存する世代数を指定します。 デイリー過去3日分、マンスリー過去6ヶ月分、とか。 古くなった世代は自動的に削除されます。

まあ、 バックアップツール購入して頑張って設定すれば同様のことはできると思いますが、 PCにエージェントインストールするだけで、 あとはほぼよきに計らってくれ、 操作が必要な場合も直感的にわかりやすいGUIでできるので、 家庭内(特に家族共用マシン)ではありがたかったです。

HDD故障時の入れ替えも、 不調のHDDをWHS上で切り離し、引っこ抜いて、新しいのをがっこんと突っ込み、WHSに追加するだけです。 いや、こう書くとふつうのサーバーのメンテと同じにしか見えないけど、 細かい確認とか設定とか不要で、 ボタン二つ三つ押すだけでなんとかしてくれます。 これ、RAIDではなく、Drive Extenderという技術でした。 コンシューマー向けにはRAIDは適さないという考えだったようです。

WHSはアドインで機能拡張できますが、 うちではServiio(メディアサーバー)ぐらいしか入れてなかったな。

日本でWHSを使っている方も多くいたようで、 何か問題があっても検索すれば日本語で情報を得られることがほとんどでした。 特にお世話になったのが、 薩摩藩中仙道蕨宿の人のサイトで、 必要な情報は大体ここからたどることができました。 ありがとうございました。 ちょうど「Windows Home Server 2011サポート終了。さようならWindows Home Server 」というエントリを書かれていますね。

終焉

というわけで、 我が家では5年以上にわたり便利にWHSを使い続けていました。 しかし、 WHS 2011のリリースが遅れ、 WHS 2011からDrive Extender機能が落とされることになり、 なにか微妙な雲行きを感じる中、 2012年7月のWindows Server 2012のエディション発表時に、 以降WHSの提供が無いことが明らかになりました。 つまり、WHS 2011でWHSはおしまい。

その一方、 初代WHSのサポート終了が2013年1月8日にせまり、 うちでも今後どうするか考えなければならなくなりました。 WHS 2011への移行も考えましたが、以下の点から断念。

  • WHS 2011はx64のみの提供で現行のハードで動かせないこと。
  • Drive Extender機能が無くなり、HDD障害に対する考え方を考え直さなければならないこと。
  • 移行したとしても、その後は無いしなあ。

結局、 サポート切れの後もしばらくしつこく初代WHSを使っていましたが、 一台のHDDが不調になった2014年5月にQNAPへ移行しました。

ハード(ProLiant)は予備としてしばらく残していましたが、 先日、PCリサイクルに出しました。 法人向け機種だったので無料リサイクルの対象外でした。 PCを無料で引き取ってくれるところもありますが、 何かこう、最後まで手続きして終わらせたい気分になってたので、 リサイクル代を払ってHPにマシンを返送しました。

今後

今の見通しでは、 ホームサーバー的な機能はクラウドから直接提供されるようになるだろう、 ということになるのかな。 面倒見なければならないデバイスは、 モバイルの比率が高くなりそうだし。

QNAPに移行する際も、 全面的にクラウドストレージを使うことを考えましたが、 結局動画とPCバックアップデータのサイズがネックになり、 あきらめました。 写真ならば容量無制限に保存できるサービスがあったりしますが、 動画とかはさすがにねえ。 じゃあ、テラバイト級のクラウドストレージを自力で確保するか、 と考えるとまだそれなりの料金がかかるし。

で、QNAPにしてよかったかと言えば、 ファイルサーバーとしては十分ですが、 PCのバックアップはWHSほどお手軽で無いので、 「確実にバックアップとる度」は低下しています。 まあ、これはQNAPのせいではなく、 わたくしの心がけの問題ではあるのですが。

そんなこんなで、 家庭LAN内の面倒をうまいことみてくれつつ、 背後のクラウドとええ感じで同期してくれるようなサーバーがいてほしいのです。 今時の家庭/SOHO向けのNASはそういう部分にも対応しつつありますが、 Windowsの面倒を特に丁寧に見てくれるわけでもないので、 WHSが続いていてくれてたらなあ、などと思うのでした。

2016年4月 2日 (土)

Microsoft Cognitive ServicesのEmotion APIを使ってみた (使って色々思いを馳せた編)

前回のMicrosoft Cognitive ServicesのEmotion APIを使ってみた (サンプルをビルドする編)の続き。 画像からの感情読み取りに興味をそそられた私が、 様々な画像をEmotion APIにかけて、はるかなるディープラーニングに思いを馳せる回。

まずは、サンプル

まずは、サービス側が用意しているサンプル画像を読み込ませてみます。 サンプルアプリの左のペインで、"Detect emotion using a URL"を選択します。 デフォルトでサンプル画像へのURLが設定されていますので、そのまま"Detect"をクリック。

サンプル画像の解析結果

三人分の顔が認識され、それぞれから検出した感情値(Emotion score)が表示されます。 右のペインには、各人の顔とそこから検出した感情値のうち、上位二つが表示されています。 下のペインには詳細が出ます。この画像で見えている部分は子供の分の結果ですね。 お子さん、NeutralよりSurprise成分の方がありそうな気がするが。

ふむ。

自分の写真

次に、自分の写真を読み込ませてみました。 左のペインで、"Detect emotion using a stream"を選択し、 PC内の自分のドヤ顔写真をアップロードします。

アプリのステータスバーを見ると、 "Microsoft will receive the images you upload and may use them to improve Face API and related services. By submitting an image, you confirm you have consent from everyone in it." とあります。 画像ファイルを直接アップロードする場合は、機能改善に使われる可能性があるということで、 私のドヤ顔が改善上の大論点になる可能性もあるわけですね。 いいけど。

で、結果。 キャプチャ画像は出しませんが、

  • Happiness:0.274908
  • Contempt:0.028495

だそうです。

「表面上おとなしく暮らしているが、心の底では世界を呪っており、押そうとしたバスの降車ブザーを先に押されたことをきっかけに世界を滅ぼそうと決意する確率が83%」 みたいな結果が出たらどうしようかと思いましたが、 そもそも単純な選択肢しかありません。 ニュアンスが正確に一致するか微妙だけど、日本語訳をつけるとこんな感じ?

  • Anger (怒り)
  • Contempt (軽蔑)
  • Disgust (むかつき)
  • Fear (恐れ)
  • Happiness (喜び)
  • Neutral (ふつう)
  • Sadness (悲しみ)
  • Surprise (驚き)

また、 このAPIは画像から表面的に読み取れるものを読み取っているだけですね。 当たり前か。 画像から本心が読めるようになると、大変なことになります。 というか、保護しなければならない機微情報だろう、それ。 スマホで顔をキャプチャされながら、 「冷蔵庫にあったプリンを食べたのはあなたですか?」 とか詰め寄られる未来を考えると、けっこうピンチ。

いや、表面上の感情を読み取るレベルでも、 なにか間違いがあれば危険ですね。 独裁者の前で感極まった表情で拍手している写真を解析してみて、 なにかの間違いで"Anger"と"Contempt"が上位に来ちゃったら、 粛清ものです。 命にかかわる重大インシデントです。

人間側が特性と使いどころを考えて使わないと、 えらいことになりそうですね。 (まあ、技術一般そうだと言えばそうなんだけど)

キハ65

ということで、 この場ではこの先、 技術を平和利用することにして、 実在の人でないものを解析してみます。

機械学習による画像認識といえば、 去年、友利奈緒判定botで友利奈緒な鉄道車両を探してみたという話がありました。 それにたいへん感銘を受けたことを突然思い出したので、 いきなりですがキハ65の画像URLを突っ込ませていただきます。 よろしくお願いいたします。

キハ65画像の解析結果

画像出典: Wikipedia 「国鉄キハ65形気動車」から、 http://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/JNR_kiha65_1.jpg/800px-JNR_kiha65_1.jpg

"No emotion is detected. This might be due to: (略) no faces are in the images (略)"

そうですか。

感情値を算出する前に、 人の顔を検出しなければならないので、 まずそこをクリアしなければ先へ進めない訳ですね。

一松さん

次はまあアニメキャラでしょう。 友利奈緒でもいいんだけど、 ここで今絶賛腐り中の次女に聞いてみましょう。

質問: 推し松は?

回答: 一松

なるほど。

一松画像の解析結果

画像出典: Wikipedia 「TVアニメ「おそ松さん」公式サイト」から、 キャラクター紹介の一松

"No emotion is detected."

うーん。

池上遼一絵

単純化されている絵は難しいのかも。 じゃあ、リアルな絵ではどうでしょうか。 Amazonから池上遼一先生の絵の表紙で、 顔が大きく描かれているものをみつくろって解析してみます。

池上遼一絵の解析結果

画像出典: Amazonの「信長1 桶狭間の戦い (MF文庫 10-4)」から、 表紙絵画像

認識されました。すばらしい。 "Anger"と"Sadness"です。渋い。

その他色々やってみて

池上遼一先生の絵は、結構認識されます。白黒の絵でもいけます。 一方、画風を似せているといわれる「魁!!クロマティ高校」とかはあまり認識されません。 「北斗の拳」は認識されたりされなかったり。

そんなに多くのサンプルを調べたわけではありませんが、 感触としては、 立体感が読み取れるかどうかが結構重要であるように思えます。 立体感も、 記号的な表現ではだめで、「影」っぽいものが具体的に読み取れるかどうかが重要なんじゃないかな。

要するに、現状では、記号的な表現にはあまり対応していないようです。 まあ、看板の絵とかにいちいち反応していたらうるさいだけだし、 とか思いつつ、 一方人間は、看板の絵だと理解しつつ、 その絵の表情を読み取ることができるよなあ、 そういえば、 子供が赤ん坊の頃など思い出すと、 けっこう小さいときから記号的な表現を認識できていたような気がするなあ、 とか考え、 わしらの頭の中ではどのような特徴量が構成されているのだろうか、 などと思いを馳せるわけです(とりあえず馳せるだけだけど)。

で、一番知りたいのは、 これらのAPIの奥で、 どのようにディープラーニングが用いられているかです。 どの量に着目してどういうモデルを組んで、 どういう学習をさせ、 どの程度の結果に落とし込んでいるのか。 なんで結果をこの(※)八種の感情にしたのか。 さすがにそういうのはまだ秘密なのかなあ。

※ 数を書き間違えていたのを修正。(2016/04/03 00:04)

Microsoft Cognitive ServicesのEmotion APIを使ってみた (サンプルをビルドする編)(追記あり)

最近、ディープラーニングを勉強し始めていて、画像から感情を検出するという技術(Emotion API)に興味をそそられています。ということで、Emotion APIを簡単に使ってみたという話。まず、APIを準備してサンプルをビルドする編。

Microsoft Cognitive Servicesとは

Microsoftが提供するWebサービスです。 Build 2016(Microsoftの開発者イベント、2016/03/30-04/01にサンフランシスコで開催)で発表されました。どういうものかを一言で説明するのは難しいんだけど(いや、一応それらしい説明はあるんだけど)、以下のビデオのような世界を実現するために必要となるもの、と考えるのが分かりやすいのではないかと思います。これは、Buildの初日キーノートの最後に流されたビデオです。

Microsoft Cognitive Services: Introducing the Seeing AI app (「字幕」を有効にすると字幕を見ることができます。英語だけど)

Webサイトは以下。

Microsoft Cognitive Services

去年、画像から人の顔を特定して年齢を推測するWebサイトが話題になったのを覚えているでしょうか? Project Oxfordというやつですね。それが進化したものです。

Emotion APIとは

Microsoft Cognitive Servicesを構成するAPI群の一つで、画像やビデオから人の顔が写っている部分を特定し、そこから読み取れる感情を推測して返します。

Emotion APIのページに載っている以下のデモを見れば、どういうものか想像できるのではないでしょうか。

Emotion APIページのキャプチャ

Emotion APIのリファレンスを見ると、 4個のAPIが定義されています。今回ここで使ってみるのは、 "Emotion Recognition"です。

Emotion APIを使うには

ちょっと試してみるだけなら、先のページのデモ機能でも十分ですが、せっかくなのでもう少しまじめに使ってみます。

Emotion APIを使うには、以下の手順が必要です。

  • Microsoft Cognitive Servicesを利用するためにアカウントを登録する。
  • Emotion APIを呼び出す。その際には、登録した際に割り当てられるキーを使う。

「Emotion APIを呼び出す」はcurlコマンド一発でもいいのですが、サンプルアプリが用意されているようなので、それを使ってみます。

以下、その手順の説明です。次回のブログでは、そのサンプルアプリを「使ってみた編」を書く予定。

Microsoft Cognitive Servicesを利用するためにアカウントを登録する

Microsoft Cognitive Servicesのページの"Get started for free tody"ボタンから登録できます。その飛び先のページに説明がありますが、

  1. Microsoftアカウントでサインインし、
  2. 使いたいAPIの種類にチェックをつけ、同意事項をチェックして"Subscribe"ボタンを押す

すると、登録処理が行われ、 Cognitive Servicesのサブスクリプション管理ページに飛びます。ここで、"Emotion - Preview"の項目を見てみましょう。

Cognitive Servicesのサブスクリプション管理ページのキャプチャ

こんな感じです。時刻表示はGMTのようですね。現状、無料コースでは「30,000トランザクション/月 かつ 20トランザクション/分」までのようです。

さて、ここで重要なのはキー(Key)です。キーはCognitive Servicesの各API毎に用意される文字列で、この文字列が後でAPIへのアクセスをするための鍵になります。アカウントにはキーが二つ(Key 1, Key2)が割り当てられています。どちらも等しく有効です。

後にサンプルをビルドして実際に動かしてみる段になると、このキーが必要になります。その際には、このページからキーをコピーします。

キーの文字列は、最初"XXXXXXXXXXXXXXXXXXXXXXXXXXX"のように隠されています。、 "Show"をクリックして実際の文字列を表示させ、文字列をコピーし、 "Hide"をクリックして再び文字列を隠します。

言うまでも無いとは思いますが、キーは秘密にしなければなりません。キーがばれてしまうと、他の人がサービスを自分のアカウントで使うことができてしまいます。キーがばれてしまった場合は、 "Regenerate"をクリックしてキーを「取り替え」ます。

Emotion APIのサンプルをビルドする

Emotion APIのサンプルはGitHubにあります。 GitHubのMicrosoft/ProjectOxford-ClientSDKプロジェクト下の、 Emotion/Windows/Sample-WPFにある Windows版サンプルを使います。

単純に、 GitHubからサンプルをとってきて、 Visual Studio 2015で"EmotionAPI-WPF-Samples.sln"開いて、ビルドすればできあがります。

ただ、ビルドの最初にNuGetパッケージの復元が行われますが、私の環境ではNuGet動かず、ビルドエラーになりました。しかし、これはサンプルの問題では無く、 NuGetが全体的に動いていなかったので、私の環境の問題のようです。つい最近までNuGet動いていたと思うんだけどな? Visual Studio 2015の「ツール」-「オプション」の「NuGetパッケージマネージャー」-「パッケージソース」でチェックがオフになっていたv2パッケージソースを有効にしたらビルドできました。

【2016/04/07追記: これはどうやら、NuGetの問題のようでした。「NuGet 3.4 Known Issues」を参照のこと。 4/09あたりに修正が公開されるとあるので、待っていれば直るんじゃないかな。急ぐ人は前記ページに載っているwork-aroundをどうぞ。】

サンプルコードも特にトリッキーなことはありません。 Asyncスタイルで用意されているEmotion APIのクライアントライブラリを非同期呼び出しで呼び出しているだけです。まあ、このAPIの場合、重要なところはすべてサーバー側の方だろうし。

サンプルを起動すると、以下の画面が現れます。

サンプルアプリの画面

この"Subscription Key:"に先ほどのキーを記入し、 "Save Key"を押せば準備完了。

次回、これを使って画像を色々読み取らせてみます。

« 2016年2月 | トップページ | 2016年5月 »