[機械学習]Create MLでObject Detectionを試してみた[物体検知]

# 今回実装してみたもの
![ダウンロード.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/a3d12b60-17fb-0583-2c2c-713acc019011.gif)

# 準備
今回は冒頭のGifの通りCoinを検知して識別するものを試してみました。
準備するものは
- データ(Jpeg写真)100枚程度
- [RecognizingObjectsInLiveCapture](https://developer.apple.com/documentation/vision/recognizing_objects_in_live_capture)
- [IBM Cloud Annotationsのアカウント(無料)](https://cloud.annotations.ai/login)
- 1円玉〜500円玉
以上です。

※Create MLはXcodeを右クリックでOpen Developer Toolにあるのでそこからmodelを作って下さい。

# 機械学習の大まかな種類
機械学習には
・Image Classification(画像の分類)
・Sound Classification(音の分類)
・Action Classification(動作の分類)
・Object Detection(物体の検知)
などがありますが、今回はObject Detectionの実装、つまり物体の検知をしていきます。

# Objet Detectionとは
Object Detectionとは物体を検知をする事を指しますので”画像のどこになにが写っているか”と言うことを判定することになります。よって”写真”と”位置の情報”が必要となります。
写真はあらかじめ撮影し、フォルダ別に格納します。(フォルダ名＝分類名)今回は硬貨を検知し、識別していきたいので500円〜1円のフォルダと、それぞれの画像の位置情報が必要となります。
→Object Detectionについてより深く知りたい方はこちらをご覧ください。
[Create MLでのオブジェクト検出モデルのトレーニング](https://developer.apple.com/videos/play/wwdc2019/424/)

# 手順
- データを集める。(検知したい写真をとる)
- IBM Cloud Annotations(以下IBMCAとする)を使って集めたデータを分類分け、位置情報を指定してデータセットを作る
- Create MLにIBMCAで作成したファイルを入れてModelを生成する
- Create ML上でTestをしてみる
- Appleのサンプルに入れて試してみる

## 写真をとる(データを用意する)
写真は今回Coinが写った写真を100枚ほど用意しました。
![スクリーンショット 2020-09-26 19.10.21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/6d9bd4b2-e1cd-86e8-ad36-e786753f2c84.jpeg)

写真は
・様々な角度の写真
・大きさも大・中・小の３パターンとしてそれぞれ30枚前後用意
・背景は統一して白とした
## データセットを作る(JSONファイル)
Object Detectionでは写真のみではなくJSONファイルも必要となる(位置情報が必要な為)ので今回は[IBM Cloud Annotationsのアカウント(無料)](https://cloud.annotations.ai/login)を使って作成した。作り方は以下の通りである。

![](https://storage.googleapis.com/zenn-user-upload/uo298il7bcrjf74ymgczu7nbyvmo)
・IBM Cloudを続行するをクリック

![](https://storage.googleapis.com/zenn-user-upload/kwtql24ubrn5792ifmi9lr7rqf97)
・新しいプロジェクトをクリック

![](https://storage.googleapis.com/zenn-user-upload/88qms99ezhil25jv2a5tlpfwg8qn)
・ローカリゼーションをクリック

![](https://storage.googleapis.com/zenn-user-upload/qiwo1o980pge9lzju303tedq8z0b)
・ファイル名を記載し、プロジェクトが立ち上がると写真をD＆Dできるようになるので入れる

![](https://storage.googleapis.com/zenn-user-upload/t0tqt5coy875tptu9a9azcnip8ja)

![](https://storage.googleapis.com/zenn-user-upload/sksyl8cv3qlbbgw7u11vo4q1xk3q)
・Object(今回は硬貨)事にドラッグして囲んでいく
・右側にLabel名を記載できるので記載する

![](https://storage.googleapis.com/zenn-user-upload/qtespvklv9f15ioawrjcd6umkous)
・一度記載したLabel名は左上のダウンリストより選択できるのでCoin事にLabel付すると効率がいい

![](https://storage.googleapis.com/zenn-user-upload/3ikfd7r95isjv004z8oynuswnzmx)
・全ての写真にLabel付し終えた後はFileよりCreate MLで使用できるようにexportする

![](https://storage.googleapis.com/zenn-user-upload/r4sh7mcnlts0w4xr3jhiahgkcd9c)
・このファイルが生成されれば成功

![](https://storage.googleapis.com/zenn-user-upload/blipv7xxskjav0v2tnec747rz289)
・フォルダの中にJSONファイルがあるか確認

## Create MLでModel作成
データセットができたらXcodeを右クリックし、Create MLを立ち上げる
![](https://storage.googleapis.com/zenn-user-upload/yxhenqngmulyiwyuzi7qx6gp1s6o)

object Detectionを選択し、先ほど作成したデータセットのファイルをフォルダ事D＆D
![](https://storage.googleapis.com/zenn-user-upload/5lr6jm95y4372pi3as8aujyemzt6)
Iterationは学習トレーニングを繰り返す回数(だと思います)で多ければ良いってわけではないみたいですが極度に少なくても精度が出ないので甘い場合は少し上げてみて調節してみて下さい。
(今回300、600、1000と試したが変わらなかった。)

学習を終えたらTestし、問題なければModelを取り出します。(D＆Dで取り出せる)
![](https://storage.googleapis.com/zenn-user-upload/jvg772cswow2iuk2tcn49x4db44j)

![](https://storage.googleapis.com/zenn-user-upload/4gqdkqyuo6b4mwj3uei5c153rtc9)

## Recognizing Objects in Live Captureを使って試してみる
後はAppleが提供している[RecognizingObjectsInLiveCapture](https://developer.apple.com/documentation/vision/recognizing_objects_in_live_capture)をダウンロードして開く

![](https://storage.googleapis.com/zenn-user-upload/hxonwfnu2jrs74llwm1w4s7a6uv0)
ここにCreate MLで作ったModelをD＆D

codeはもともとObjectDetectorと言うmodelを読み込んでクロワッサンやバナナ？などを検知して識別するものが入っているので
```swift
guard let modelURL = Bundle.main.url(forResource: "ObjectDetector", withExtension: "mlmodelc")
```
を
```swift
guard let modelURL = Bundle.main.url(forResource: "coindetection", withExtension: "mlmodelc")
```
今回生成したmodel名に書き換えて実装

![](https://storage.googleapis.com/zenn-user-upload/iuqvzho2ydbw27cl7xajr38wtfoi)

大体成功かな？
大体2時間ぐらいでデータセットから実装までできるので是非お試しあれ！
## 最後に
今回はサンプルを使用しましたがせっかくなのでここもSwiftUIで今後作っていくことにチャレンジしていきたいと思います！またその他にも機械学習に関するデータセットの作り方から実装までチャレンジしていきたいと思いますので是非興味あるかたはこちらもチェックしてみて下さい！

Twitter
https://twitter.com/oka_yuuji
note
https://note.com/oka_yuuji

また筆者高校の教職員ですが、技術の習得、研究が大好きです！もし技術的なご依頼や研究に関する事であれば下記にてDMでご連絡下さい。
https://twitter.com/oka_yuuji