#author("2023-09-11T02:15:47+00:00","default:mizutu","mizutu") [[私的AI研究会]] > Colab * Google Colaboratory で機械学習 [#z1fcd891] #ref(colab_s.jpg,right,around,40%,colab_s.jpg) 機械学習や Deep Learning の実行環境に「Google Colaboratory」を使ってみる~ YOLO V7 を使ってカスタムデータによる学習を実行する~ #contents #clear RIGHT:&size(12){※ 最終更新:2023/09/11 }; ** Google Colaboratory 動作確認 [#f1005ae5] *** Google Colaboratory を使ってみる [#q2d16be2] + Google の[[「Colaboratory へようこそ」>+https://colab.research.google.com//?hl=ja]] ページを開く~ #ref(20230910_000000_001m.jpg,right,around,15%,20230910_000000_001m.jpg) ~ + Googleアカウントにログインしていなければログインする~ ~ +「ファイル」メニューまたはダイアログのボタンから「ノートブックを新規作成」を選択~ #ref(20230910_000005_001m.jpg,left,around,15%,20230910_000005_001m.jpg) #ref(20230910_000006_001m.jpg,left,around,15%,20230910_000006_001m.jpg) #clear ~ + ''左上のタイトル(Untitled*)を「yolov7_custom」に変更する''~ ~ + セルにコードを入力し、左側の三角ボタンをクリックするか「Ctrl」+「Enter」を押して実行する~ #ref(20230910_000011_001m.jpg,right,around,20%,20230910_000011_001m.jpg) #codeprettify(){{ print("hello colaboratory!") }} 入力欄(セル)の下に結果が表示され簡単に Python の実行環境が手に入る~ ~ &color(green){''※「ノートブック」でのコマンド実行手順''}; ++ セルが表示されていない場合は「+コード」メニューを押しセルを表示する~ ++ セルにコマンドを入力し、三角ボタンをクリックするか「Ctrl」+「Enter」を押す~ ++ ''先頭に「!」をつけることで、PythonではなくOSのコマンドラインに命令を送ることができる''~ #clear *** Google Colaboratory の実行環境を設定(確認)する [#yabd4487] #ref(20230910_000012_001m.jpg,right,around,20%,20230910_000012_001m.jpg) + メニューから「ランタイム」→「ランタイムのタイプを変更」を選ぶ~ #ref(20230910_000014_001m.jpg,right,around,20%,20230910_000014_001m.jpg) ~ + 表示されたダイアログから「GPU」を選ぶ~ &color(red){GPU を設定する};~ ~ + スペックを確認する~ ~ ++「lshw」をインストールする~ #codeprettify(){{ !apt install lshw }} ++ハードウェア情報を収集するために「lshw」を実行する~ #codeprettify(){{ !lshw : *-memory description: System memory physical id: 0 size: 12GiB *-cpu product: Intel(R) Xeon(R) CPU @ 2.20GHz vendor: Intel Corp. physical id: 1 bus info: cpu@0 width: 64 bits : *-display description: 3D controller product: TU104GL [Tesla T4] vendor: NVIDIA Corporation physical id: 4 bus info: pci@0000:00:04.0 version: a1 width: 64 bits clock: 33MHz : }} ※「CPU Intel(R) Xeon(R) 2.20GHz」「メモリ 12GB」「GPU Tesla T4」の実行環境が確認できる~ #clear *** Google Drive に作業領域を確保する [#t6834b14] + [[Googleドライブ>+https://drive.google.com/drive/my-drive]]を起動する~ Googleアカウントにログインしていなければログインする~ ~ + マイドライブ直下に新しく「try」フォルダを作成する~ マイドライブ表示エリアでマウス右クリック、「新しいフォルダ」を選択する~ ~ #ref(20230910_000001_001m.jpg,left,around,15%,20230910_000001_001m.jpg) #ref(20230910_000002_001m.jpg,left,around,15%,20230910_000002_001m.jpg) #ref(20230910_000003_001m.jpg,left,around,15%,20230910_000003_001m.jpg) #clear *** Google Colaboratory に Googleドライブをマウントする [#z2e1a8c0] #ref(20230910_000020_001m.jpg,right,around,20%,20230910_000020_001m.jpg) + [[「Google Colaboratory>+https://colab.research.google.com//?hl=ja]] ページの右「ファイル」①を押す~ ~ + 左上の「ドライブをマウント」②を押す~ ~ + ダイアログが表示された場合「Googleドライブに接続」を押す~ #ref(20230910_000021_001m.jpg,right,around,20%,20230910_000021_001m.jpg) ~ + マウントが完了すると「drive」フォルダ③が表示される~ 前項で作成した「try」フォルダが表示されることを確認する~ ~ 参考 → [[GoogleColabでGoogleドライブをマウント>+https://kenko-keep.com/google-colab-mount/]]~ #clear ** Google Colaboratory に「YOLO V7」を実装 [#h467958f] *** 物体検出 AI「YOLO V7」をインストール [#f7e04f3c] + カレントディレクトリを「MyDrive/try7」へ移動する~ #codeprettify(){{ cd /content/drive/MyDrive/try }} ・結果表示 /content/drive/MyDrive/try ※ カレントディレクトリを確認するコマンド~ #codeprettify(){{ !pwd }} ~ + [[YOLO v7 オフィシャルサイト>+https://github.com/WongKinYiu/yolov7]] から下記コマンドでプロジェクトをクローン~ #codeprettify(){{ !git clone https://github.com/WongKinYiu/yolov7 }} #divregion( - log -) #codeprettify(){{ Cloning into 'yolov7'... remote: Enumerating objects: 1154, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (8/8), done. remote: Total 1154 (delta 8), reused 13 (delta 7), pack-reused 1139 Receiving objects: 100% (1154/1154), 70.42 MiB | 17.19 MiB/s, done. Resolving deltas: 100% (494/494), done. Updating files: 100% (104/104), done. }} #enddivregion ~ ・成功するとGoogleドライブ「/MyDrive/try」に「yolov7」というディレクトリが作成される~ ~ + カレントディレクトリを「yolov7」へ移動する~ #codeprettify(){{ cd yolov7 }} ~ #ref(20230911_000001_001m.jpg,right,around,20%,20230911_000001_001m.jpg) + 必要なライブラリをインストール~ #codeprettify(){{ !pip install -r requirements.txt }} #divregion( - log -) #codeprettify(){{ Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Requirement already satisfied: matplotlib>=3.2.2 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 4)) (3.7.1) Requirement already satisfied: numpy<1.24.0,>=1.18.5 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 5)) (1.22.4) Requirement already satisfied: opencv-python>=4.1.1 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 6)) (4.7.0.72) Requirement already satisfied: Pillow>=7.1.2 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 7)) (8.4.0) : : Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch!=1.12.0,>=1.7.0->-r requirements.txt (line 11)) (1.3.0) Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard>=2.4.1->-r requirements.txt (line 17)) (0.5.0) Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard>=2.4.1->-r requirements.txt (line 17)) (3.2.2) Installing collected packages: jedi, thop Successfully installed jedi-0.18.2 thop-0.1.1.post2209072238 }} #enddivregion ~ + 学習済みモデルをダウンロード~ ・YOLOv7 には学習済みモデルがいくつも用意されているが今回は「yolov7-tiny.pt」を使用する~ #codeprettify(){{ !wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-tiny.pt }} #divregion( - log -) #codeprettify(){{ --2023-09-11 00:32:33-- https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-tiny.pt Resolving github.com (github.com)... 140.82.113.3 Connecting to github.com (github.com)|140.82.113.3|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/511187726/ba7d01ee-125a-4134-8864-fa1abcbf94d5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230911%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230911T003233Z&X-Amz-Expires=300&X-Amz-Signature=e69beb9fd21b30dd684c024a58df89cf2d7402d3d85998f3cee7397cd2680e1b&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=511187726&response-content-disposition=attachment%3B%20filename%3Dyolov7-tiny.pt&response-content-type=application%2Foctet-stream [following] --2023-09-11 00:32:33-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/511187726/ba7d01ee-125a-4134-8864-fa1abcbf94d5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230911%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230911T003233Z&X-Amz-Expires=300&X-Amz-Signature=e69beb9fd21b30dd684c024a58df89cf2d7402d3d85998f3cee7397cd2680e1b&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=511187726&response-content-disposition=attachment%3B%20filename%3Dyolov7-tiny.pt&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.110.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.109.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 12639769 (12M) [application/octet-stream] Saving to: ‘yolov7-tiny.pt’ yolov7-tiny.pt 100%[===================>] 12.05M 34.6MB/s in 0.3s 2023-09-11 00:32:33 (34.6 MB/s) - ‘yolov7-tiny.pt’ saved [12639769/12639769] }} #enddivregion *** サンプル画像の物体検出 [#e76fd520] + サンプル画像の物体検出を実行する~ #codeprettify(){{ !python detect.py --source inference/images/ --weights yolov7-tiny.pt --conf 0.25 --img-size 1280 --device 0 }} #divregion( - log -) #codeprettify(){{ Namespace(weights=['yolov7-tiny.pt'], source='inference/images/', img_size=1280, conf_thres=0.25, iou_thres=0.45, device='0', view_img=False, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='exp', exist_ok=False, no_trace=False) YOLOR 🚀 v0.1-126-g84932d7 torch 2.0.1+cu118 CUDA:0 (Tesla T4, 15101.8125MB) Fusing layers... Model Summary: 200 layers, 6219709 parameters, 229245 gradients Convert model to Traced-model... traced_script_module saved! model is traced! /usr/local/lib/python3.10/dist-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3483.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined] 4 persons, 1 bus, Done. (13.4ms) Inference, (31.8ms) NMS The image with the result is saved in: runs/detect/exp/bus.jpg 5 horses, Done. (12.3ms) Inference, (1.8ms) NMS The image with the result is saved in: runs/detect/exp/horses.jpg 3 persons, Done. (15.3ms) Inference, (1.9ms) NMS The image with the result is saved in: runs/detect/exp/image1.jpg 2 persons, Done. (12.9ms) Inference, (1.2ms) NMS The image with the result is saved in: runs/detect/exp/image2.jpg 1 dog, 1 horse, Done. (12.6ms) Inference, (1.3ms) NMS The image with the result is saved in: runs/detect/exp/image3.jpg 2 persons, 2 ties, Done. (10.9ms) Inference, (1.5ms) NMS The image with the result is saved in: runs/detect/exp/zidane.jpg Done. (1.881s) }} #enddivregion ~ #ref(20230911_000002_001m.jpg,left,around,12%,20230911_000002_001m.jpg) ~ ・サンプル画像は「yolov7/inference/images」を「–source」オプションで指定~ ・推論結果の保存先は「yolov7/runs/detect/exp*」( * は自動的に振られる番号)~ ・結果の画像は「Google Colab」のファイル、または「Google Drive」で参照(ダウンロード)できる~ #clear ・出力画像(6枚)~ #ref(YOLOv7_Colab/20230510_bus_m.jpg,left,around,18%,20230510_bus_m.jpg) #ref(YOLOv7_Colab/20230510_horses_m.jpg,left,around,25%,20230510_horses_m.jpg) #ref(YOLOv7_Colab/20230510_image1_m.jpg,left,around,25%,20230510_image1_m.jpg) #ref(YOLOv7_Colab/20230510_image2_m.jpg,left,around,25%,20230510_image2_m.jpg) #ref(YOLOv7_Colab/20230510_image3_m.jpg,left,around,30%,20230510_image3_m.jpg) #ref(YOLOv7_Colab/20230510_zidane_m.jpg,left,around,20%,20230510_zidane_m.jpg) #clear #ref(20230911_000004_001m.jpg,right,around,12%,20230911_000004_001m.jpg) #ref(20230911_000003_001m.jpg,right,around,12%,20230911_000003_001m.jpg) *** ランタイム接続を切断する [#t7971ce3] + メニューバー「ランタイム」→「ランタイムを接続解除して削除」を選択する~ ~ + ダイアログ選択で「はい」を押す~ ~ ※ ''GPUを選択している場合、実行しない場合は接続解除するほうが望ましい(時間制限がかかるので)''~ #clear ** カスタムデータで学習する [#s4b0f62f] *** 事前準備(データセットのアップロード) [#vc09bc9c] + [[Googleドライブ>+https://drive.google.com/drive/my-drive]]を起動する~ ~ + データ・セット「yolov7-main/data/janken4_dataset」をフォルダごとGoogleドライブの「MyDrive/try/yolov7/data」にアップする~ #codeprettify(){{ yolov7 ┗ data ┗ janken4_dataset }} ~ + 学習するのに必要な情報を記述したyamlファイル「yolov7-main/janken4_dataset.yaml」を「MyDrive/try/yolov7」の直下にアップする~ #codeprettify(){{ yolov7 ┠ data ┃ ┗ janken4_dataset ┗ janken4_dataset.yaml }} *** Google Colaboratory で学習を実行する [#aabce0ab] + [[GoogleColab>+https://colab.research.google.com/?hl=ja]] を起動し、ノートブック「yolov7_custom.ipynb」を選択する~ ~ + 左サイドバーの「ファイル」を選択することで [[Googleドライブ>+https://drive.google.com/drive/my-drive]]をマウントする~ ~ + カレントディレクトリを「MyDrive/try/yolov7」へ移動する~ #codeprettify(){{ cd /content/drive/MyDrive/yolov7 }} /content/drive/MyDrive/yolov7 + ''下記のコマンドで「janken4_dataset」を学習する (yolov7-tiny)''~ #codeprettify(){{ !python train.py --workers 8 --batch-size 32 --data janken4_dataset.yaml --cfg cfg/training/yolov7-tiny.yaml --weights 'yolov7-tiny.pt' --name yolov7-tiny_jk4 --hyp data/hyp.scratch.tiny.yaml --epochs 50 --device 0 }} #divregion( - log - '''GoogleColab Tesla T4''') #codeprettify(){{ }} #enddivregion ~ + およそ50分で正常に終了すると、学習結果は「yolov7/runs/train/yolov7-tiny_jk4/」に保存される~ ~ + onnx パッケージをインストールする~ #codeprettify(){{ !pip install onnx }} #divregion( - log - '''GoogleColab Tesla T4''') #codeprettify(){{ }} #enddivregion ~ + 学習結果モデル「runs/train/yolov7-tiny_jk4/weights/best.pt」を onnx 形式に変換する~ #codeprettify(){{ !python export.py --weights runs/train/yolov7-tiny_jk4/weights/best.pt }} #divregion( - log - '''GoogleColab Tesla T4''') #codeprettify(){{ }} #enddivregion ~ + 学習結果 モデルは「yolov7-tiny_jk4/weights」評価指標は「yolov7-tiny_jk4」フォルダ~ ** 更新履歴 [#xb095000] - 2023/02/22 初版~ - 2023/09/10 全面改訂 YOLOv7 カスタムデータによる学習~~ #br * 参考資料 [#z668d3a1] - [[Colaboratory へようこそ>+https://colab.research.google.com/]]~ - [[Google Colaboratoryの無料GPU環境を使ってみた>+https://www.tdi.co.jp/miso/google-colaboratory-gpu]]~ #br