かえるのプログラミングブログ

プログラミングでつまずいたところとその解決策などを書いていきます。

Google Cloud Datalab で OpenCV を使えるようにする。 2018/09/28

かえるるる(@kaeru_nantoka)です。

今回は、 Google Cloud Datalab で kaggle の画像コンペに挑戦するにあたって、

import cv2

がエラーになったのでその解決法を残しておきます。

結論 **

以下のコードを実行したら使えるようになりました!

!apt-get update

!apt-get -qq install -y libsm6 libxext6 --allow-unauthenticated && pip install -q -U opencv-python

!apt-get -qq install -y libxrender1 --allow-unauthenticated


open-cv がサードパーティ製のライブラリなために、lib~ からはじまる上記のパッケージたちをインストールしないといけないようです。

同じような理由で heroku の環境構築でも似たような処理をする必要があります。
興味ある方は、以下の記事も見てみてください!

kaeru-nantoka.hatenablog.com


ありがとうございました!

Google Colab で kaggle の画像コンペに挑戦する。

かえるるる(@kaeru_nantoka)です。


今回は環境構築不要かつ無料でGPUを使用して開発できる Google Colab環境で kaggle の画像コンペの提出ファイルを提出するまでの手順についてまとめていきます。
ライブラリのインストールなどは適宜よろしくお願いします。

 

*** 目次 ****

手順1:マウントする。

手順2:画像ファイルを Colab環境に用意する

[ i ] zip ファイルをアップロードする。

[ i i ] zipファイルを解凍する。

手順3:実際に学習する。

手順4:できた csv ファイルをローカル環境にダウンロードする。

手順5:kaggle にコミットする。

おわりに

*********

1 **

まず、 Google Colab 環境での作業ディレクトリの整備をしないといけません。
「マウント」 という処理をやっていきます。

ちなみにこのマウント作業は毎回しなければできません。(無料なのでそこは辛抱です。)

以下のコードを実行してください。

from google.colab import drive
drive.mount('/content/drive')
!ls drive/My\ Drive

ログイン処理の画面に遷移します。遷移先のパスワードをコピペすると完了です。

Google Drive の「マイドライブ」に drive/My\ Drive でアクセスできるようになります。
Linux コマンドの ls 前の ! は Google Colab の方言のようなものです。(私はそのように認識してます。)

注意点は、My と Drive 間に空白が必要なのですが、この空白を「 \ (バックスラッシュ)」で表示しないといけないことです。(私はハマりました。。)

ちなみにアップロードした画像データにアクセスする時は、

train_df = pd.read_csv("drive/My Drive/train.csv")

というようにしましょう。
逆に、バックスラッシュを使用したらエラーという罠です。
(やはりハマりました。。)

2 **

次に、画像データを用意しましょう。

私の場合は、
[ i ] kaggle の HP からダウンロードできる zip ファイルをドラッグ&ドロップでマイドライブに持ってきて、
[ i i ] コマンドで解凍する。

という手法でやりました。

この時に使用したコマンドたちが以下です。

(1)

!unzip drive/My\ Drive/all.zip -d drive/My\ Drive/

(1)のポイントは、-d drive/My\ Drive/ です。
展開先をマイドライブを指定して展開するためのものです。
このようにしたら再びマウントした時にも画像データが残っていました。

これをしないで展開すると、 !ls の直下に画像が展開されます。
そのセッション中なら展開した画像が使えるのですが、セッションが切れると丸ごと消えちゃいます。
(私の場合は再びマウントした時に消えていました。。私の場合のみだといいのですが。。)


(2)

!rm -r drive/My\ Drive/images

(2)はドライブ内のフォルダ・ファイルを削除するためのコマンドです。
やり直したい時に使っています。

3 **

ここでは割愛します。
GPU パワーをフルに体感してください!!!

4 **

さて、提出用の csv ファイルができました。
これは、 !ls の直下にできます。

ローカルだと作業ディレクトリ内にできるので簡単に提出できるのですが、Colab環境で作ったファイル
はこのままだと提出できないので、ローカルにダウンロードしましょう。

# 学習したファイルを local に持ってくる。
from google.colab import files
files.download("sample.csv")

5 **

これで、ローカルに提出ファイルを持ってくることができました。
いつもやっている通りに kaggle にコミットしましょう。

おわりに **

これで Google Colab の GPU リソースを使用して画像コンペに挑むことができます。
私個人では、画像ファイルの入っている zip ファイルの解凍が一番苦労しました。(全部解凍される前にランタイムエラーになったり、セッションエラーになったり。。)ただ画像さえ用意できれば、計算スピードは段違いなのでぜひ一度使用してみてください。

ありがとうございました!

herokuで python3 + opencv を動かす 2018/09/16

かえるるる(@kaeru_nantoka)です。
 

今回は、heroku 環境で python3 + opencv を動かす という内容で書いていきます。

方法は主に二つありまして
i ) docker 環境を構築する。
i i ) build pack を利用する。

で、今回は後者で実装していきます。

この時参考にさせて頂いた記事(https://takasa-5.blogspot.com/2018/02/opencv-4-heroku-python3-opencv.html?m=1)でとても簡潔にわかりやすく書かれていました。

こちらをベースに設定ファイルを少し調整し、私が動作を確認できた内容になっています。

ソースコードGitHub にあげておりますので参考にしていただければ幸いです。

GitHub - osuossu8/python3_opencv_tutorial )


***目次***

1:経緯

2:結論

3:ソースコードの説明

4:heroku 側の設定

5:まとめ

********



1: 経緯

私が機械学習を用いた画像判別LINE Bot を作成し、heroku にデプロイしたときの話です。

例のごとくアプリケーションエラーが出てきていつものように heroku  logs --app アプリ名でログを確認してみると、「 import cv2 」 のところでエラーが出ているようでした。

ググってみると、

・素のheroku環境では cv2 を読み込めない

・heroku 側の設定で buildpack というものを追加し、機能を拡張する

・Aptfile という設定ファイルを作成し、buildpack に対する命令を書き込む

といった手順を踏む必要があるらしいとわかりました。

 

2: 結論

⬆︎のリンクで書かれていた内容 + Aptfileに2行追加する

という形で私の場合は動くようになりました。

 

3: ソースコードの説明

今回のディレクトリ構成は以下のような感じになっています。

python3_opencv/

  • main.py *
  • requirements.txt **
  • Aptfile ***
  • shiogao_model2.h5 ****
  • runtime.txt
  • Procfile

特に今回のポイントになる部分を以下で解説します。 

i ) main.py

ブラウザ上で hello world ! と出力されるだけのプログラムです。

f:id:kaeru_nantoka_py:20180916223336p:plain

(⬆︎ うまく行った時のログです。)


あくまで今回の目的は、

・cv2 のimportでエラーが出ないようにすること

機械学習モデルを load して、ロードできているか確認する(おまけ)

ですので、「機械学習で使用するライブラリを import した上でエラーが出ずにプログラムが実行された状態」をわかりやすく実現するために簡潔な処理だけ入れています。

因みに、コメントアウトしてる load_model あたりの# を外すと、hello world ! が表示されなくなり、ログで以下のようなものが確認できるはずです。

f:id:kaeru_nantoka_py:20180916220021p:plain

理由はモデルに投入する画像データを想定するサイズでインプットする処理が抜けているからです。
しかし、 model.summary() が実行されてログが確認できていることから、from keras.models import load_model がきちんと読み込まれていることがわかります。

i i ) requirements.txt

heroku 環境に pip install して欲しいライブラリを記述します。今回は、
Flask, pillow, keras, tensorflow,
opencv-python

を記述しています。
バージョン名を記述しなければ、heroku 対応しているバージョンを勝手にとってきてくれます。

i i i ) Aptfile

今回のポイントです。
buildpack と一緒に組み合わせて heroku 機能を拡張するようなものと認識しております。(詳しい方教えてください。。)
libsm6, libice6 は参考にさせて頂いた記事で書かれていたものです。

この二行のみの状態でデプロイしたところ、記事のようにうまくいかなかったのでログを見ながら追加したのが以下の二行です。

linfontconfig1
libxrender1

これらを記述したところエラーがなくなりました!


f:id:kaeru_nantoka_py:20180916223436p:plain

(⬆︎ うまくいかなかった時のログです。 import cv2 が云々怒っています。)

i v ) shiogao_model2.h5

こちらは別件で組んだ画像判別モデルです。
これをきちんと読み込めますよ〜と実演するためのファイルなのでなんでも良いです。


4: heroku 側の設定

settings の buildpack  のところに urlを追加する形で実装します。

f:id:kaeru_nantoka_py:20180916215759p:plain

  • buildpackとは?

公式のリンクを貼っておきます。
 
Heroku buildpack | Heroku


5: まとめ

現在機械学習が流行っており、私のようにローカルで作成したものをデプロイしたい!という同じ気持ちを持った方々に届いたら嬉しいです。

タイトルは python3 + opencv となっていますが、 ソースコードではおまけで ローカルで学習させたモデルを loadしてsummaryを確認するというような内容も組み込んでいますのでお役に立てればと思ってます。

以上、ありがとうございました。

kaggle のGPU環境で作成した CSVファイルの出力先はどこ? 2018/9/8

かえるるる(@kaeru_nantoka)です。
今回はいろいろあって kaggle のkernels で利用できるJupyter Notebook( 以下kaggle環境) でkaggle に取り組んでいた時に勝手が分からなくてつまづきました。

日本語のブログやqiita記事だと「kaggleのkernels で取り組んでGPU環境を無料で利用しよう!」までは書かれていたものの、「その環境で作成したものの出力先の場所はどこか?」やどうやって提出すればいいのかまで解説しているものがなかったです。

と言うわけで、今までローカルの Jupiter Notebook でkaggle に取り組んでいたけれど、GPU使いたくてkaggle環境でチャレンジしたい! と思っていた数日前の自分に向けて書いていきます。

**目次**

1:ローカル環境ではどうなの?

2:kaggle 環境だとどうだったの?

3:結局どうやったの?

4:まとめ

*******


1:

ローカル環境だと、

sub.to_csv( 'sub.csv' )

というようなスクリプトを実行すると、JupyterNotebook が実際に動作しているディレクトリ上に
sub.csv と言う名前で提出用のファイルが作成されます。

このファイルを、
kaggle のCompetition ページの Submit Predictions というところから先のファイルを探し出して提出します。



2:

そんな私は、
kaggle 環境でも、同じように

sub.to_csv( 'sub.csv' )

というスクリプトを実行しました。

しかし、、、

csvファイルが無い。。。

とても困りました。


3:

ー小目次ー
i ポイントとなるボタン

ii Commit を押して、notebook のページに移動しよう

iii output タブを押す

ーーーーー

kaggle 上で notebook を立ち上げると上の方に、

<< のボタンと、 Commit というボタン

があるのがわかると思います。今回のポイントはこのボタンたちです!

通常通り、
sub.to_csv( 'sub.csv' )

まで記述したら、このスクリプトを実行する代わりに先の Commit ボタンを押して実行します。

(私は、このボタンを押したら kaggle の諸先輩がたのように他のkaggler たちの目に触れるようになるのではないかとビビっていたのですが、デフォルトだと private 形式なようで Commit され他の方の目に触れる心配はなかったです。😄)

すると、 notebook 上で実行スクリプトが流れるので流れ終わったら、
先の << ボタンを押します。

すると、先に Commit した notebook のページ? のようなところに遷移します。

ここまできたらあと少し、このページに output のタブがあると思います。
これを押すと、先ほど作成した、csv ファイルや notebook 上で組んだ model などが保存されているはずです。

このcsv ファイルをクリックすると、Submit to Competition というボタンがありこれを押すと
無事提出できます!!


4:

kaggle のページのスクショとか勝手に使っていいものかわからず、テキストのみでの紹介になってしまいましたが、
これが kaggleにチャレンジしているどなたかのお役に立てると幸いです。

ありがとうございました!

kaggle 初心者 vs データの全貌

かえるるる(@kaeru_nantoka)です。

今回は、kaggle歴 2週間の初心者である私が知らずに苦労した点とその解決策を備忘がてら書いていきます。

データの参照についてです。

 

*******

1. はじめに

2. つまづき

3. 更なる問題

4. 今回の解決法

5. まとめ

*******

 

1:はじめに

本題に入る前にお伝えしておかないといけないのが、kaggle のコンペで自分の学習モデルを提出するまでのプロセスです。

私の現在時点の認識ですが、

 

( i )データをDLし、読み込む

→ ( i i )  欠損データを代わりのもので置換する

→ ( i i i ) 文字データを数値で置き換える or 数値で表せるような新たな特徴量に定義し直す

→ ( i v ) 機械学習モデルに学習させる

→ ( v ) モデルを提出する

 

という大きく分けて 5つのプロセスを踏みます。

特に ( i i ), ( i i i ) を前処理といってこれだけで膨大な時間がかかります。

 

この辺りの方法はカーネルを見たり、「kaggle 初心者」 とググったらタイタニック問題を題材に強い方々がわかりやすく説明してくれているので、そちらを参照すると良いでしょう。

 

2:つまづき

初心者である私は、まず強い方々がわかりやすく解説してくださっている日本語のブログなどを写経していました。

 

f:id:kaeru_nantoka_py:20180823000922p:plain

 

これはカーネルや日本語の解説記事などでまず書かれていないといっては過言ではない、お決まり文句です。

 

kaggle では、分析に必要なデータを csv という形式で配っているのですが、それをそれぞれ train, test という変数に格納し、head( ) というメソッドではじめの 5行を表示しています。

 

初心者の私はここでつまづきました!(早い!)

なんでデータのカケラしか見えないんや。。。

 

もともと私は要領が良い方でなく、全てのデータを見ないといちいち何の処理をしているのかが理解できませんでした。

 

また前処理 ( i i ), ( i i i ) で欠損値や数値置換をする必要もあるので、やはりどこに何があるのかを把握しておきたいものです。

 

そこで私は、

「 pandas データ 全部見る」といった具合でググってついに見つけました。

https://qiita.com/tanemaki/items/2ed05e258ef4c9e6caac

 

f:id:kaeru_nantoka_py:20180823002624p:plain

 

グラフのバーが小さくなったのがわかります。

これでこのタイタニック問題の全データが見れるようになりました!

 

3:更なる問題

しかし、この方法にもことkaggle においては重大な問題があります。タイタニック問題は、せいぜい 900行*12列 でしたが、他のコンペでは 30万行など膨大な量のデータがあります。

 

そうです 30万行です(苦笑)

表示しても全部見るのは大変ですし、そもそもMacBook Air くらいのスペックのPCだと読み込むのにだいぶ時間がかかって作業に支障をきたします。

 

4:今回の解決策

結局、私は以下の方法にたどり着きました。

任意の 行*列 を抜き出す方法です。

 

f:id:kaeru_nantoka_py:20180823004117p:plain

 

[ 行 , 列 ] で 2~5 * 2~5 のブロックを抜き出すことができました。これで抜き出す範囲をうまく調整することで、任意の場所を参照できます。

 

5:まとめ

kaggleに参加してみたい初心者がぶつかりそうなこととその解決方法を、初心者の私がその時のシチュエーションそのままにお送りしてきました。

また何か、つまづきや気づきがあったら記録します。

 

ありがとうございました。

機械学習初心者な私がkaggleをオススメする3つの理由。 2018/8/19

かえるるる(@kaeru_nantoka)です。
今回は、私が最近ハマっているkaggle(カグル)についてオススメな点を機械学習初心者の目線で書いていこうと思います!

1. kaggleとは?
2. 理由1 ー 豊富なカーネル
3. 理由2 ー 目標と現在地点の距離が明確
4. 理由3 ー 自分に足りないスキルが明確にわかる
5. まとめ


1. kaggleとは?

みなさんkaggle(https://www.kaggle.com)はご存知でしょうか。
wikipedia(Kaggle - Wikipedia)によると、

***************************************
Kaggleは企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォーム及びその運営会社である。
***************************************

ということです。機械学習をテキストなどで勉強された方が一度は感じたことがあるであろう「こんなにたくさんのデータを1から集めるなんて大変だなあ」といった機械学習あるあるに悩まされることなく機械学習の勉強をすることができます。

また、企業や研究者はデータを提供しているだけではなく、ランキングの上位のモデルを提出した個人/グループには賞金を出しているところもあります!


2. 豊富なカーネル

先ほど、kaggleは機械学習モデルの精度を競うプラットフォームであると見てきました。なんと上位ランカーの投稿したモデルを作るプロセスを見ることができるのです!

それがカーネルです。カーネルとはkaggle上で閲覧・実行ができるjupyter notebook です。
ズバリ一流のデータサイエンティストの手法が見放題なのです!😳

私の場合、知人にデータサイエンスに精通している方がいないので書籍やネットを介してではないとこうした知見を得ることができません。
一方カーネルは、機械学習初学者向けにとても丁寧に書かれたものもあります。

高度な処理を実施していたり、その処理をしている理由を前後の文脈から読み取らなければならない難しさはありますが、これも勉強なので私としては大満足です!


3. 目標と現在地点の距離が明確

f:id:kaeru_nantoka_py:20180820001426p:plain

これは私が最初に投稿したときのものです。
このように、自分が組んだモデルの精度が点数化され、その母数の中の順位が表示されます。
自分の中に蓄積された知識をフル動員して、0.01点の変化を追うプロセスがアツいです!

またプログラミング学習あるあるである、自分の実力が客観的にどれくらいなのかが見えない問題もこのkaggleでは起こらないです。

今の自分のベストを数値という絶対的な指標でみれる、とても魅力的なフィールドです。

4. 自分に足りないスキルが明確にわかる

kaggleにはタイタニック問題(Titanic: Machine Learning from Disaster | Kaggle)という初学者向けのチュートリアルの位置付けの問題があります。

・日本語で丁寧に解説されているものがある
・この手法を応用することで他の問題を解くこともできる

と初心者でも取っつきやすい上、良いことづくめな問題です。

つまり、この問題を写経してみて内容が理解できないということは機械学習をする上での基礎が抜け落ちているということになります。
私の場合は、この時点で numpy や pandas といった機械学習ライブラリの理解不足が浮き彫りになったので、Aidemy のデータクレンジングコースで基礎を抑えた上で再挑戦したらすんなり内容が入ってきました。

このように、チュートリアルカーネルを読み進めていく中でわからないところを他の教材で詰めていく、といったようにアウトプットを前提にしているので無駄なくデータ分析の知識をインプットができます。


5.まとめ

私もkaggle歴はまだ浅いですが、以上の理由でモチベーション高く・日々コツコツ着実に機械学習の勉強を進めていることができています。
pythonを学習しているみなさんもぜひkaggleに参加してみてください!

ありがとうございました。

[つづき]chart.js + Flask で円グラフをWEB上に表示する。 2018/8/5

かえるるるです。

 

先ほどのエントリが途中で切れていたので、続きを投稿します。。

 

 

kaeru-nantoka.hatenablog.com

 

この記事の最後、ポイントは。。。

の続きから書いていきます。

 

ポイントは、html の下の方にある

<script src = ~~~/Chart.min.js></script>

です。これのおかげで、chart.jsをサイトからダウンロードしなくても使えるようになります!

 

2:結局何ができるようになるの?

 

=> ユーザーに入力してもらった値を用いてpython機械学習ライブラリで計算、その結果をWEBページに表示することができるようになります。

 

機械学習を個別の環境で扱う方法に jupyter notebook というものを使う方法があります。

この環境でグラフを表示する方法は主に以下の2つがあって、

i. show() 関数を使う。

ii. jupyter notebook 環境のブラウザを使う。

 

これらは環境に依存する(環境構築をしたPCでのみできる)ため、webサービスに転化するのが難しいです。

しかしこの方法なら、webサービスとして公開できます。

 

3:参考URL

 

今回は以下のサイトたちを参考にいたしました。

FlaskとTwitter APIで、ツイッターのソーシャル分析アプリを作りました

グラフ作成にオススメ!「Chart.js」がかんたんに使えてイイ感じ | vdeep

[Python] Flask 入門 - ゾンビでもわかるPythonプログラミング

 

以上です、今回も足を運んでいただきありがとうございました。