サトウのいろいろ覚え書き2

アクセスカウンタ

zoom RSS Raspberry Pi 3のその後の利用状況について

<<   作成日時 : 2017/09/04 18:53   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 0 / コメント 0

今年5月にRaspberry Piを購入し、それからしばらくは色々と電子回路の初歩的な勉強をしていた。
(詳細は「Raspberry Pi(2/3)「Raspberry Pi 3 Model B」購入」等のブログを参照。)

このRaspberry Piは当初は電子工作などのハードウェアの方面に興味があって購入したもの。
しかしその後使っているうちに、この上で動かすことが出来るソフトウェアにも面白いものが沢山有ることが判ってきた。
(ベースがLinuxらしいので、ソフトウェアの資産が山ほどあるのは当然かもしれない。)
そこで、この夏はソフトウェアに比重を置いてRaspberry Piの勉強(?)に力を入れてみた。

ここら辺で今までやったことをある程度まとめておかないと自分でも何をやったのか判ら無くなりそうだったので、覚え書きの意味を兼ねてその内容を以下にまとめておく。

【Pythonについて】
PythonはRaspberry Piで一般的に使われているプログラム言語で、最近のDeep Learningブームと関連して今人気のある言語でもあるらしい。
しかし、私の場合Java等のオブジェクト指向プログラムについてはそれなりに経験があるため、今更ガチの初心者向けの入門書を読むのも少々無駄が多いように思われた。

Raspberry Pi購入後に読んだ最初の本「最新 Raspberry Piで学ぶ電子工作」ではそれほど複雑なPythonプログラムは使っていなかったため、Pythonについてはあまり知らなくとも内容は理解できた。
しかし「ゼロから作る「Deep Learning」」などのPythonを本格的に使った技術書ではやはりPythonをある程度理解していない状態では読んでいてかなり苦労する部分があった。

何かしら入門書のようなものを読む必要を感じつつ何を読めば良いのか迷っていた時に、1ヶ月ほど前に以下のムックをたまたま書店で立ち読みして何となく衝動買い。

・はじめようPythonプログラミング (日経BPパソコンベストムック)



表紙のデザインは少々アレだが、真面目に読んでみるとPythonの特徴や独自の書き方などが簡潔にまとめられていてそこそこ勉強になった。
Pythonの実行環境の構築やよく使われるライブラリなどについての説明も役に立った。
また、少々上級向けのOpenCVを使った画像認識プログラムなども面白かった。

掲載された例題がネットからダウンロード出来ない事や、そのまま打ち込んでも動かなかったプログラムについて正誤情報が提供されていない事などの不満な部分はあるが、Pythonの使い方を覚える役に立ってくれた。

【ディープラーニングに関して読んだ本、雑誌など】
せっかくPythonが使える環境(=Raspberry Pi)があるので、Deep Learningに関して以下の本や雑誌を購入して読んでみた。

・ゼロから作る「Deep Learning」(斎藤 康毅 著、オライリージャパン)

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
オライリージャパン
斎藤 康毅

amazon.co.jpで買う
Amazonアソシエイト by ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 の詳しい情報を見る / ウェブリブログ商品ポータル


詳しい感想はブログ「「ゼロから作るDeep Learning」読了」を参照。
読み終えたのは1ヶ月ほど前だが、その時はPythonについて理解不足だったこともあり、よく理解できていない部分も多い。
Deep Learningについての基礎的な考え方や専門用語はある程度頭に入ったがもう一度真面目に読み返す必要がありそう。

・Interface(インターフェース) 2017年 08 月号

Interface(インターフェース) 2017年 08 月号
CQ出版
2017-06-24

amazon.co.jpで買う
Amazonアソシエイト by Interface(インターフェース) 2017年 08 月号 の詳しい情報を見る / ウェブリブログ商品ポータル


Raspberry Piを使ったDeep Learningの特集をやっていたため購入してみた。
単純なプログラムから次第に複雑なプログラムへ、Chainerを使ったPythonの例題付きで解説。
Deep Learningについての初歩的な用語や考え方についての説明は省かれている、理解するにはある程度知識が必要。
(私の場合は前述の「ゼロから作る「Deep Learning」」が役に立った。)
まだ読みかけで理解できていない部分も多いが実際にプログラムを動かして試せるというのはありがたい。

【ディープラーニング関係のプログラムについて】
ディープラーニングについて勉強していて、データ、ライブラリ、フレームワークなどに触れてきたので記録のため以下に記しておく。

・MNIST
手書きの数字の画像を沢山集めたデータ。
Deep Learningを使ってプログラムを教育する際に使われることが多い。

・Chainer
Deep Learningを実行するためのライブラリ。
顔認識、音声認識、自然言語処理など、様々な分野に使われている。

前述の雑誌「Interface(インターフェース)」のプログラムを参考にしてChainerとMNISTを使って学習データを作成し、手書きの数字がどの程度認識できるかサンプルプログラムを作ってみた。
一応Raspberry Piの上でそれなりに動作したので満足ではあるが、実はまだ使い方をよく理解できていない。

・OpenCV
画像を処理するためのライブラリ。
Webカメラから画像を取り込んだり、学習済みデータを使って画像から顔部分の認識をしたりできる。

「はじめようPythonプログラミング」の記事を参考に、Raspberry PiでWebカメラから取り込んだ動画から顔部分を認識してリアルタイムでモザイクをかけるプログラムなど作ってみた。
顔認識用のデータはOpenCVに付属していたものを使ったが、そういったデータの作り方(学習させ方)はまだ理解していない。
あとで調べる。

・Anaconda
Pythonを動かすための統合開発環境や定番のライブラリなどの詰め合わせセット。

前述の「はじめようPythonプログラミング」に説明があったが、Raspberry PiにはそもままではインストールできないらしいのでデスクトップPC(Windows10)にインストールしてみた。
Pythonの開発・実行環境構築の際、ライブラリのインストールに手こずることも多いので、こういう詰め合わせセットは結構便利。

・Django
Pythonで書かれたWebアプリケーション作成のためのフレームワーク。

「はじめようPythonプログラミング」の記事を参考に使い方を調べてみたが、記載されたサンプルをそのまま打ち込んでも動かないものがあった。
他の本などでもう少し使い方を調べる必要がありそうだが、使いこなせればそれなりに便利かも。

・WebOb
WSGI(Web Server Gateway Interface)という規格に従って、PythonプログラムからHTTPリクエスト、レスポンスをやりとりするためのライブラリ。

Web経由でRaspberry Piにつないだセンサーやカメラをコントロールするなど簡単なWeb画面を作成するには便利そうだが、複雑なWebアプリを作るには機能不足かも。

【その他やってみたこと】
その他、Raspberry Pi関係で、以下のことを試してみた。

・無線小型キーボード購入
Ewin ミニキーボード (ワイヤレス式 無線)



Raspberry Piを外に持ち出す際に小型のキーボードがあったほうが便利かも、などと考えて購入。
Raspberry PiやWindowsマシンにつないでみたところ、キーもトラックパッドも漢字入力も問題無く快適に動く。
(Macbook Airでは漢字変換がうまくできなかった。)
実際に必要になる場面があるかどうかは甚だ疑問だが、安かったしそれなりに面白いので満足。

・sshによるターミナル接続
他のコンピュータからターミナルとして接続できた方が便利なので、ssh接続用にWindows10やタブレットに以下のアプリをインストールした。
(Macbook Airでは初めからsshがインストールされている。)

  Putty (Windows10用)
  Terumius(Androidタブレット、iPad mini用)

Raspbery Pi側でsshを使う設定に変更して接続。
どちらも問題無く接続でき、viエディタなども普通に使えた。

・VNCによる接続
sshでターミナルが使えるようになったので次は他のコンピュータからGUI画面が操作できるか試してみたくなった。
実際に必要になる可能性は低いが、試しにタブレットに次のVNCアプリをインストール。

  VNC Viewer(Androidタブレット、iPad mini用)

Raspbery Pi側でVNCを使う設定に変更して接続。
若干のラグはあるが、どちらのタブレットでも快適に画面表示、操作ができた。

【これからの予定】
ここ2ヶ月ほどの間にDeep Learningについて勉強しながら様々なフレームワークやライブラリなど使ってみたが、調べてみるとこの分野にはまだまだ沢山の面白そうな技術があるらしい。
これまでに述べた内容についてももっと理解を深める必要はあるが、それとは別に今後は以下のソフトウェアについても調べてみたい。

・TensorFlow
Wikipediaによると
「幅広い課題わたる機械学習のためのオープンソースソフトウェアライブラリである。Googleによって開発された。」
とのこと。
最近ちょくちょくこの話題を耳にするので近いうちに調べてみる。

・Caffe
Deep Learning 用のフレームワーク。
DeepDreamと呼ばれるちょっと気持ちの悪い絵を生成するので有名になった。
PsyCamという拡張機能(?)を使うとRaspberry Piでも動くらしいのでちょっと試してみたい。

・音声認識
「Amazon Echo」や「Google Home」などの「音声アシスタント」の話題で最近人気の分野。
Raspberry Piでも色々なライブラリが使えるらしいのでいずれチェックしてみる予定。

以上、色々とやってみたいことはあるのだが、改めて書き並べてみるとどれもこれもちゃんと理論を理解するのには時間がかかりそうでちょっと欲張り過ぎかもしれない。
しかし特に仕事で必要に迫られているわけでもないので、あまり焦らずに面白そうなものから少しずつ手をつけて行きたい。

【その他、トラブルシュートなど】
Raspberry PiでPythonのライブラリ(モジュール)をインストールする際には状況に応じて「pip」や「apt-get」、または「wget」などのコマンドを使う必要がある。
これらのコマンドは非常に使いやすく、大抵の場合は問題無く必要なモジュールをインストールできるのだが、今回幾つか予想外の問題も起きたので、以下でそれらについて記しておく。

・OpenCVのインストール
OpenCVのインストール方法についてはネットで調べた。
参考にしたサイトの一つはここ↓。
http://tomosoft.jp/design/?p=7476

wgetを使って比較的新しいと思われるバージョンOpenCV-3.3.0.zipを取得。
その後、ネット情報に従ってunzip → build → cmake → makeのコマンドでコンパイルしてみた。
これによって必要なモジュールが作られるはずなのだがmakeの部分でトラブル発生。
数十分かけて20〜30%まで処理が進んだところでRaspberry Piのシステムが止まってしまう。
電源を一旦切って、今度は状況をよくみながら再インストールしてみると、止まる前に画面右上に温度計マークが表示されている。
見たことが無いマークだったがネットで検索してみるとこれはRaspberry PiのCPU温度が80度以上になると表示される注意マークらしい。

このインストールを行ったのは結構暑い日で、室温30度くらいで冷房無しで作業をしていたため熱暴走したらしい。
その時のmakeコマンドでは「-j4」というオプションをつけて4つのコアをフルに使ってコンパイルを指定していたのだが、それも熱暴走の原因だったのかもしれない。

ということで、今度は部屋の冷房を入れ、「-j2」の指定で使用コア数を減らしてやってみた。
今度は順調に処理が進んでいる様子だったのでコンパイル中に食材を買いに行ってきた。
が、買い物から戻ってきてみるとまたシステムが止まっている。
また熱暴走かと思い、今度は扇風機の風を当てて観察しつつ再実行してみたところ、1時間以上経って処理が90%あたりまで進んだところでCPUはそれほど暑くなっていないのにシステムが止まってしまう。

その後色々と試した結果、どうやらRaspberry Piのメモリー(1Gのうち862MB割り当てていた)がコンパイルするのに十分ではなかったらしいと見当をつけた。
メモリー使用量を調整してもう少し割り当てを増やせばなんとかなったのかもしれないが何時間も色々調べていて少々疲れたため、ものは試しでOpenCVを3.1.0のバージョンに変えて同じことをやってみたところ今度はあっさりと無事成功。

最新では無いが、とりあえずはこのバージョンを使うことにした。

・Chainerを使った画像認識
前述の雑誌「インターフェース」にChainerを使って「きのこの山」と「たけのこの里」の画像を見分けるプログラムが載っていたため、それを試してみることにした。
しかし画像をプログラムに教育して認識できるようにするためにはそれぞれの写真が40枚程度必要となる。
当然どちらのお菓子も手元にはなかったためとりあえずリンゴとレモンの写真を撮って代用した。
(サンプルプログラムはネットからダウンロードできるのだが写真データはなかった。そのくらいオマケで付けて欲しかった…)

撮った写真をRaspberry Piに移して学習プログラム実行開始。
が、しばらくしたらメモリー不足でプログラムが停止してしまった。
雑誌をよく読んだらこの学習作業はRaspberry PiではなくPCで作業するように記されていた。

せっかく写真を沢山撮ったのだがここら辺で力尽きてしまった。
いずれまた元気が出てきたらPCを使って再挑戦してみるつもり。

・OpenCVからPiカメラへのアクセス
Raspberry PiではUSB接続で一般のWebカメラを使うこともできるが、独自のPi用の小型カメラを接続することもできる。
OpenCVでは基本的にWebカメラを使うようになっているのだが、せっかくPiカメラも買ってあるのでこれをOpenCVで使う方法を色々とネットで調べてみた。
細かい話は省略するが、その結果最近のOpenCVでは比較的簡単にPiカメラを使うことができることがわかった。

参考にしたサイトはここ。↓
http://qiita.com/rukihena/items/95da3860f9ca86c39f8d
https://raspberrypi.stackexchange.com/questions/10480/raspi-camera-board-and-motion#26386

要点だけ説明すると以下のとおり。

 (1) 「sudo modprobe bcm2835-v4l2」コマンド実行、または「/etc/modules」に bcm2835-v4l2の1行を追加。
 (2) 「/dev/」にデバイス「video0」または「video1」が追加される。
 (3) OpenCVからは「cv2.VideoCapture(0)」または「cv2.VideoCapture(1)」でアクセスできる。

少々手間取ったが無事問題が解決できてスッキリ。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
なるほど(納得、参考になった、ヘー)

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Raspberry Pi 3のその後の利用状況について サトウのいろいろ覚え書き2/BIGLOBEウェブリブログ
文字サイズ:       閉じる