OCI の Data Labeling + Vision を使ってアフリカ動物を見分けてみた 

## OCI Visionサービスについて
画像をアップロードして、画像内のオブジェクトを検出して分類することができます。
コンソール、REST API、SDK、または CLIを使用してアクセス可能です。
事前学習済みモデルも使用できるのですが、今回は**せっかくなので私が南アフリカで撮影した動物がなにかカスタムモデルVisionで見極めて**もらおうと思います。


## まずはデータのラベル付け
今回使用するデータセットは、
- アフリカの野生動物
- https://www.kaggle.com/datasets/biancaferreira/african-wildlife/data
をダウンロードします。
↓のようなデータ構造になっているので、Zebra、RhinoとBuffeloを使用します。
```
├─archive             
 ├─zebra            
 ├─rhino           
 └─buffelo  
```

あらかじめObject Storageに10枚ずつそれぞれのデータを格納します。
```
├─animal_detect                [バケットの名前]  
 ├─zebra            
 ├─rhino           
 └─buffelo  
```
そして、Data Labeling のトップページから、データセットの作成を押し、以下のように入力し、データセットを作成します。

データセット作成時の登録事項としては、
- 名前: animal_detect
- データセット・フォーマット: イメージ
- 注釈クラス: 単一ラベル
- オブジェクト・ストレージから選択
- コンパートメント: 自身のコンパートメント
- バケット: animal_detect
- ラベル・セット: zebra,zebra,buffelo 

と入力していきます。

バケット名まで入力すると、どんなファイルが選択されているか確認できるので便利！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/ecef1eff-2ad3-cab4-8a06-07b653b807da.png)

30枚程度なら3分ほどで登録が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/8a683944-3310-4fbe-870b-bda6cf4c2d18.png)
あとはひたすら地道にラベルを追加していきます。

～しばしの動物鑑賞～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/e7dc34ec-ae68-1341-5087-a9327342eb85.png)
～めっちゃ向かって来とる～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/4e72827a-39d8-7318-eec1-cdbae2385de5.png)

意外と3分ほどで早くできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/b75ef080-2f8a-373f-4f5c-10ecd2e5ffdb.png)

## カスタムモデルの構築
それでは　AI・開発者サービス＞Vision＞カスタムモデル構築　のページに進みます。
プロジェクトの作成からAnimal_detectという名前で。以下をクリックしていきます。
- タイプ: イメージ分類
- トレーニング・データ: 既存のデータセットの選択
- データソース: データ・ラベリング・サービス
- データセット: Animal_detect
- モデル表示名: Animal_detect-model
- トレーニング期間: 推奨トレーニング

training期間、結構差がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/36ecb4c9-5add-bb99-856e-c447c8705424.png)

[ドキュメント](https://docs.oracle.com/en-us/iaas/Content/vision/using/custom_model_build.htm#custom_model_build) によると、最大トレーニング期間を任意で決められるオプションもあるらしいです。

- 推奨トレーニング：最適なモデルを作成するためにトレーニング期間を自動的に選択します。トレーニングには最大 24 時間かかる場合があります。
- クイックトレーニング：このオプションでは、完全に最適化されていないモデルが生成されますが、約 1 時間で利用可能になります。
- カスタム：このオプションを使用すると、最大トレーニング期間 (時間単位) を独自に設定できます。

ちゃんとモデルの作成の進捗状況を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/9b0ec547-b6b5-d187-7db3-af28397a8267.png)

### モデル完成
20分ほどでモデル作成が完了したようです。
地味に初モデル作成。。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/63afc2ac-bd0c-94c3-abe7-bb06b1db1300.png)

## 早速コンソールで使ってみる！
作成したモデル名をクリックして下にスクロールすると、分析ボタンが増えています！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/545b7846-3b6f-552e-94dc-344977f2c0ee.png)

恐る恐る、バッファローの画像をアップロードしてみる。。。

![361.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/48806e6b-3826-4002-7731-9869a6ed2aac.jpeg)

レスポンスを確認してみると、
```
{
  "imageObjects": null,
  "labels": [
    {
      "name": "buffero",
      "confidence": 0.36607397
    },
    {
      "name": "Zebra",
      "confidence": 0.31934267
    },
    {
      "name": "rhino",
      "confidence": 0.31458336
    }
  ],
```
どうやらバッファローの可能性が36％(笑)と一番高いと言ってます。

↓ああ～惜しい！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/1de55e4d-116d-ff04-9467-69e0213354b7.png)

もうちょっと学習用のデータセットを増やせばよかったと思います。（懺悔）
## おわりに
1時間程度で簡単にデータのラベリングとイメージ分類用のモデルを作ることができました。
OCI AI servicesはどれも直感的で使いやすく、私のような初心者にも優しくてありがたいです。

## 参考になりました
OCI Vision と Data Labeling でサクッと画像分類：https://qiita.com/shukawam/items/7fb5b7df843bff856f9c