ディープラーニング入門　～最短の物体検出体験～

# 1. はじめに
　ディープラーニング、あるいはAIとの総称で、写真に写っているものが何かを特定する技術が世界中で活躍しています。先日訪問した水族館では、スマホにアプリを登録して起動し、泳いでいる魚をカメラで捉えると、その魚の説明をしてくれるアプリを公開していました。Single shot multi-box detector(SSD)、あるいはYou only look once(YOLO)と名付けられたニューラルネットワークを利用した一例です。これに関するサイト記事もたくさんアップされていますが、ここではこの技術を実際に体験する最短の手順について紹介します。
# 2. Google Colaboratoryの起動
　Google Colaboratory（通称グーグルコラボ、短縮してコラボ）を既に使ったことがある人は、この章を飛ばして3章から見て下さい。そうでない人には、コラボの起動方法をここで説明します。まずは次のリンクからコラボを立ち上げて下さい。
https://colab.research.google.com/?hl=ja
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/b1c095c9-20a4-7c0c-4425-cda03b520fa9.png)
　まずはログインをして下さい。もちろんGoogleアカウントが必要ですので、持っていない方は次のサイト記事などを参考にして作成して下さい。
Google アカウントの作成
https://support.google.com/accounts/answer/27441?hl=ja&msclkid=87679f13afa211ecbd0751ca8ded7ff0
　ログイン後は次のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/419215c5-6a82-3161-76fd-ab59c9b990e7.png)
　ここで、右下の「ノートブックを新規作成」を押します。”ノートブック”というのは、MicrosoftやAdobeのアプリではプロジェクトに相当するものだと思えばよいと思います。新規作成すると、次のような画面が現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/01d18dc4-0486-5903-4bce-6cc194935ca6.png)
　これでコラボの準備は完了です。
# 3. 物体検出
## 3.1 YOLOのダウンロード
　次のコードを打って実行（黒丸に白字の矢印のアイコンをクリック）します。
```
!git clone https://github.com/ultralytics/yolov5
```
　ダウンロードに成功すれば、つぎのような表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/ba236ff2-d391-ac2c-6c97-1925099981c7.png)
　続いて、左端に縦に並んでいるアイコンの一番下のフォルダ型のアイコンをクリックします。左側にフォルダ構成が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/089204eb-183d-d83b-137b-edcbb5d80e77.png)
## 3.2 画像のアップロード
　ここから"yolov5"→"data"→"images"とフォルダを展開していきます（フォルダ名の左にある黒い矢印をクリックしていく）。これでimagesフォルダの中身が見えている状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/5621ebdf-852c-13ca-1b11-d3edb0d1a2da.png)
　既に、bus.jpgとzidane.jpgの2画像が用意されていますが、物体検出を体験してもらうために、自身で撮影した画像をここにアップロードして下さい。例えば、次のような画像を用意します（ファイル名は何でも大丈夫ですが、ここではtsubuan640.jpegとしています。念のため、ファイル名に全角文字は使わない方がいいです）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/5fe22417-102c-ce92-ee43-a03620358969.png)
　ダウンロードしたプログラムとデータは、予め下記リスト中の物体が検知できるように準備されています。従って、撮影する画像は、これらのうちの何れかが写るように撮影して下さい。なお、対象が複数、または種類の異なる対象が複数のものが同時に写っている画像の方が、技術の秀逸さを実感できます。
“person”, “bicycle”, “car”, “motorcycle”, “airplane”, “bus”, “train”, “truck”, “boat”, “traffic light”, “fire hydrant”, “stop sign”, “parking meter”, “bench”, “bird”, “cat”, “dog”, “horse”, “sheep”, “cow”, “elephant”, “bear”, “zebra”, “giraffe”, “backpack”, “umbrella”, “handbag”, “tie”, “suitcase”, “frisbee”, “skis”, “snowboard”, “sports ball”, “kite”, “baseball bat”, “baseball glove”, “skateboard”, “surfboard”, “tennis racket”, “bottle”, “wine glass”, “cup”, “fork”, “knife”, “spoon”, “bowl”, “banana”, “apple”, “sandwich”, “orange”, “broccoli”, “carrot”, “hot dog”, “pizza”, “donut”, “cake”, “chair”, “couch”, “potted plant”, “bed”, “dining table”, “toilet”, “tv”, “laptop”, “mouse”, “remote”, “keyboard”, “cell phone”, “microwave”, “oven”, “toaster”, “sink”, “refrigerator”, “book”, “clock”, “vase”, “scissors”, “teddy bear”, “hair drier”, “toothbrush”
　画像を用意したら、コラボのimagesフォルダにマウスカーソルを載せると現れる、縦に3つの・をマウスで右クリックし、出てきたポップアップメニューから「アップロード」を選択します。するとファイル選択のウィンドウが出ますので、これを操作して画像を選択して「開く」をクリックします。下記のようなメッセージが出ますが、気にせずにOKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/57039617-0ffb-48fb-3053-bffa29d70063.png)
　画像のアップロードに成功すると、つぎのように表示されます（imagesの下にtsubuan640.jpegが追加されているのが確認できます）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/445a4c0a-fda6-b330-ce27-2130e8acb66b.png)
## 3.3 ライブラリのインストール
　プログラムの実行前準備として、ultralyticsというライブラリをインストールします。「＋コード」と書かれたアイコンをクリックし、新しい領域に次のコードを入力して実行して下さい。
```
pip install ultralytics
```
## 3.4 検出の実行
　まず、フォルダを移動します。「＋コード」と書かれたアイコンをクリックし、新しい領域に次のコードを入力して実行させます。
```
cd yolov5
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/647df7ec-134c-1d1e-94a7-a09b95087a97.png)
　さらに「＋コード」をクリックし、新しい領域に次のコードを入力して実行させます。
```
!python detect.py --source data/images --weights yolov5x.pt --conf 0.50
```
　するとimagesフォルダ内の画像に対して物体検出が行われ、成功すれば次のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/3b2038cb-c485-6371-f16b-4b229699a07e.png)
## 3.5 検出結果の確認
　コラボのフォルダを"runs"→"detect"→"exp*"（*は検出処理の実行回数）と辿ると、次のように検出結果の出力が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/482c69be-c9f0-890c-91d9-4c6459df31ae.png)
　ここで、アップロードした画像と同じファイル名の画像をダブルクリックすると、検出結果が画面右に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/4fff32ad-9d38-9a45-f277-f0b4763ba0dc.png)
　catとpersonが検出されました。それぞれについている実数は、検出の確からしさを示しています（0.0～1.0、1.0が最も高い）。

# 4. おわりに
　ディープラーニングを使った物体検出の最短の体験手順について書きました。予め用意された検出対象物体以外の物や動物（例えばフクロウ）を検出対象にすることも可能ですので、それについては別記事を参照して下さい。