verbalize

文章書く練習…。

3DGANをchainerで実装した

タイトルの通り、3DGANのchainer実装をgithubに上げた。当初はkerasで書いていたが良い結果が得られず、ソースコードの間違い探しをするモチベーションが下がってきたので、思い切ってchainerで書き直した。

github.com

実はmnistなどのサンプルレベルのものを超えてちゃんとディープラーニングでタスクに取り組むのは今回が初めてだった。Chainerによるgan実装自体は公式のexamplechainer-gan-libが非常に参考になった。

モデル

3DGANはその名の通り3Dモデルを生成するためのGAN。[1610.07584] Learning a Probabilistic Latent Space of Object Shapes via 3D Generative-Adversarial Modelingで提案されているもの。前回の記事でも触れた。

構造はDCGANと同様で200次元のベクトルよりGeneratorでサンプルを生成、Discriminatorでデータセット由来かGenerator由来か(real/fake)を分類しそのロスをフィードバックする。

Generatorは以下の図(論文より引用)のようなネットワークで、Discriminatorはこれを反転したようなモデルになっている。最適化手法はAdamで、論文ではDiscriminatorがバッチを8割以上正しく分類できた場合はパラメータを更新しないようにしたとあった。

f:id:bonhito:20171024233301p:plain

3Dモデル

データセットにはShapeNet-v2を用いた。このデータセットには様々な種類の3Dモデルが収録されているが、今回は椅子のモデルのみを抽出した。椅子はおよそ6700サンプルが収録されており、ファイル形式は.binvoxが直接収録されていたのでそれを使用した。

ただ、6700サンプルの3Dデータを全てメモリに乗せることはできなかったため、初期実装では毎回のループで読み込み処理を行っていた。その後、.binvoxファイルのヘッダー読み込みなどが不要であり、処理速度に支障があると感じたので事前に.h5に書き出して使うようにした。

ShapeNet-v2に収録されているデータのサンプルを示す。

f:id:bonhito:20171024234729p:plain:w350f:id:bonhito:20171024234743p:plain:w350f:id:bonhito:20171024234801p:plain:w350f:id:bonhito:20171024234823p:plain:w350

実装

3DGANの実装をやろうと決めてから、すぐにはディープラーニングには手を付けず、3Dモデルの取扱について理解するためのツールをつくっていた。主にはSimple Voxel Viewerで、.binvox形式について理解したり、matplotlibでボクセルをどうやってプロットしようかということについて考えていた。

64x64x64のボクセルを可視化するため、最初はmatplotlibの3Dplotを試したが、scatter plotsurface plotを使うとマインクラフトのような箱を集積した見映えのプロットが実現できない上、一つ描画するのに数十秒かかることがわかった。そこからまず自作してみようと思いTHREE.jsを使ってSimple Voxel Viewerを作ってみた。ところが結局こっちもいくらか高速化は試したものの、64x64x64のサイズでも密なボクセルになるとメモリーエラーが起こってしまいうまく動作しない問題が起こった。加えて当たり前だがPythonのコードにも組み込めない。

そうして結局、matplotlibの3D volxe plotを採用した。しかしこの関数はまだリリースされていないため、githubから直接インストールする必要があった。動作も遅いままだが妥協することにした。

ネットワークはKerasやTensorflowなどによる実装がいくつかgithubに上がっていたためそれらも参考にしつつ実装した。加えて、有名なGANのベストプラクティスのページを参考にした。ポイントをかいつまむと以下のような感じで実装した。

  • ランダムベクトルzは論文では一様分布だったがガウス分布を使った。
  • GeneratorはDeconv3D+BN+ReLUの繰り返しで、最後だけsigmoid
  • DiscriminatorはConv3D+BN+Leaky-ReLUの繰り返しで、最後だけsigmoid
  • Chainerの公式のexampleを真似してロスはsoftplusを使って実装。ただ、実はsigmoid + Adversarial losssoftplusと同じなのでDiscriminatorの最後のsigmidは不要なのだが、加えた方がうまくいった(謎)。

結果

成功例

良さげな感じを出すためにきれいなものを集めた。学習の初期段階ではでたらめなものが出力されるが、徐々に椅子が形成され、50エポックから100エポックくらいでましなものが出来た。

学習の途中では椅子とは独立した無意味なかたまりのオブジェクトが所々に浮かんでいたりしたが、それが消えてくるとかなり見栄えが良くなっていった。

https://github.com/piyo56/3dgan-chainer/blob/master/result/generated_samples/png/7.png?raw=true https://github.com/piyo56/3dgan-chainer/blob/master/result/generated_samples/png/13.png?raw=true https://github.com/piyo56/3dgan-chainer/blob/master/result/generated_samples/png/21.png?raw=true https://github.com/piyo56/3dgan-chainer/blob/master/result/generated_samples/png/30.png?raw=true

失敗例

ボクセルが全て1になったり0になって消滅したりした。今回幾度も学習をさせてみて、初期の段階からほぼ1なボクセル、あるいはほぼ0なボクセルが生成されたり、規則的なパターン(模様)を持つボクセルが生成されたりすると多くの場合失敗となるという微妙な知見を得た。

また、ボクセルが消滅したらその後復活しないこともわかった。ただこれは実装のところで述べたようにロスが間違っているせいかもしれない。

https://i.gyazo.com/1c516e331073f2f35c20948f7e5358b0.png https://i.gyazo.com/c12285bb038635a17df18410202bc315.png https://i.gyazo.com/0b87e9115d56faa93332afa61d093ad8.png https://gyazo.com/1e67d6f8872df8b0b6e41d01021f69bf.png

わかったこと

  • GANはロスは全くあてにならない。生成結果が全て。
  • zガウス分布から取ってきたほうが良さそう。
  • 学習を調整する(Discriminatorのlossやaccを見て更新しないなど)のはうまくいかないと感じた。
  • 今回のコードではsigmoid + adversarial losssoftplusで実装しているので、Discriminatorの最後のsigmoidは不要なはずなのだが、誤って入れていたらうまくいき、外したらうまくいかなくなった。動きゃ勝ちみたいなところがあって釈然としない。
  • 論文では1000エポック学習したとあったが100エポック行かないくらいでかなり形になった。

また、今回はGANのベストプラクティスの内、以下のトリックは実践しても効果がなかった.

  • Discriminatorに学習させるミニバッチをrealのみまたはfakeのみにする。(リンク元項目4)
  • GeneratorにもDiscriminatorにもLeaky-ReLUをつかう。(リンク元項目5)
  • GeneratorにADAMを使ってDiscriminatorにはSGDを使う。(リンク元項目10)
  • GeneratorにDropoutを使う。(リンク元項目17)

所感

実装に関して、やはりコード自体はkerasの方が圧倒的に簡単にかけるようになっているなと感じた。モデルのインスタンスを作ってバッチをmodel.train_on_batchに渡す処理を繰り返せば良いというイメージでとてもシンプルで良い。dcganの実装についても、①Descriminatorのみのモデル、②Descriminator(not trainable)+Generatorのモデルをそれぞれ定義することで学習を実現したが、それぞれ独立に学習、更新処理をやるよというのが表現しやすくてわかりやすかった。

一方でchainerはまずGPUがある環境とない環境でコードを分けなくてはならず、そこがまず面倒に感じた。自分はリモートマシンが研究室のマシンやGCPなどさまざまなので、手元のmacbookで実装してrsyncでデプロイという形で実装していたので処理をいちいち分岐させるのは面倒に感じた。

加えてtrainer, updater辺りの構造を理解するのに学習コストが要るなと感じた。extensionもロギングなどよく使う処理をパッケージ化できる所はメリットだと思うが、初めて書く人間にとってはさして複雑でない部分が隠蔽され逆にとっかかりづらいと感じる。ただ慣れてしまえばdcganの実装もkerasと同じくらいわかりやすくはあったのでこれからも忘れないように使っていきたいと思った。

今回ディープラーニングをやってみて、モデルの定義は簡単な反面、ハイパーパラメータのチューニングがべらぼうに難しいという印象だった。あと時間がかかる。今回の3DGANではGoogle Cloud Platform(GCP)を使っていて、2.2 GHz Intel Xeon E5 v4 (Broadwell) x 4、メモリ 16 GB、NVIDIA Tesla K80 x 4という環境だったのですが1エポック15分くらいかかった。1回50エポックで試すとしても一晩寝ても終わってない感じ。

そして、今回は自分なりのディープラーニングのやる方を考える良い機会にもなった。複数リモートがある場合のコードのホスティングは最初はgitを使っていたが、どうしても小さい変更が頻繁に入るのでrsyncを使ってデプロイするようにした。データセットは面倒だが毎回リモートでダウンロードした。

GCPは最初はどのタイプのマシンを使えば良いか慣れなかったのでGPUを使えるようにする環境構築をシェルスクリプトで自動化した。またGANは生成結果が重要なので、Chainerのextensionとしてエポック毎に生成結果を.binvoxで保存生成結果を.pngで保存生成結果(.png)をslackで通知するようにして、手元のスマホで確認するようにしていた。特に生成結果を画像で保存する場合はmatplotlibの描画の処理にかなり時間がかかるため、そこで学習が止まらないようにsubprocessを使って別プロセスで非同期でやるようにしたところが楽しかった。

f:id:bonhito:20171025201323p:plain:w350

おしまい。

3Dオブジェクト(ボクセルデータ)を描画するツールを作った

最近、GANで3Dオブジェクトを生成する論文を読んでいました。下のスライドは雑なまとめなのですが、前者が所謂3D-GANと呼ばれている論文で初めて3Dオブジェクトの生成にGANを適用した論文です。後者はその3D-GANを応用した研究のようです。


どんなものか知るには著者らが公開している動画が非常にわかりやすいです。静止画と同じようにGANを3Dモデルにも適用できそうだということがわかります。


ということでgithubにあがっている実装などを参考に実際にやろうとしているところなのですが、これらの手法では主に3Dオブジェクトを「ボクセル」として扱っています。

このボクセルというのは「体積 (volume)」と「ピクセル (pixel)」を組み合わせたかばん語らしいのですが、要は画像と同じ要領で3Dモデルを3次元配列に格納して表したものです。イメージとしてはマインクラフトみたいな感じです。

https://www.gamersnexus.net/images/media/2012/features/voxels-vs-vertexes.png

CGでは頂点情報や法線、テクスチャなどを保存する.obj, .3dsなどが有名(らしい)ですが、それらに比べると非常に簡単で取り扱いやすくなっています。

その一方でボクセルデータを保存する形式には.binvoxがあるのですが、メジャーではないためかツールが少なめです(まぁただの3次元配列だしね…)。ざっくり探したところ以下のものは便利そうだなと思いました。

ただ、単に.binvoxファイルをアップロードしてすぐに中身を見れるツールはなさそうだったので今回はそれを作ってみました(というエントリです)。ここから試せます。

github.com

ボクセルは形式そのものがシンプルなのでmatplotlibを使って3dplotするのでも良いのですが、結構重いんですよね。three.jsを使えばWeb上でマウスでグリグリできるインターフェースを簡単に作れるので楽しいですし、いつかフロントエンドで使えるかも…。

先程紹介したOnline Voxelizerに比べると動作がかなり遅いしメモリも結構消費してしまうのでそこが今後の課題です。うーん…おしまい。

LaTeXiTで数式が表示されない問題

LaTeXiTはTeX数式を画像に変換できるツールですが、ついさっき使ったらプレビューに数式が表示されず、というか数式画像の生成自体に失敗しているみたいで全く使えないという事態に遭遇しました。

思い当たったのは最近brew updateした時にghostscriptがアップデートされたことだったので確認。

brew info ghostscript
ghostscript: stable 9.21 (bottled), HEAD
Interpreter for PostScript and PDF
https://www.ghostscript.com/
/usr/local/Cellar/ghostscript/9.21_1 (8,484 files, 98.2MB)
  Poured from bottle on 2017-05-23 at 13:32:45
/usr/local/Cellar/ghostscript/9.21_2 (717 files, 64MB) *
  Poured from bottle on 2017-06-22 at 00:29:33
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/ghostscript.rb
==> Dependencies
Build: pkg-config ✔
Required: little-cms2 ✔
==> Requirements
Optional: x11 ✔
==> Options
--with-x11
    Build with x11 support
--HEAD
    Install HEAD version

確かに06/22に更新している。なんとなく怪しいのでバージョンを下げたらなおった。

brew switch ghostscript 9.21_1 

詳しくないので理由はよくわからないが、mac texで検索すると以下の記事が出てくるのでおそらくこれをみてTeXをインストールしたはず。改めて読んでみるとghostscriptのインストールとTeXのインストールは別れているのでバージョンによって対応していないことはあり得る。

qiita.com

あるいはTeXをアップデートすれば良いのかもしれません。

Ruby(Rails)でGoogle Analytics APIを使う

今回RubyGoogle Analytics APIを利用する機会があったのですが、思ったより情報が少ない上、必要な鍵ファイルやトークンがよくわからず時間を取られたので以下に手順をまとめておきます。

Developers Consoleでプロジェクト作成・APIを有効化

まずはおなじみのやつですが、Googleのセットアップツールを利用するとパパッと完了できます。画面の表示に従ってプロジェクト作成認証情報に進むOAuthクライアント作成完了と進めます。

注意してほしいのが認証情報のところで、自分は以下のようにしました。最後の認証情報のダウンロードは不要です。

f:id:bonhito:20170503222647p:plain

サービスアカウントの作成

次にサービスアカウントページを開いて、プロジェクトを選択サービス アカウントを作成(サービス アカウントの名前を入力)新しい秘密鍵の提供作成を順にクリックします。公開キーと秘密キーのペアが生成されるので、client_secrets.p12というファイル名で保存します。

また、サービスアカウントのIDを次で使うのでコピーしておいて下さい。

Googleアナリティクスのユーザーにサービスアカウントを追加する

準備作業の最後として、アナリティクスデータの表示と分析の権限をサービスアカウントに付与します。自分のGoogleアナリティクスのページを開き、左タブの管理>ビューの列のユーザー管理に進み、権限を付与するユーザーとして先ほどのサービスアカウントのIDを入力して追加します。

また管理>ビュー設定にあるビューIDをこの後使うのでコピーしておいて下さい。

必要なパッケージをインストール

RailsであればGemfileに追記します。

gem 'google-api-client', '~> 0.11'
bundle install

単にターミナルから使うのであれば以下。

gem install google-api-client

キーと設定ファイルを配置

そうしたら、ga_config.ymlという名前でyamlファイルを作成し、中身を記述します。以下を自分の情報と置き換えて下さい。

  • サービスアカウントのID:

    Google Developers Consoleの左上のハンバーガーメニュー>IAMと管理>サービスアカウントで確認できます。

  • アナリティクスのビューID:

    自分のアナリティクスのアカウントより、左タブ>管理(歯車アイコン)>ビュー設定より確認できます。

  • サービスアカウントのキー:

    サービスアカウント作成の時に得たclient_secrets.p12を適当に配置してパスを記述します。

  • サービスアカウントのキーのパスワード:

    特別設定していなければ'notasecret'のままでOKです。

データを取得

以下がメインのスクリプトです。そのまま使う場合はとりあえずga_config.ymlclient_secrets.p12と同ディレクトリに置くと動くと思います。

start_dateend_datemetricsdimensionsortなどは必要に応じて変更して下さい。データの取得方法は共通だと思うので下記など他の情報を参照して下さい。

github.com

Railsアプリで使う場合

今回紹介したのはただのスクリプトですが、例えばランキングを作りたいといった場合にはアクセス数を利用してモデルに順位を付与したいと思います。そこで使えるのが、Railsの環境を読み込んだ上で任意のRubyコードが実行できるrails runnerです。またそういった独自のスクリプトみたいなものはlib/tasksに配置してrakeタスクとして使うほうが正しそう(?)です。またgithubで公開する場合などはキーファイルなどをリポジトリに含めないように注意して下さい。

おわりに

GoogleAPIは以前Pythonで利用したこともあるのですが、その時はもっとサンプルコードが転がっていて楽だったのですが…。どうやらRubyAPIを叩く公式のライブラリがアルファのままということもあり、情報が少ないのかもしれないです。こういうのはただ面倒くさいだけなので再利用できる情報を提供できていれば幸いです。ここ動かないみたいなのあったらコメントお願いします。

github.com

参考

HoloLensを軽く触ってみた印象

https://compass-ssl.surface.com/assets/f5/2a/f52a1f76-0640-4a37-a650-51b0902f8427.jpg?n=Buy_Panel_1920.jpg

大学の授業でオムニバス形式の授業があり、そこでたまたまHoloLensを触る機会があったので少し思ったことを書く。

ただ実際には授業中の講師の方の5分程度のデモを見て、授業後に3分ほど自分で体験しただけなので、ちゃんとコンテンツに触れられたわけではない。

まず最初の印象として、見た目がかなりスタイリッシュなデバイスで驚いた。単体で見ると結構かっこいい。またHoloLens自体にはWindowsが乗っており、CPUなどもデバイス本体に属しているのでケーブルでつなぐことなく単体で動作するらしい。ますます軽快なイメージを持った。ただその見た目とは裏腹に地味に重かったので長時間の使用は疲れるかなと思った。

装着すると、半透明のディスプレイがありガラス越しに周りが見えるようになっている。VRではなくMR(Mixed Reality)が体験できるデバイスなんだな、とその時理解した(恥ずかしい)。ディスプレイには、ARで空間上にメニューやオブジェクトが表示されており、中央にはカーソルが存在している。カーソルは顔が向いている方向(視線方向)に対応しているらしく、このカーソルを対象に合わせつつ、およそ自分の視界に入るくらいの範囲で「手でものをつまむ」ような仕草をするとクリックが実行できる。

実際にWebブラウザが表示されていたのでクリックしてページ遷移をしてみた。で、体験した内容はたったそれだけで、空間には他にもオブジェクトがあったのだけれど触る時間がなかった。今度触る機会があったらゲームとかやってみたい。

それで授業を受けてとても驚いたのが、とにかく周りが「HoloLensで何かが変わる」という雰囲気だったこと。たしかにHoloLensが将来的に眼鏡くらいのサイズになれば、電脳コイルみたいな世界ができて凄そうという想像はできるけれど、今日触った感じだと衝撃みたいなものは特になかった。唯一感じたのはその操作インターフェースのやりにくさで、頭部を動かしてカーソルを動かすというのは単に自分が見たい方向を見る以上に細かい動作が必要なので、ストレスフルに感じた。クリック動作もあまり感度が良くなくて違和感があった。

また家に向かいながら、今の主流なゲーム機や急速に普及したスマホを見ても、現状のHoloLensのような操作インターフェースではあまり日常的な普及はできないのでは、と思った。というのも、ゲーム機のコントローラーにしても、スマホのタッチディスプレイにしても、操作には物理的な接触とフィードバックがある。これは多分快適な操作に重要なのではと思う。HoloLensのインターフェースでは、そこに「人がものをつまむ」というメタファーを感じることはできても、やはり宙を掴む感じがするというか、違和感があると思った。

ただ、普及して慣れれば問題ないみたいな話かもしれないので、実際のところはよくわからない。もうちょっと色々考えなら今後の動向をチェックしたいなと思った。あと周りの人にも色々何を思ったか聞いてみようと思った。

ということで今回はHoloLensを触れてナウい感じの授業だったのでよかった。

「ヘルシープログラマ」を読んだ感想

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

感想

本書はプログラミングを職業とする人が、一日中座り続けるという習慣から慢性的に運動不足に陥ることの危険性や、よく引き起こす疾患の事例とその対策について説明している。一方、タイトルから匂い立つ"プログラマは如何にして健康になれるか“というような方法論だけにとどまらず、単にプログラマとしてより良いパフォーマンスを発揮するためにどのように身体と付き合うべきかということも書いてある。

私は大学の図書館でたまたま本書を見つけ、また最近ではタイピングによって右手首に負担をかけていることを認識していたので手に取ったが、本書の前半で述べられている

  • 「習慣」そのものについて
  • 脳と身体の関係について
  • プログラマがよく引き起こす疾患について

などのトピックは、今現在なんらかの疾患に陥っている人や、いかにも不健康な見た目をした職業的プログラマだけでなく、デスクワークを日常的にする人なら誰が読んでもためになると感じたのでおすすめしたいと思った。

特に私の印象に残っているのは、ウォーキングが脳にもたらす効果について説明した2章である。1章で既に脳と身体のつながりについて触れられ、物理的な健康が頭脳に対して直接的にメリットをもたらすことが強調されている。そして2章では、フェルマーの最終定理に8年間注力し、実際にその証明を成し遂げたAndrew Wilesを例に、作業の前後にウォーキング(エクササイズ)を行うことで集中力、記憶力、創造力を高めることができると述べられている。

これは、プログラマがコードを夜遅くまでハックしたり、最新の技術書を読んだりすることと同様に、ウォーキングが我々の能力を強化するための最高の方法の一つであることを示している。

それ以外にも、習慣のメカニズムやスタンディングデスクの真実を知ることも出来る。これらは多くの人々が関心のある一般的なトピックだと思う。最後に、本書で紹介されていた健康のユニットテストに対する自分の状況をメモして、今後も意識したいと思う。

健康のユニットテスト

  • 踊り場まで階段を上がると息が切れるか
  • 1時間以上立ち上がることなく座り続けることが、日常的にあるか
  • 昨年、仕事に差し支えるほどの腰痛、首痛、肩痛、手首痛が生じたことがあるか
  • 先週、コンピュータの画面を見た時に、ドライアイ、目の充血や炎症、あるいは目の焦点を合わせづらくなったことがあったか
  • 先月、苦しくなるほど食べすぎたことが複数階あったか
  • 今日、直射日光に当たった時間は10分以下だったか
  • 過去5年間に、虫歯の数は増えたか
  • 見をかがめて靴紐を結ぶのは苦しいか
  • 過去5年間でズボンのサイズが明らかに大きくなったか

目次

1章 変化を起こそう
2章 健康のブートストラップ
3章 椅子よさらば?
4章 アジャイルなダイエット
5章 頭痛と眼精疲労の対策
6章 腰痛への対策
7章 手首痛への対策
8章 実践的なエクササイズ
9章 個室の外で考えよう
10章 健康のリファクタリング
11章 チームを作ろう
12章 進め、健康なプログラマ

追記

メモ。

習慣とは

MITのマウス(ねずみ)を用いた実験により習慣にはいかのような3要素があることが受け入れられ始めている。

  • キュー(きっかけ)
  • ルーチン(決まった作業)
  • 報酬

すなわち習慣とは以上のような要素をみたすものであるとも言える。よって何か新しい習慣を“始める”ときには以上の要素を考慮して活動を規定する必要がある。一方習慣を“変える“コツは、上記の三要素の内(習慣を変えるために)ルーチンを変更した時、キューと報酬はそのままに保つことである。よって変えようとする習慣のキューと報酬を特定することが大切。

座っていることと立っていること

座って作業することが健康に良くないことと同じように、誤解を恐れずに言えば、立って作業することも健康に良くないと本書では述べられている。これはAlan Hedge博士の研究結果を基にした主張であるが、立ちっぱなしによって循環系に負荷が加わるため、アテローム製軽動脈硬化症、静脈瘤、血餅を発症するリスクが高まると言われている。

しかし、スタンディングデスクを用いて作業を行うことにより、1時間あたりの消費カロリーを50キロカロリーを増やすことができるというメリットがある。これは座っていることに比べるとあなたの体重を保つことに貢献する。

眼精疲労を軽減する方法

パソコンを見続ける上で眼精疲労は避けられない問題。特に眼鏡やコンタクトを着用している人は少なくとも1年に一回定期検診に行くことは必須である。その上で普段から心がけると良いのは以下である。

  • ディスプレイとの距離を50cmから1mに調整すること
  • 室内の明るさとディスプレイの明るさの差を小さくすること
  • 可能であればブルーライトをカットすること
  • 20分毎に遠く(6メートル先)のものを見ること
  • 同じく20分毎にゆっくりまばたきをして目の乾燥を防ぐこと

手首痛を軽減する方法

まず注意したいのは「一日7時間以上タイピングをする人でも、一般的な場合に比べて毛根間症候群(手首痛の疾患)を発症する傾向は特に強くない」ということである。よっておそらく手首痛になるような悪習慣(姿勢、タイピングなど)を持っていること自体が原因であると考えることが出来る。

手首痛を改善するためのエクササイズにはジャズハンズシャドウパペットエジプト人ショルダーシュラッグといったものが本書では紹介されている(内容は割愛)。

個人的な対策として、自分は右手首に痛みを感じているので、右手のタイピング動作を見直す。特に、右手範囲の上段(( ) 0 - ^ ¥)と下段(, . / _)はプログラミングでよく使うにも関わらずタイプが苦手な場所なので、正しい方法でタイプをするようにする。

昨年買った睡眠に関わるアイテムの感想メモ

こんばんは。だらだら書いていたら新年が明けてしまいました。あけましておめでとうございます。

本記事では今年買った少しテックな2つのアイテ厶について感想をメモします。

Mi Band 2(Xiaomi)

公式サイト

一つ目はXiaomiが出しているスマートウォッチ、Mi Band 2です。Mi Band 2はMi Bandの後継機で、LEDディスプレイを搭載しています。主な機能としてはデジタル時計、睡眠計測、心拍数計測、歩数計測、そしてスマホ通知との連動です。

購入の動機は、この値段で睡眠計測機能が使えるという点です。またMi Band 2になってディスプレイが搭載されたことによりセンサーだけでなく腕時計として使えるようになったのも大きかったです。

購入したのは10月なのでおよそ2ヶ月間利用したのですが、これという欠点はほとんどなく、サイズも小さいし、軽いし、充電は平気で5日間位持つので、値段を考えると素晴らしい商品だと思います。

睡眠計測

まず、一番気になっていた睡眠計測の機能ですが、就寝・起床ともにかなり正確に時間を記録してくれるので驚きました。計測した結果はXiaomiの公式アプリで確認でき、Deep Sleep時間とLight Sleep時間も計測してくれます。Deep Sleepの時間はどの程度正確なのかはわかりませんが、一応自分の睡眠の質の目安となります。私は毎日7〜8時間位寝ますが、Deep Sleepは2〜3時間で推移しています。この部分はどのくらい信頼できる数値なのか、個人差はあるのか、などがわかると良いなと思います。SNSとかないのかな笑。

一方、この機能の欠点はこれを手に装着して寝なければいけないことです。私の場合、最初から付属しているシリコンのバンドを使っているため、毛布に引っかかったり布団に押し付けながら寝ると手に跡ができたりして、気になります。少なくとも気持ちよくはないので邪魔だなと思うシーンが多々あるのが難点ですね。

というわけで、睡眠計測はまぁまぁ使えています。最近は機械学習とかloTとか叫ばれていて、ライフログを溜めること自体が面白いのですが、ちょっと面倒くさい面もあります。計測したデータは今のところ、月ごとの平均睡眠時間を見て「寝すぎたなぁ」とか「寝るor起きるの遅いなぁ」と思う程度ですが、改めて見てみるとやはり自分の生活習慣が如実に表れていると感じます。なので「来月から早起きしよう」とか「夜寝る前はブルーライトシャットアウトしよう」といった生活習慣を変える試みと併せて使うと数字でフィードバックが返ってくるので嬉しいと思います。アプリからデータを見てもいいですが、csvでエクスポートできるのでもっとちゃんと分析も出来ると思います。

時計

Mi Band 2は普通に時計として使えます(使っています)。ただLEDディスプレイなのでずっと点いているわけではなく時間で消灯します。そのため腕のひねりを検知して時計を確認したタイミングで点灯するようになっています。ただ微妙にタイミングが遅く少し気になります。また、文字も小さいので、時計としては及第点という感じです。

またアラーム機能もあります。本体が振動して知らせてくれます。ただあんまり強い振動ではないので起きられない上、バッテリーの寿命を減らす原因になるみたいなので普段はあまり使いません。意外に便利なシーンが電車移動で30分くらい寝るかというときです。音じゃなく振動なので使いやすいです。

歩数計

歩数計としても使えます。一日の目標を設定して達成すると知らせてくれます。座りがちなので是非みなさんも意識的に歩きましょう笑

防水

またMi Band 2はiPhone7と同じIP67の防水性能があります。お風呂ぐらいなら付けたまま入れます。最初はわざわざ付けて入るか?と思っていましたが、寒くなってきてからシャワーに入る時間が長くなってきたので時間を意識できるように付けて入るようになりました。こういう少し便利なところが気に入っています。

スマートフォン連携

私はほとんど使っていませんがスマートフォンの通知を振動とともにMi Band 2のディスプレイに表示することもできます。ただ任意の文字情報を表示することはできないため、ただ通知がきたとわかるだけです。

特によく使っているのはAndroidのスマートロックです。スマートロックは特定の場所、時間、またはデバイスとの接続の有無によってパスコードなしでホーム画面にアクセスできる機能です。Mi Band 2を使ってスマートロックを設定すると、Mi Bandが接続されている間はパスコードを打たなくて良くなり、かつスマホを紛失したりした場合などにはロックを有効にできます。最近ではスマホは財布と同じくらい重要なものになってきていて、クレジットカード番号などセンシティブな情報を保持しているデバイスです。iPhoneのように指紋認証があればいいですが普段のパスコード入力が面倒くさい人には重宝すると思います。


mornin'(Robit)

公式サイト

もう一つは家のカーテンを自動開閉してくれる魔法のようなアイテム、目覚ましカーテン mornin'です。家のカーテンに取り付けてスマートフォンで設定するだけで、特定の時刻にカーテンを開閉してくれるアイテムです。

このアイテムも睡眠に関わるハックアイテムで、「朝すっきり目覚めるコツは? 超多忙、不規則な生活…それでも結果を出す人の快眠戦略」という記事をきっかけに知りました。朝すっきりと起きる方法としてしばしば「朝日を浴びること」が挙げられていますが、それを自動カーテンという如何にも近未来的な方法で促してくれるということで、そのアイデアに感銘して購入しました笑 なんといっても既存の普通のカーテンに取り付けられるというのがすごいですよね。

morninの仕組みはカーテンレールについているランナーとランナーの間(下図参考)にmorninを設置することで、特定の時刻にmorninのローラが作動、左右に動きカーテンを引っ張って開閉します。左右に動く幅と作動時刻はスマホで設定できます。

f:id:bonhito:20170101002512j:plain:w300

今は手元にmorninがないのであれですが、スマホアプリのUIはこんな感じ(公式サイトより)。

mornin スマホアプリUI

買ってから現在までの1ヶ月くらい使いました。感想としては、自分は部屋が東向きなので晴れていると朝日がガンガン入ってきてとても気持ち良いです。ただ朝日を浴びるっていうのは何度か実践したことがありますが、すぐ目が覚めるという感じではないですよね。朝起きる習慣をつけるのに補助的に使えそうな感じです。

morninを使ってよかったことは意外なところにもあり、それは夜遅く帰ってきてもカーテンが自動で閉まってくれていることです。部屋が通りに面しているので気持ち安心です。また長期休暇のときに部屋を開けていても自動で動くので防犯的にも良いです。

欠点もいくつかありますが、特に致命的なのがmorninを設置したら基本的に手でカーテンを開け閉めできなくなくなること。自分は購入してから知ったのですがこの点はもっと強調すべきと思いました。またスピードによってはそこそこの動作音がします。買ってすぐは動作音で目が覚めてました笑。 スマホで動作スピードは変更できるので調整は可能です。慣れると大丈夫です。

最後にもう一つ、morninは開閉しているうちに微妙にどちらかに少しずつ寄っていってしまいます。環境の差はあれど皆さんもほとんど同じだと思うのですが、閉める方向に寄っていきます。原因は開ける時の抵抗が大きいく、同じ動作時間で動作しても距離が微妙に短くなるからでしょうね。できれば開けるときと閉めるときで動作時間を別に設定できればなぁなんて思っています。

さいごに

実はこの記事を書いてから両方とも睡眠に関わるアイテムだということに気付きました。ということなので2017年は早寝早起きしたいです…。 私はApple Watchのような高価なものは買えないですが、今回紹介したようなアイテムを使ってみて十分魅力的な商品は転がっているなぁと感じました。来年も良い商品があれば買いたいです。

参考