Edited at

Google Colaboratory内で画像やCSVファイルにアクセスするのが一苦労だった話

More than 1 year has passed since last update.


はじめに

GoogleのColaboratoryにて、無料でGPUが使えるという嬉しすぎる報告から簡易テスト用はこれを使うこと一択!と思っています。

しかも、TeslaのK80という太っ腹過ぎます!

いつも使っているディープラーニングフレームワークであるChainerでも対応しており、TensorFlow, Pytorchと基本はノートブック内で !pip install 〜とするだけでOKです。

参考:【秒速で無料GPUを使う】TensorFlow/Keras/PyTorch/Chainer深層学習環境 on Colaboratory

簡単にMNISTを通すテストだけでは気づかなかったのですが、実務で使い始めると、画像やCSVファイルを読み込みたいケースがあり、その時に控えめに言っても結構めんどくさいし、全然リファレンスが見つかりませんでしたので、今回ざっくりとまとめておきます。

* もっと他にスマートな方法があれば教えてもらえるとありがたいです m(_ _)m

前提としては、Googleのアカウントを持っていることだけです。


1. ファイルをアップロード

それでは、今回は sample.csv ファイルを読み込む練習をしてみましょう。

まずは、Google Driveのどこでも良いので、ドラッグドロップでアップロードしましょう。


2. 共有リンクを取得

ファイルを右クリックでメニューを開き、『共有可能なリンクを取得』しましょう。

リンクの共有がオフですと出てくる場合は、右側のバーをスライドさせて共有をオンにしましょう。

そうすると、共有リンクが取得できるため、こちらをコピーしておきましょう。

大事なところは、id=以下になります。

例えば、ここからは https://drive.google.com/open?id=kikagaku だとして話を進めていきましょう。


3. Colaboratoryでノートブックを開く

Google Colabにアクセスして、新規もしくは既存のノートブックを開いてください。

ノートブックは自動的にGoogle DriveのColab Notebookというフォルダに保存されています。

このフォルダに読み込みたいデータをアップロードしておけばOKかな?と思ったのですが、全然そういう訳ではありませんでした。

最初には datalab という得体の知れないファイルのみあり、それ以外は何もありません。


4. Google Driveにアクセスするための準備

まず、PyDrive というGoogle Driveと接続するためのモジュールをインストールしておく必要があります。


PyDriveのインストール

!pip install -U -q PyDrive


つぎに、インストールした中で必要なライブラリを読み込んでおきましょう。


ライブラリの読み込み

from pydrive.auth import GoogleAuth

from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

もし、googleがありませんとエラーが出た場合は、同様に !pip install google でインストール完了です。

そして、Google Cloud SDKの認証を行いましょう。


GoogleCloudSDKの認証を行う

auth.authenticate_user()

gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

こちらを実行すると、下記のようにGoogle Cloud SDKの認証リンクが出てきます。

リンクへアクセスし、ユーザーIDを選択して、Google Cloud SDKでの使用を許可すると、下記の画面のように Verification Code が得られます。

こちらのコードをEnter verification codeの部分にコピペしてEnterです。

特にエラーが起きなければ認証完了です。


5. Google Drive上のファイルにアクセス

ここで、Step2で取得していた共有リンクの出番です。

idという変数に、共有リンクで取得した id= より後の部分を貼り付けて、下記のコードを実行してください。


ファイルへアクセス

id = 'kikagaku'  # 共有リンクで取得した id= より後の部分

downloaded = drive.CreateFile({'id': id})
downloaded.GetContentFile('sample.csv')

こちらを実行して特にエラーが出なければ、Google Drive上のファイルがダウンロードされています。

ディレクトリの中身を確認してみましょう。

これで後はローカルのファイルと同様に読み込むことができます。


6. (補足)ディレクトリ毎アップロードしたい場合

ディレクトリは id とは異なる共有リンクであるため、zipファイルに圧縮してアップロードを行いダウンロードするのが無難そうです。

例えば、images.zipというファイル名で圧縮した後にGoogle Driveへアップロードを行った場合、前述の手順と同様に共有リンクを元にダウンロードを行います。

こんな風に images.zipをダウンロードしてくることができるのですが、解凍しないと使えないため、unzipコマンドで解凍しましょう。


images.zipを解凍

!unzip images.zip


非常に簡単に解凍できました。

解凍後にimages.zipが必要なければ、!rm images.zipで削除すればOKです。

こんな風にディレクトリのアップロードも完了しました。


おわりに

Dropbox等であれば、wgetで取ってくる方法もあるそうです。

参考:colaboratory をつかってみる CSVのファイルをアップロード

みなさん、ハッピーなディープラーニングライフを送りましょう!


著者紹介



株式会社キカガク

代表取締役社長 吉崎 亮介(twitter: @yoshizaki_kkgk

TwitterでAI関連の情報をつぶやいていますので、フォローお待ちしています!