プログラミング素人のはてなブログ

技術屋の末端。プログラミングも電気回路も専門外です。 コードに間違いなど見つけられたら、気軽にコメントください。 VC#、python3、ラズパイ始めました。

ラズパイにTensorflowとKerasをインストールしようとしたらイバラの道だった

f:id:s51517765:20180628210926j:plain
ひととおり、Windows上ではディープラーニングを動かせるようになったので、これをラズパイで動かせるか、やってみたいと思いました。
しかし、結構なイバラの道でした。



ここで、初めてKerasの環境を構築するのであれば仕方ないですが、PCなど他の環境で作った(トレーニングした)モデルを動かすために、ラズパイを使おうと思うときは、できるだけ同じVersion(Python / tensorflow / keras)をインストールするようにしないと同じコードが動かないようです。

ラズパイの環境はラズパイ3B(+ではない)でOSはラズビアンストレッチです。

今から始めようという人は ”3B+" を選ぶことをお勧めします。

Raspberry Pi 3 Model B+ 正規代理店品

Raspberry Pi 3 Model B+ 正規代理店品

No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.4 (stretch)
Release:        9.4
Codename:       stretch

pythonは3.5.3です。

Python 3.5.3 (default, Jan 19 2017, 14:11:04)

また、結構容量を食うようなので、最低でも16GB以上のSDカードが必要なようです。(8GBでは難しい)

ラズパイ向けTensolfrowのダウンロード

ラズパイへのTensolfrowのインストールはpipで一発でできた人がいたらとても幸運な人だと思いますが、pythonのVersionなどに合わせて選択する必要があります。
ラズパイ用のTensolfrowはぐぐると割と簡単に出てくる↓にありますが、これはpython3.4向けなので、
github.com

こちらにリンクが出ていた、ラズパイ用のpython3.5向けのtensolflowをダウンロードします。
uepon.hatenadiary.com
github.com

ラズパイ3用

python3.5
https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.4.1/tensorflow-1.4.1-cp35-none-linux_armv7l.whl

ラズパイゼロ(Wも含む)用

python3.5
https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.8.0/tensorflow-1.8.0-cp35-none-linux_armv6l.whl

インストール

まず、下ごしらえをして

$sudo apt-get install python3-pip python3-dev

上のlinkをwgetでダウンロードし、

$wget https://github.com/samjabrahams ~~

pipでインストールします。

$sudo pip3 install tensorflow-1.4.1-cp35-none-linux_armv7l.whl

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

$pip3 install keras

これでKeras + Tensorflow環境はできたはずですが、Windowsで作ったディープラーニングのコードが動きません。
試行錯誤した結果、KerasのVersionが違ったためのようだとわかりました。

↓のようにVersionを指定してWindowsで使っていたものと同じものをインストールしたら動きました。

pip3 install Keras==2.0.5

ここまできたら、今度はOpen CVが動かない。

次のようなErrorがひとつづつ出てきたのを、下の$でひとつづつつぶしたが、まとめて書いておきます。

ImportError: libjasper.so.1: cannot open shared object file: No such file or directory
ImportError: libQtGui.so.4: cannot open shared object file: No such file or directory
ImportError: libQtTest.so.4: cannot open shared object file: No such file or directory
$sudo apt-get install libjasper-dev
$sudo apt-get install libqtgui4
$sudo apt install libqt4-test

ラズパイの公式にもこの辺のことが少し書かれていて、ハマりどころらしい。
Cant Import cv2 (Pi 3 Mobel B) Python 3.5 - Raspberry Pi Forums

完成!

pi@raspberrypi:~ $ python3 akb48.py
Using TensorFlow backend.
res =  [[1.07348785e-02 1.03990303e-03 8.26359332e-01 2.78084166e-02
  1.33473864e-02 2.04083481e-05 5.67168854e-02 1.89039292e-05
  5.17631590e-04 2.70321723e-02 2.74600531e-03 2.41437554e-03
  5.76681559e-05 5.62191708e-04 2.87890956e-02 1.26411626e-03
  1.78397109e-04 8.96107031e-06 3.83390201e-04]]
2
Prediction is  Kashiwagi Yuki

余談

最初、ラズパイゼロでやってみようとして上手くいかなかった。
ハード的な問題なのかと思っていたが、よく考えると、RaspbianのVersionも違うことを思い出した。
ゼロのほうはスターターキットにプリインストールされたものをそのまま使っていたのだが、janomeが動かないなど、他の問題もあった。
そこで、試しにラズパイ3のSDカードをそのままラズパイゼロに入れてみた。

動くではないですか!

ということで、ラズパイゼロのRaspbianも最新のstretchに入れ替えた。
こちらはjanomeが動くのでこれでOK。

ラズパイ3
Distributor ID Raspbian
Description Raspbian GNU/Linux 9.4 (stretch)
Release 9.4
Codename stretch
ラズパイゼロ
Distributor ID: Raspbian
Description Raspbian GNU/Linux 8.0 (jessie)
Release 8.0
Codename jessie

このような状態であったのをラズパイゼロを最新のストレッチをインストールした。

Janomeがインストールできなかった時の話
s51517765.hatenadiary.jp

余談その2

その辺の適当な(Windowsで使っていた)SDカードをSD Card Formatter v 5.0.0でクイックフォーマットをしてインストールしたら、100%でとまった。
(ただし、止まったと思っても100%まで行っているときは数分掛かることがあるらしい)
www.sdcard.org

上書きフォーマットのほうがいいらしい。
windowsなど他のOSで使っていたものは、本気でまっさらにしないと問題が出るようだ。
f:id:s51517765:20180625132822j:plain
f:id:s51517765:20180625133320j:plain

もともとRaspbianが入っていた(動いていた)SDはクイックフォーマットで問題なかった。

また、一度ラズパイで使ったものをWindowsで使うように戻す時も複数のパーティションが切られているので、そのままでも使えなくはないですがSD Card Formatterで「上書フォーマット」をすると綺麗になります。

関連

ラズパイセットアップの基本
s51517765.hatenadiary.jp