読者です 読者をやめる 読者になる 読者になる

ディープラーニングフレームワークCaffeとpycaffeをUbuntu 14.04にインストール

先日はSFCの猫たちの写真を使ってディープラーニングのデモを試してみました。

kaorumori.hatenadiary.com

今回はSFCで提供されているVPSにディープラーニングフレームワークのCaffeとpycaffeをインストールしました。一般的なVPSと同様に、SFCVPSではGPUが使えないので、CPUモードでCaffeを使うことになります。

以下のコマンドで依存関係のある一般的なソフトウェアをインストールします。

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
$ sudo apt-get install --no-install-recommends libboost-all-dev

以下のコマンドでBLASをインストールします。BLASBasic Linear Algebra Subprogramsの略で、行列計算のためのライブラリです。

$ sudo apt-get install libatlas-base-dev

Ubuntuのバージョンに依存したインストールを実行します。Ubuntu 14.04の場合は以下のコマンドを実行します。

$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

GitHubからCaffeのコードを取得します。

$ git clone https://github.com/BVLC/caffe.git
$ cd caffe
$ cp Makefile.config.example Makefile.config

Makefile.configのCPU_ONLYのコメントアウトを外します。

# CPU-only switch (uncomment to build without GPU support).
CPU_ONLY := 1

以下のコマンドでコンパイルして、Caffeのインストールは完了です。

$ make all
$ make test
$ make runtest

次にpycaffeをインストールします。

$ sudo apt-get install python-pip

caffe/pythonディレクトリに移動して、pipで必要なライブラリをインストールします。

$ cd python
$ for req in $(cat requirements.txt); do sudo pip install $req; done

以下のコマンドでpycaffeのために必要なライブラリをインストールします。

$ sudo apt-get install python-dev python-numpy python-skimage

caffe/pythonからcaffeディレクトリに移動して、makeコマンドでコンパイルします。

$ cd ..
$ make pycaffe

~/.bashrcに環境変数を設定します。

export PYTHONPATH=~/caffe/python/:$PYTHONPATH

Pythonでimport caffeが実行できればpycaffeのインストールは完了です。

参考:Ubuntu 14.04 上での Caffe の導入手順メモ

サントリー ウイスキー 知多 700ml

購入

ウイスキーはあまり知らないのですが、先日いただいた響17年がおいしかったこともあって少し調べていました。サントリーから知多という新しいブランドが発売されるそうなので、Amazonで予約しました。

サントリー ウイスキー 知多 700ml

サントリー ウイスキー 知多 700ml

知多はグレーンウイスキーという種類で、トウモロコシや小麦などが原料です。モルトウイスキーと比較して、穏やかな味わいになっているそうです。

私はビールやワインではあまり酔わないのですが、ウイスキーはすぐに酔いがまわる気がするので、飲み過ぎには注意したいと思います。

ちなみに先日いただいた響17年はこちらです。

最近は国産ウイスキーが海外で高評価らしいです。日本の新しい輸出商品となるとよいですね。

SFCの猫たちをディープラーニングで認識

最近、ディープラーニングフレームワークのCaffeを使い始めています。Web上から簡単に実行できるデモがあったので、SFCの猫たちを認識してみました。

デルタの専務

f:id:kaorumori:20150827235901j:plain

Leonberg 2.08659
dog 1.28681
domestic animal 1.18099
canine 1.16120
carnivore 0.94040

犬として認識されているようです。

デルタのクロ

f:id:kaorumori:20150828000632j:plain

rodent 0.84040
porcupine 0.79242
placental 0.50810
carnivore 0.50617
domestic animal 0.45320

ネズミ目とかヤマアラシとか、そっちのほうで認識されています。後足あたりの感じの特徴が影響したのかもしれません。

デルタのシロ

f:id:kaorumori:20150828001050j:plain

dog 1.21088
domestic animal 1.12400
canine 1.07993
hunting dog 1.05249
carnivore 0.88185

こちらも犬として認識されています。

生協のモフ

f:id:kaorumori:20150828001337j:plain

Persian cat 1.23323
domestic cat 1.10878
domestic animal 1.05563
cat 1.03685
feline 0.89236

昨年まで生協前にいたモフ(現在は里親のもとで生活中)は、猫として認識されました。しかもペルシャ猫として。ふわふわした毛並みを認識できているようです。

ドコモハウスの猫たち

最近、Twitterのタイムラインにドコモハウスあたりにいると思われる猫の情報を見かけます。猫に会いに行きたいのですが、今はドコモハウスには誰も知り合いがいないので、行きづらいです。私が学生だった時は小檜山研が使っていたと思うのですが。


ドコモハウスの三毛猫

f:id:kaorumori:20150828002701j:plain

cat 0.82971
domestic cat 0.80997
feline 0.77288
hamster 0.51093
domestic animal 0.45883

デルタの専務と同じ三毛猫ですが、こちらは猫として認識されました。

ドコモハウスの白猫

f:id:kaorumori:20150828003249j:plain

tennis ball 0.63686
ball 0.48861
domestic animal 0.46416
game equipment 0.44694
dog 0.42782

こちらは猫が乗っているシューズの方がテニスボールとして認識されました。猫の部分は犬として認識されているようです。

Next...

今回はデモサイトを使ってみただけなので、学習データもデモサイトのものです。次は、自前のデータで学習させて分類させるところをやっていきたいと思います。

herokuコマンドでRestClient::SSLCertificateNotVerifiedになった場合の対処

herokuコマンドを実行すると、以下の様なエラーで実行できない状態が続いていました。

 !    Heroku client internal error.
 !    Search for help at: https://help.heroku.com
 !    Or report a bug at: https://github.com/heroku/heroku/issues/new


    Error:       SSL_connect returned=1 errno=0 state=error: certificate verify failed (RestClient::SSLCertificateNotVerified)
    Command:     heroku pg:reset DATABASE
    Version:     heroku-gem/3.41.3 (x86_64-darwin14) ruby/2.2.2
    Error ID:    90b54b5ce4a84952a10087ae6ac4cfc5


    More information in /Users/kaoru/.heroku/error.log

そのうち直るだろうとしばらく放置していたのですが、さすがに支障が出てきたので、解決することにしました。以下の記事と同様の状態になっていました。

qiita.com

私の環境では、/usr/local/etc/openssl/cert.pem のファイルはあるものの、サイズが0のファイルがあるだけという状態でした。

.pemファイルをダウンロードすることで解決しました。

$ cd /usr/local/etc/openssl
$ curl -o cert.pem http://curl.haxx.se/ca/cacert.pem

MacOSX 10.10.4のHomebewでpangoをインストールをする方法

MacOSX Homebrew

Homebrewでupgradeしようとしたところ、pangoのupgradeで失敗していました。

$ brew upgrade -all

These open issues may also help:
Pango install fail on 10.11 (https://github.com/Homebrew/homebrew/issues/41086)
pango-1.36.8 failed to build on 10.10.3 (14D136) (https://github.com/Homebrew/homebrew/issues/40853)

Githubのスレッドで議論されていました。

github.com

以下のコマンドを実行して解決しました。

$ brew uninstall --force pango
$ brew rm gobject-introspection
$ brew install pango

JRuby+iTextでフォントを追加する方法

JRuby iText

PDFで帳票を作成するプログラムを書いていて、デザイナーの方からニタラゴルイカというフォントを使いたいという話があり、それに対応しました。

以下のように、createFontメソッドに.ttfのPATHを渡すことで、ニタラゴルイカを利用することができました。

java_import 'com.itextpdf.text.pdf.BaseFont'

bf = BaseFont.createFont(Rails.root.join('lib').join('NitalagoRuikaMono-01.TTF').to_s, BaseFont::IDENTITY_H, BaseFont::EMBEDDED)
directcontent.setFontAndSize(bf, 6)
directcontent.setRGBColorFill(0, 0, 0)
directcontent.moveText(100, 150)
directcontent.showText('This is test.')
directcontent.endText

参考:竹形誠司 ブログ:Java+MySQL+Tomcat:iText(PDFライブラリ)で使えるフォント

「SwiftでResearchKit チュートリアル」をやってみた

ResearchKit Swift

まだまだ私のまわりでは利用者の少ないResearchKitですが、ちょっと使ってみたい実験フィールドがあり、昨日から勉強をしています。私にとっては公式ドキュメントよりも以下のチュートリアルが役に立ちました。

www.raywenderlich.com

consent, survey, active task

ResearchKitは医学研究のためのライブラリで、調査(アンケート)の質問のための様々な部品が用意されています。また、大きく分けると以下の3種類の質問があります。

  • consent
  • survey
  • active task

consentは調査対象者に同意を取る画面を生成する機能で、調査の趣旨や個人情報の取り扱いについて表示する機能や、クレジットカード決済のように本人に署名してもらう機能が用意されています。

surveyは調査の質問を生成する機能で、自由記述や選択式の質問だけでなく、尺度を聞くような質問もサポートされています。

active taskは調査対象者に特定の行動をしてもらい、その評価結果を取得する機能です。例えば、タブレット端末の画面をタップする反応性などを評価する機能が用意されています。

インストール

まずXcodeでSingle View Applicationを作成します。次に、GitHubからファイルを取得します。

$ git clone -b stable https://github.com/ResearchKit/ResearchKit.git

取得したファイルの中のResearchKit.xcodeprojをプロジェクトにドラッグします。

f:id:kaorumori:20150627010647p:plain

Embedded BinariesにResearchKit.frameworkを追加します。

f:id:kaorumori:20150627010811p:plain

f:id:kaorumori:20150627010838p:plain

同意画面の作成

同意画面を作成していきます。ConsentDocument.swiftというファイルを作成して、以下のように記述します。

import Foundation
import ResearchKit

public var ConsentDocument: ORKConsentDocument {
    
    let consentDocument = ORKConsentDocument()
    consentDocument.title = "Example Consent"
    
    //TODO: consent sections
    let consentSectionTypes: [ORKConsentSectionType] = [
        .Overview,
        .DataGathering,
        .Privacy,
        .DataUse,
        .TimeCommitment,
        .StudySurvey,
        .StudyTasks,
        .Withdrawing
    ]
    
    var consentSections: [ORKConsentSection] = consentSectionTypes.map { contentSectionType in
        let consentSection = ORKConsentSection(type: contentSectionType)
        consentSection.summary = "If you wish to complete this study..."
        consentSection.content = "In this study you will be asked five (wait, no, three!) questions. You will also have your voice recorded for ten seconds."
        return consentSection
    }
    
    consentDocument.sections = consentSections
    
    //TODO: signature
    consentDocument.addSignature(ORKConsentSignature(forPersonWithTitle: nil, dateFormatString: nil, identifier: "ConsentDocumentParticipantSignature"))
    
    return consentDocument
}

次にConsentTask.swiftというファイルを作成します。

import Foundation
import ResearchKit

public var ConsentTask: ORKOrderedTask {
    
    var steps = [ORKStep]()
    
    //TODO: Add VisualConsentStep
    var consentDocument = ConsentDocument
    let visualConsentStep = ORKVisualConsentStep(identifier: "VisualConsentStep", document: consentDocument)
    steps += [visualConsentStep]
    
    //TODO: Add ConsentReviewStep
    let signature = consentDocument.signatures!.first as! ORKConsentSignature
    
    let reviewConsentStep = ORKConsentReviewStep(identifier: "ConsentReviewStep", signature: signature, inDocument: consentDocument)
    
    reviewConsentStep.text = "Review Consent!"
    reviewConsentStep.reasonForConsent = "Consent to join study"
    
    steps += [reviewConsentStep]
    
    return ORKOrderedTask(identifier: "ConsentTask", steps: steps)
}

ViewController.swiftを以下のように編集します。

import UIKit
import ResearchKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @IBAction func consentTapped(sender : AnyObject) {
        let taskViewController = ORKTaskViewController(task: ConsentTask, taskRunUUID: nil)
        taskViewController.delegate = self
        presentViewController(taskViewController, animated: true, completion: nil)
    }
}

extension ViewController : ORKTaskViewControllerDelegate {
    func taskViewController(taskViewController: ORKTaskViewController, didFinishWithReason reason: ORKTaskViewControllerFinishReason, error: NSError?) {
        //Handle results with taskViewController.result
        taskViewController.dismissViewControllerAnimated(true, completion: nil)
    }
}

あとはボタンを作成して、そのボタンのタップにViewControllerのconsentTappedを関連付けます。これで同意画面が動作するようになりました。surveyとactive taskも基本的なやり方は同様でした。

来月の実験(イベント)に向けて、ResearchKitを利用したアプリの開発を進めていく予定です。