【YOLOXで自前のアプリを作る。その2】- GoogleColaboratoryでYOLOXをとりあえず試す。

画像に写っているものを検出する「物体検出」にはR-CNNやSSD,YOLOといったディープラーニングを用いた手法があります。
なかでもYOLOは処理速度が速く精度も高いといわれています。

このYOLOにはいくつかバージョンがあるのですが、今回は最新バージョンであるYOLOXをGoogleColaboratoryで試す方法について記載していこうと思います。

最終的には自分で用意した画像から学習データを作成して、そのデータでYOLOXを学習させ自作のPythonアプリに組み込むところまでやろうと思います。
・[【YOLOXで自前のアプリを作る。その1】- YOLOXで学習させるための、COCO形式の自前データセットを作成する。](https://qiita.com/shigeharu_shibahata/items/f4ac1823c1172034e0fc)
・【YOLOXで自前のアプリを作る。その2】- GoogleColaboratoryでYOLOXをとりあえず試す。 ← イマココ
・[【YOLOXで自前のアプリを作る。その3】- GoogleColaboratoryでYOLOXの学習を行う。](https://qiita.com/shigeharu_shibahata/items/9d4f44c85b475db0d8a2)
・【YOLOXで自前のアプリを作る。その4】- YOLOXを自作のアプリに組み込む。

【参考】
・[GitHub -  Megvii-BaseDetection/YOLOX](https://github.com/Megvii-BaseDetection/YOLOX)
・[【物体検出】YOLOXまとめ｜第1回：導入からチュートリアルまで](https://tt-tsukumochi.com/archives/287)

# 環境
・GoogleColaboratory

# 流れ
* GoogleColaboratoryで新規プロジェクトを作成
* GoogleColaboratoryでYOLOXの環境構築をする。
* YOLOXのデモを試す。

# GoogleColaboratoryで新規プロジェクトを作成
[こちら](https://colab.research.google.com/?hl=ja)からGoogleColaboratoryを開きます。
`ノートブックを新規作成`を押してノートを作成します。
![2022062916383300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396681/3aa61c46-4c85-ae73-8e36-47458eb53af6.png)
そうしたらとりあえず左上の`Untiled.ipynb`と書いてあるところをクリックして任意のノート名に変更しておきましょう。
![2022062916395100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396681/821befd2-6fc1-3838-a74f-2637804d5fe4.png)
GPUを使うので忘れずにメニューバーの`ランタイム`から`ランタイムのタイプを変更`を押して`ハードウェアアクセラレータ`を`GPU`に変更しましょう。
![2022062916582300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396681/9d3f7158-ea7d-6133-ca44-86819af27370.png)
![2022062916593400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396681/98d460c5-6d07-9bfc-ef65-6905b948682a.png)



# GoogleColaboratoryでYOLOXの環境構築をする。
YOLOXが動くように環境構築を行います。
まずはYOLOXのソースや学習したデータ、出力結果などをGoogleDriveに保存するために、GoogleDriveに接続します。

```python
from google.colab import drive
drive.mount('/content/drive')
```

アカウントの選択やアクセス許可等のポップアップが出ると思いますので許可します。
これで、GoogleColaboratoryからGoogleDriveにアクセスできるようになります。
GoogleDriveのマイドライブへは`/content/drive/MyDrive`でアクセスできます。この`MyDrive/`にYOLOXのソースなどを格納していきます。

次に[公式GitHub](https://github.com/Megvii-BaseDetection/YOLOX)のQuick StartのInstallationを参考に環境構築します。

```python
%cd /content/drive/MyDrive
!git clone https://github.com/Megvii-BaseDetection/YOLOX

%cd /content/drive/MyDrive/YOLOX
!pip install -U pip && pip install -r requirements.txt
!pip install -v -e .
```
# YOLOXのデモを試す。
公式にデモ用のソースが用意されているのでそれを使って試していきます。

デモを実行する前に学習済みの重みデータが必要なのでダウンロードします。
モデルの大きさごとに、
YOLOX-s, YOLOX-m, YOLOX-l, YOLOX-x, YOLOX-Darknet53, YOLOX-Nano, YOLOX-Tiny
といった種類が用意されています。今回はYOLOX-sを使用します。

[公式GitHub](https://github.com/Megvii-BaseDetection/YOLOX)のBenchmarkの表にあるweightsから[YOLOX-sの重みファイル](https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth)をダウンロードして、
GoogleDriveの`YOLOX/`にアップロードしておきます。

アップロードしたら[公式GitHub](https://github.com/Megvii-BaseDetection/YOLOX)のQuick StartのDemoにデモ用のコマンドが用意してありますので、それを参考にデモを実行します。

```python
%cd /content/drive/MyDrive/YOLOX
!python tools/demo.py image -n yolox-s -c ./yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu
```

検出結果は`./YOLOX_outputs/yolox_s/vis_res/`の中にタイムスタンプごとに保存されています。
![dog.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396681/6e24048c-a7e8-d984-448f-05a5272b2a11.jpeg)