Sony Neural Network Consoleで唐揚げとトイプードルを判別するAIを作る

# 概要
唐揚げとトイプードルを見間違えた経験はありませんか？  
今回はSONYの **Neural Network Console** を使って、唐揚げとトイプードルを判別するAIを作成する方法をご紹介します！ 

## 概要

この記事では以下の内容をカバーします：
1. データセットの準備方法  
2. Neural Network Consoleでのモデル構築  
3. モデルのトレーニングと評価  
4. 判別AIの実行と結果の確認  

---

## 1. データセットの準備

まずはAIをトレーニングするためのデータセットを用意します。



### 画像データの収集
今回はGoogleで唐揚げとトイプードルを検索を行い、それぞれの画像データを20枚ずつ収集します。

### フォルダ構成
以下のように画像をフォルダに整理してください：
```bash
dataset/
├── 0/ # トイプードルの画像を保存
│ ├── img1.jpg 
│ ├── img2.jpg 
├── 1/ # 唐揚げの画像を保存 
│ ├── img1.jpg 
│ ├── img2.jpg
```
### 注意点
- 各フォルダに最低でも10枚以上の画像を用意してください。多いほど精度が上がります
- 画像サイズがバラバラでも大丈夫です。Neural Network Console側で画像サイズをトリミングしたり、

## 2. データセットの登録
1. Neural Network Consoleを起動します。



<div style="text-align:center;"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/523c512c-f4d2-e289-c340-43a61139f6e4.png" width="600" style="height:auto;"> </div>



2.まずはメニューバー右側にある「プロジェクトに名前を付けて保存」からプロジェクトの名前を保存します。それから 左メニューの「Dataset」タブをクリックします。



<div style="text-align:center;"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/f07e7317-ac5e-d6b2-2860-5a1b041489b6.png" width="600" style="height:auto;"> </div>


2. データセットタブ下にある「データセットを開く」（右上の方向を指す矢印の記号）を選択し、 「データセットを作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/c483db1c-2f92-95ac-7ca5-9db2cae6ef9b.png)



今回は画像分類を行うので、「画像分類」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/30280256-4b3a-b506-40be-a6e13427b517.png)
2. 新しいウィンドウが開いたら、事前に用意した dataset/ フォルダを選択してください。
フォルダ内には複数の画像が含まれており、各フォルダがクラス（カテゴリ）を表しています。例えば、トイプードルの画像は「0」、唐揚げの画像は「1」というように、自動的にラベル分けされます。
データセットをAIが効率よく扱えるように以下の前処理を行います：

- 画像サイズの統一: サイズが異なる画像を、中心部分を切り抜いてトリミングし、50×50ピクセルにリサイズします。
- 画像の色設定: 画像をカラー（RGB形式）として処理します。
- 
これにより、モデルの学習が効率的になり、構築時間を短縮できることがあります。
また、データセットは以下の割合で分割します：


- 訓練データ (Training Data): 全体の80%を使用
- テストデータ (Test Data): 残りの20%を使用


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/5bca6706-112a-e493-5b30-d77288f752c5.png)



# 2. Neural Network Consoleでのモデル構築

### モデル構築

1. 以下の構成でネットワークを組みます：
RGB画像を入力として、2クラス分類を行う単純な畳み込みニューラルネットワーク (CNN) です。畳み込み + プーリング層で特徴を抽出し、全結合層 + ソフトマックスで分類タスクを行っています。
- 画像データの形状は（3, 50, 50）
    - チャンネル数 (3): RGB画像を表す3つのカラーチャンネル。
    - 高さと幅 (50×50): 入力画像のサイズ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/bb7bfbf2-cf04-dbbc-71df-521f581b8353.png)



### 他の設定
他にもメニューバー右上にある「コンフィグ」を選択し、以下のように設定します。
- バッチサイズ: 2
- エポック数: 100
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/ea6f8d72-98ba-a450-ed74-3c285683df0e.png)


## 学習の実行

「Run」ボタンをクリックして学習を開始します。
進行状況がグラフとして表示されるので、精度と損失の変化を確認することができます。




![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/1c138b94-b78b-ce8e-b57e-f636e2a14c2b.png)
## 評価の実行（モデルの評価）
テストデータを使ってモデルを評価します。
Confusion Matrix（混同行列） を確認し、唐揚げとトイプードルの分類精度をチェックします。
「混合行列」のタブを選択すると、評価データセットの分類精度やモデルの評価を行うことができます。
検証データの分類精度は、71.4 %程度にとどまりました。
<div style="text-align:center;"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/814602f5-abb6-8846-2934-27c0a436410a.png" width="600" style="height:auto;"> </div>
「出力結果」のタブから、どの画像が誤って分類されたかを確認します。1つ目のトイプードルの画像のように画素数が少なくても比較的わかりやすいトイプードルの画像は分類精度が良いことが分かります。しかし７枚目のような色や模様が一見トイプードルに錯覚してしまうような画像は精度が非常に悪いことがわかりました。

<div style="text-align:center;"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/3d438e14-368e-e92d-18f6-68af3cf0598c.png" width="600" style="height:auto;"> </div>

<div style="text-align:center;"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/59f6f707-68d2-9fcb-2758-3e3bed9974b7.png" width="600" style="height:auto;"> </div>







# おわりに
今回はSony Neural Network Consoleを用いて唐揚げとトイプードルの画像を判別する画像分類モデルを作成しました。人間でも見間違えそうな画像はまだまだ分類が難しいことがわかりました。ただ、学習枚数が多ければ当然分類精度があがるといえるでしょう。次回はカメラで撮像した画像を用いてモデルを構築したいと思います。