しんさんのブログ

科学や技術のこと読書のことなど

ディープラーニングについてのもやもやしたもの

最近あちこちで機械学習とかディープラーニングという言葉をよく聞きます。
あたかも夢の手法のようにディープラーニングを使って認識率が上がりましたとか使われているのをあちこちで聞いて、そんなにすごい技術なのかという疑問とともに何がどうすごいのかという疑問がわいてきました。
ディープラーニングという言葉をよく使っている人に聞いても、意外と技術の本質についての答えは返ってこないことが多いです。
いろんなライブラリやツールが出回っていて、学習するデータさえ用意すればブラックボックスのように使うことができて、それなりに何か結果ががでるのでその段階でディープラーニングや機械学習というものが語られてしまっていることが原因のようです。
このように、魔法のキーワードのように使っているだけの人が多い中で以下のブログで紹介されている書籍では、私の感じているもやもやしたものを”はじめに”でズバリと語ってくださっています。enakai00.hatenablog.com
ブログを読んでいてふと気づいたのですが、この著者の方、遠い昔の学生時代にお会いたりお見かけしたことがある方です。(一方的に私が知っているだけです)
そうか、彼(と言っては失礼かもしれませんが)の書いた本ならごまかしも、あやふやなぼやかしもないだろうしきちんと技術を第1原理から説明してくれているだろうという信頼感もあり、さっそく購入しました。
多忙にかまけてまだ読めていませんが、ぼちぼちと読み進めていきたいと思います。

著者がslide shareにこの書籍に関するプレゼン資料をあげていますので、リンクしておきます。

www.slideshare.net

WindowsのターミナルをConEmuに変更 [2017年6月11日に編集]

Windows上のターミナルを以前はMinGW+minttyを使用していましたが、タブが使えるConEmuの方が便利で使いやすいと知ったので、乗り換えました。

MinGWでの開発環境の設定については以下のサイトを参考にしました。
PENGUINITIS - MinGW 64 bit 版 のセットアップ

設定が細かくできるようですが、とりあえず上のサイトで紹介されている設定を流用させていただきました。
起動も速く、軽くて快適です。

2016年8月16日追加情報です。
"MSYS2で快適なターミナル生活"というmsys2の紹介ページがありましたので、こちらも参考にするといいです。
qiita.com

2017年6月12日 リンク先がなくなっていたので削除し、minGWでの開発環境設定のページへのリンクを追加しました。

Processing3.0の正式版とOpenCV for Processingの導入

ついにProcessing3.0の正式版がリリースされましたので早速導入しました。
以前からのバージョンと同じで、インストーラーなどは必要なく解凍して実行ファイルを実行するだけです。
ただし、前から使っていた方は以前の環境設定ファイルを読み込んでくれます。

前にも書きましたがちょっとした実験やrapid prototypingにProcessingを使おうと思っていますので、私が今興味のある画像処理関係について簡単に触れるようにするためにOpenCVを追加で導入することにしました。
Processingの Tools -> Add toolでLibrariesやModes, Toolsなどが簡単にインストールできますが、Librariesの中にあるOpenCVはここからはインストールできなかったので(2015/10/3時点)手動でインストールしました。
やり方は以下のブログをみました。tkitao.hatenablog.com
ブログに書いてある通りに解凍して、ファイルをコピーするだけですので、簡単ですね。
導入したOpenCV for Processing のバージョンは0.5.2です。
さらにWEBカメラの映像をリアルタイム処理したいので、Videoライブラリーもインストールしました。
こちらは、Tools -> Add tool-> Librariesでvideoで検索して出てきた"GStreamer-based video library for Processing."をインストールしました。

さっそくOpneCVのサンプルを動かしてみます。
まずは、BackgroundSubtractionサンプルです。
このサンプルは、BackgroundSubtraction.pdeをダブルクリックしてProcessingを起動後、実行するとdataフォルダーの中にある動画street.movにフレーム間差分処理をした結果が表示されます。
OpenCVを使用しているのは、ソースコードは非常に短いですが処理の大部分がブラックボックスになってしまっています。

さらに、WEBカメラを使用しているサンプルを動かしてみます。
LiveCamTestというサンプルがそれっぽいので、起動するとWEBカメラからの映像が表示され、顔のエリアに緑色の枠が表示されます。

faces = opencv.detect();

の部分がおそらく顔認識なのでしょう。

Android studioで実機実行できないとき

USBドライバも正しくインストールして、さらにデバイスマネージャーからもスマホタブレットがきちんと見えているのに、Android StudioからRunボタンを押すと、エミュレーターが立ち上がっってしまい、実機実行できないことがあります。
これは、実行の設定がEmulatorになってしまっているためです。

設定メニューの Run -> Edit Configurationで、
General -> Target Device の設定を USB Device もしくは Show chooser dialog
にする必要があります。

何かの拍子でEmulatorの設定にしてしまうと、結構はまりますのでご注意ください。
私も何度もはまって、必要のないUSBドライバのアンインストールとインストールを繰り返してしまいました。

Android Studio でnative でOpenGLを使って見る

このサイトから、サンプルをダウンロードしてみた。
Samples: Overview | Android Developers

include fileへのパスがつながっていないみたいでビルドできない。
#include
#include
などのところでエラーがでる。
build.gradle を編集すればよさそうな気もするがよくわからない。

Android Studio 環境設定

前回の記事で、Eclipse + ADT からAndroid Studioに移行をもくろみうまくいきませんでした。
その後しばらく放置していましたが、最近また触り始めました。

いくつか設定が必要なことに気づきました。
File->Other Settings->Default Project Structure->SDKs
JAVA SDKのパスを正しく設定しないといけないです。
ついでにこのメニューでNDKもインストールしました。Eclipse + ADTの時にはNDKも手動で設定が必要だったのですが、Android Studioではそういう面倒なことは必要ないようです。

また、各プロジェクトで
'File' -> 'Project Structure'->'Modules'で Module SDK のNEWを押して、例えばAndroid 4.4などを指定しなければいかなかったです。

上記設定で、以下のサイト置いてあったGLESのサンプルが実機で動きました。
Displaying Graphics with OpenGL ES | Android Developers

Vulkan Overviewを読んでみる

Khronosグループが発表している、2015年8月時点で最新のVulkan Overviewを読んでみました。
https://www.khronos.org/assets/uploads/developers/library/overview/vulkan-overview.pdf

※ Khronosグループとは、OpenGL/ES, WebGLといったGraphics APIのオープンスタンダードを手掛ける非営利の共同コンソーシアムで、日本の企業も参加しています。

Vulkanの特徴
いろんなデバイスにGPUが乗るようになってきた。
GPUは3Dグラフィックスだけのためじゃなくなってきた。
じゃあ、そのGPUを効率的に使えるようにしないといけない。
Vulkanはlow-overheadで多くのベンダーのGPUをサポートする。
mobile, desktop, console, embedded platformすべてで同一のAPIを提供
デバッグ、評価のレイヤーと最終製品レイヤーを分けられる。

OpenGL/ES とVulkanとの大きな違い

OpenGL/ES
複雑なドライバGPUドライバ層、overheadが大きい、負荷の予想ができない
ドライバがGPUコンテクスト保持・更新、メモリーマネジメント、エラーマネジメントすべてを行う。
エラーマネジメントが常に動いている(安全ともいえる)
APIはGLとESで、デスクトップとモバイル用に分かれている

Vulkan

メモリマネジメント、スレッドマネジメント、コマンドバッファの生成・更新のすべてをユーザーアプリが行う。
ドライバはシンプルになり、low-overhead。
エラーマネジメントは必要な時だけ動かせる。
モバイル、デスクトップ、組み込み機器のすべてで同じAPIを使用

上記特徴を知ったうえで、開発者はGL/ESを使うか、Vulkanを使うかを選択できる。

ミドルウェア、エンジン
ユーザーアプリとVulkanの中間にミドルウェアゲームエンジンなどが入ることがあり、これらのエンジンがハードウェアをダイレクトに操作することで処理速度が向上する。

Vulkanのmulti-threading
コマンドバッファ作成スレッドと、コマンドを投げるスレッドを別々に並列に実行できる。GPUがCPUを待つことなく次々とコマンドを受け取ることができるようになる。

SPIR-Vという中間言語が提供される。


OpenGL ES 3.1/ OpenGL 4.X以上をサポートするGPUに対するインプリを今年中に行う。