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

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

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 ファイルの解凍が一番苦労しました。(全部解凍される前にランタイムエラーになったり、セッションエラーになったり。。)ただ画像さえ用意できれば、計算スピードは段違いなのでぜひ一度使用してみてください。

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