Python、機械学習を始めよう！〜Colab講座〜

Google Colaboratoryの使い方

Googleアカウントを持っていれば誰でも使うことができるJupyter Notebook環境であるGoogle Colaboratory(Colab)の使い方を紹介します。

pythonを記述、実行できる環境です<br>
[公式紹介ページ](https://colab.research.google.com/notebooks/intro.ipynb)
機械学習の分野でよく使われています
最近では論文のコード公開やデモに使われることもあります
##Colabの良いところ

* **環境構築不要**
  * すぐ書いて、すぐ動かせる
  * 有名なライブラリはインストール済み



* **無料でGPU使える**
  * **数十万するGPU**が**無料**で**簡単に**使える
  * マシンスペックを気にしなくて良い


* **自動保存** 
  * 作ったノートブックはDriveに自動保存される
  * 変更は自動で保存される



* **Driveとの連携も便利**
 * ローカルからアップロード＆ダウンロードする手間と時間を節約
 * 共有されたファイルをそのまま処理できる
 


* **ディスク容量も充実**
  * 巨大なファイルをDriveやローカルにダウンロードせず処理できる



* **セッション管理だから失敗しても大丈夫**
  * 間違ってすごく重い処理を回してもローカルのマシンにはノーダメージ



##Colabの開き方
まずGoogleにログインした状態でDriveを開きます

その状態で右クリックすると
「その他」から「Google Colaboratory」を選択します 
![スクリーンショット 2021-02-27 19.29.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/10458bdf-802f-5575-b0c8-f814a3eacdbd.png)

##ノートブックの作成
先程の動作を行うと
![スクリーンショット 2021-03-01 8.41.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/f7746bf8-6458-1e62-f28e-59bbac7d0adb.png)
このような画面が開きます

次の赤く囲んだ部分をクリックしてノートブックに好きな名前をつけましょう
![スクリーンショット 2021-03-01 9.00.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/3cb43ad3-58d4-b266-6d19-0e33b8068cc3.png)

ノートブックは自動で保存されていきます


##プログラムの実行
次にプログラムを実行できるよう「ランタイム」に接続します
プログラムは自分のパソコン上で実行されるのではなく、Googleが持っている計算資源で実行されます
赤丸で囲んだ部分をクリックしましょう
すると「接続中」と表示された後、緑色のチェックマークが表示されるのがわかると思います
![スクリーンショット 2021-03-01 9.01.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/8a249510-0637-2599-e126-409387a40e30.png)

それでは実際にプログラムを書いていきましょう
次のように入力したら(コードを書く部分を「セル」と言います)左の再生マークをクリックして実行します
セルを実行する時のショートカットキーは「command」+「Enter」または「control」+「Enter」です
![スクリーンショット 2021-03-01 9.11.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/132862aa-0871-d830-2037-5d4e40dad447.png)

実行に成功すると
![スクリーンショット 2021-03-01 9.19.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/7006c149-09aa-193c-4a19-43d00d1c03d4.png)
結果が表示されます

マウスのカーソルをセルの下中央に合わせると、「コード」と「テキスト」と書かれたボタンが出てきます
![スクリーンショット 2021-03-01 9.20.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/6eddf972-7525-3c71-bd62-61020cd6dc2e.png)
「コード」をクリックすれば新しいセルが作成されます

##ファイルのアップロード・Driveのマウント

写真のオレンジ色に囲まれた部分をクリック
![スクリーンショット 2021-03-01 8.41.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/dcd5dca8-8af9-92c8-105b-84b4d21ab94b.png)
こんな画面になります

![スクリーンショット 2021-03-01 9.34.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/eccdc544-9f9d-fcaa-a5f0-c221a74d0e59.png)

まずファイルのアップロードについて説明します
この機能ではローカルのファイルをColabにアップロードして処理できます
(※アップロードしたファイルはノートブックのように保存されないので注意)
上の写真青く囲まれた部分をクリックしてファイルを選択します

次にドライブのマウントについて説明します
この機能はGoogle Driveにあるデータを処理したいときに使います
つまり、ColabとDriveを連携させる操作になります
上の写真中の赤く囲まれた部分をクリックして
![スクリーンショット 2021-03-01 10.03.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/e47d7790-c4d4-9bc6-7fba-ee242a0f1f0f.png)
「GOOGLE　ドライブに接続」をクリック
これで完了です

アップロードされたファイルはこのような形式で見ることができ、右クリックで「ダウンロード」「ファイル名の変更」「ファイルの削除」「パスをコピー」「更新」を選べます
![スクリーンショット 2021-03-01 15.39.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/e476e364-cfb8-747b-06cb-fe8fd7b0aa8a.png)
またドラッグ＆ドロップで別のディレクトリ移動させることもできます(操作性はあまり良くないですが)
ファイルの中身は、一度左クリックすると見ることができます
![スクリーンショット 2021-03-01 15.44.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/c0ff5ea4-3f7d-e3f3-a2d2-0b0d82fd0cfb.png)

(余談　私はこのdriveのマウントを理解するのに丸３〜４日かかりました。今思えばなんで理解できなかったのかと不思議なくらいですが、初心者は意外とつまづくところなのかもしれません)

ちなみに上の写真に「sample data」というところには機械学習を始める入門データ「mnist」(手書きの数字を画像認識するタスク)「california_housing」(カリフォルニアの家賃を予測するタスク)が入っています(しかもtrainとtestに分かれた状態で)



##GPUの使い方
機械学習をする上でGPUが必要になる場面は多々あります
しかし、GPUは数十万円することもあり特に初心者には容易に手が出せません
(余談　最近はbitcoinの急騰でGPUが中々手に入らないそうです　2021/3/1現在)
上のリボン「ランタイム」→「ラインタイムのタイプを変更」→ハードウェアアクセラレータをGPUに変更
![スクリーンショット 2021-03-01 10.06.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/c22654b8-05de-e1e7-3b6b-ecc0bade3393.png)

すると
![スクリーンショット 2021-03-01 10.07.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/91b32df8-2cf7-60e0-8ed9-b59120871afc.png)

で「保存」をクリック


##サンプルコードの使い方
プログラムを組んでいると「これどうやるんだろう」という場面が絶対に出てきます
そんな時に役立つのがサンプルコードです
Colabでは「コードスニペット」と呼ばれる機能です

写真中の青く囲まれた部分をクリック
![スクリーンショット 2021-03-01 8.41.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/dcd5dca8-8af9-92c8-105b-84b4d21ab94b.png)

ここで検索をかけて
「→」をクリックすると自動でサンプルコードが書かれたセルが挿入される
![スクリーンショット 2021-03-01 9.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/edb5a7be-78fa-2ce6-304c-b819a2e1b45f.png)

自分が使ったことある例

* 「Showing CV2 Images」
これから画像処理を勉強したいという人は思えておくといいかもしれません。ライブラリ「opencv」のcv2.imshow()はColabでは使えないのでこのコードを実行してcv2_imshow()を使います

* 「Camera Capture」
Web cameraから画像を受け取りたいときに使います


##フォーム項目の追加
セルの外から変数の値を変更できます
スライダーやドロップダウンを追加できます
例えば、丁度いい変数の値を探しているときなどに何度も打ち直すのは面倒です
また、人に見せながら実行しているときなどに役立ちます
「挿入」→「フォーム項目の追加」
![スクリーンショット 2021-03-01 12.41.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/834114cc-1930-24b1-4ee3-85e0c0c1c92f.png)
###インプット

![スクリーンショット 2021-03-01 12.50.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/4ae17da8-3a29-8fd7-3e1b-0c17ca0789f8.png)

直接セル内の変数を変更しなくても良くなります
![スクリーンショット 2021-03-01 12.52.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/e59ae0b4-f679-a06d-5849-24afac756dac.png)

変数タイプは「boolean」「date」「integer」「number」「raw」「string」から選べます

###スライダー
「挿入」→「フォーム項目の追加」
「フォームフィールドタイプ」を「slider」に変更
最小値、最大値、単位を設定できます
![スクリーンショット 2021-03-01 13.09.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/e61e26f8-7a79-ab7e-e800-ae30e65f6fef.png)

スライダーバーが表示されます
変数の値をスライダーで操作できます
![スクリーンショット 2021-03-01 12.56.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/c072816a-cfd1-49d8-49ba-4f3edb97b7b0.png)

###ドロップダウン
「挿入」→「フォーム項目の追加」
「フォームフィールドタイプ」を「Dropdown」に変更
「プルダウンの項目」の「+ アイテム」をクリックするとドロップダウンの項目を追加できます
追加したら、「値を入力してください」というところに値を入力します
![スクリーンショット 2021-03-01 13.11.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/87bf1bc7-b97e-c778-653b-91fa9caabbb8.png)

ドロップダウンで変数の値を選べます
![スクリーンショット 2021-03-01 12.58.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/495eecd4-581d-7b75-9a96-a494de51f8f5.png)

##Linuxコマンド
Linuxコマンドを実行できます
基本的には「！」を先頭につければOK
「cd」は「％」が必要
![スクリーンショット 2021-03-02 13.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/5ac25edf-1e57-b45c-7e64-b983ebdecb7d.png)
「cd」でpathを指定する場合は「％」、「！」は不要
![スクリーンショット 2021-03-02 13.00.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/9944e8b0-410e-554a-498c-2a53b59009f2.png)
「ls」は「！」
![スクリーンショット 2021-03-02 13.01.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/ca4af398-e9fc-f700-2f23-97eea8c91a9d.png)
「wget」も「！」
重いファイルをドライブにもローカル(手元のコンピューター)にもダウンロードしたくないときにおすすめ
機械学習用のデータは数〜数十ギガバイトあることも珍しくないので(特に画像データ)とりあえず試すときには使うことがあります
![スクリーンショット 2021-03-02 13.01.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/539b5348-a9bd-c69a-0e9c-d5e08c246505.png)
「cat」も「！」
![スクリーンショット 2021-03-02 13.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/a7a36189-44b0-51a0-e91f-ed0acb47b526.png)

その他にも基本的に「！」を先頭につければLinuxコマンドを実行できます
使えると便利です(特にwget)

##テキスト
テキストを追加できます
自分のメモや共同作業している相手へのメッセージなどに使えます
markdown形式でかけます
「＋テキスト」をクリックして追加します
![スクリーンショット 2021-03-02 13.47.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/a5a5ca1d-56cd-3292-6a77-75bf68a24024.png)

「##」を使うと目次にタイトルが追加されていきます
![スクリーンショット 2021-03-02 13.56.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/cbff6f79-1b3a-d0e6-804c-295db68993bc.png)

ネットにあるイメージのアドレスを指定するとそのイメージを挿入できます
![スクリーンショット 2021-03-02 14.00.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/7f441a57-ad9f-1084-3293-4d6b64611393.png)
(この記事の冒頭に出てくる写真を表示してみました)


また、TeX形式で数式もかけます(先頭と末尾に「$」が必要です)
![スクリーンショット 2021-03-02 13.52.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/5edaa598-9ae5-0a57-778a-0367861203b6.png)

##設定変更
Colabの設定を自由に変更できます
歯車のマークをクリック
![スクリーンショット 2021-03-02 17.05.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/bfce0b26-cb6d-4507-f67d-a8aea6b81a95.png)

するとこんな画面になります
「サイト」では、外部からのアクセスの設定や通知設定を行えます
![スクリーンショット 2021-03-02 17.07.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/a1cead6c-0b6d-48f2-99f5-60cab8ef0b57.png)
ちなみに今、チェックが入っている「実行が完了したときにデスクトップ通知を表示する」を使用するとプログラムの実行終了時に通知が受け取れます
機械学習では、学習に時間がかかるためその間に何かパソコンで別の作業をしたいときなどにおすすめです


また、テーマの変更が行えます
![スクリーンショット 2021-03-02 17.10.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/94b09bc9-7b32-bdfa-3af7-b7db5743e1a7.png)

「dark」に設定するとこんな画面になります
![スクリーンショット 2021-03-02 17.13.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/8e68a96b-cc2f-947a-9712-582cece236fa.png)

「エディタ」では、コードをかくための設定ができます
![スクリーンショット 2021-03-02 17.16.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/ce988524-8c03-e356-5f28-6375d71268c8.png)

vimユーザーの方はこの設定をすると使いやすいかもしれません
(私はvim使えないのでわかりませんが)
![スクリーンショット 2021-03-02 16.57.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/2d3875ca-c4cb-7453-41ce-d321541b5074.png)
こんな感じになります
![スクリーンショット 2021-03-02 16.58.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/196f6a9e-39ae-dc85-0804-d891150a9c6c.png)

![スクリーンショット 2021-03-02 16.58.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/5c30f70b-afdb-6e99-243e-bb1e3fed9cd7.png)


##Tips
(追記の可能性あり)
上のリボン(「ファイル」「編集」「挿入」「ランタイム」「ツール」「ヘルプ」)のどこに自分の使いたい機能があるかわからなくなるという人へ

写真左下の赤丸の部分をクリックすると
![スクリーンショット 2021-03-01 9.11.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/614d00c7-bc8b-c425-8b0a-707e453d2c0d.png)

こうやって機能の一覧が表示されてここから選択すればOK
![スクリーンショット 2021-03-01 9.32.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/511d91cd-70a9-7b88-2f27-8c2b734a2bc1.png)

##最後に
記事を最後までご覧いただきありがとうございました
今後もどんどん更新していきたいと思います

[「無料、独学で機械学習エンジニアになる！~機械学習が学べる無料サイト、書籍~」](https://qiita.com/KamikawaTakato/items/73b748414567d27a9c52)という記事も書いているので興味のある方はぜひそちらもチェックしてください

さて、ちなみにColabは無料で使える環境ですが、Colab Proという有料版も~~まもなく日本で使えるようになります~~もう日本で使えるみたいです（以前はアメリカだけのサポートでした）(2021/3/1現在)
業務でガンガンColabを使いたいという方はぜひそちらをチェックしてください

Colabは論文のデモにも使われています
自分が試したことのあるデモを載せておきます
CVPR2020の[PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization](https://github.com/facebookresearch/pifuhd)
単眼RGB画像から人物の3Dモデル(objectファイル)を作る研究のデモです
興味があればぜひ試してみてください(リンクから飛んで「Open in Colab」と書かれた青いボタン)
<img src='https://camo.githubusercontent.com/84f0493939e0c4de4e6dbe113251b4bfb5353e57134ffd9fcab6b8714514d4d1/68747470733a2f2f636f6c61622e72657365617263682e676f6f676c652e636f6d2f6173736574732f636f6c61622d62616467652e737667'>
をクリックしてみてくださいするとColabが開きます