機械学習に聞いてみるワイシャツとシャツの違い

この記事は[WHITEPLUS Advent Calendar 2016](http://qiita.com/advent-calendar/2016/whiteplus "") 初日になります。

こんにちは、ホワイトプラスではもっぱらCTO兼CFO（Chief Factory Officer）を担当している @exmeat です。

Chief Factory Officer...和名にすると工場長でしょうか？
創業から、ビジネスプロセスの構築〜システム化を一手にやってきたので、
ついた冠ですが、社内ではCFOと呼ばれることが稀にある今日このごろです。

#ところで
弊社では、オンラインクリーニングの[リネット](https://www.lenet.jp/)、
オンライントランクルームの[HIROIE](http://www.hiroie.jp/)と、
ライフスタイルドメインでの事業展開を行っております。

共に既存の産業の非効率な部分を効率化し、
お客様にバリューを返していくという割とエンジニア冥利に尽きる事業ドメインです。

が、当然そんな簡単に効率化が出来れば過去に誰かがやっていたでしょうし、
技術的な壁も同時に高い事業ドメインでもあります。

#で、何が難しいのか
今回は主にオンラインクリーニングの[リネット](https://www.lenet.jp/)寄りの話ですが、
扱っている商品が非定型なため、様々なところで壁が立ちはだかります。

個人的にワイシャツ・シャツ問題と命名していますが、例えば以下の画像
どこまでがワイシャツでどこからがシャツなのか見る人によって分かれるかと思います。
更に言うと、そもそもワイシャツとシャツの定義って・・・なんて声も出てきそうですね。

![0001208031-001d.jpg (10.2 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/caa76a82-ab36-4840-9479-9a18104e7914.jpg)
![hmprod.jpeg (17.6 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/0cd712ee-f25f-4b7d-a0a0-d15322f57a62.jpeg)
![Mzk6SYsRYX_mountain_shirt-plaid_flannel_0_original.jpg (13.3 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/b25fa8ea-943b-42b8-8467-b2a7d0b09318.jpg)

こういった非定型な情報の判定を効率的に行うために[RFID](https://www.wantedly.com/companies/whiteplus/post_articles/39283)を始めとする、
Webからは少し離れた技術開発を弊社では行いつつ、
話題の機械学習も積極的に取り入れようとしています。

初日はワイシャツ・シャツ問題を機械学習が解決してくれるのか？について少し書いてみようかと思います。

#機械学習の可能性について
機械学習では、ワイシャツ・シャツ問題を現状どの程度解決してくれるのかを試してみましょう。

まずは、Microsoft社の[Computer Vision API](https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/)を試してみます。

##Computer Vision API
利用方法などは他の記事にお任せするとしてとりあえず無料で試せますので敷居は相当低いです。
上記の3つの画像をAPI経由で投げてみましょう。
※実際のレスポンス中、__信頼性が0.9以上のものだけを記載__しています。

![0001208031-001d.jpg (10.2 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/caa76a82-ab36-4840-9479-9a18104e7914.jpg)

```
[
   {
        "confidence": 0.9922428727149963, 
        "name": "clothing"
    }, 
    {
        "confidence": 0.9841576814651489, 
        "name": "man"
    }
]
```

![hmprod.jpeg (17.6 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/0cd712ee-f25f-4b7d-a0a0-d15322f57a62.jpeg)

```
[
    {
        "confidence": 0.9938720464706421, 
        "name": "clothing"
    }
]
```

![Mzk6SYsRYX_mountain_shirt-plaid_flannel_0_original.jpg (13.3 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/b25fa8ea-943b-42b8-8467-b2a7d0b09318.jpg)

```
[
    {
        "confidence": 0.9974855184555054, 
        "name": "clothing"
    }
]
```

3枚ともclothing（= 衣類）の判定でしたので、通常は充分に利用価値があるかと思いますが、
もう一段、二段掘り下げたクラスタリングをして欲しい！というニッチなニーズには、
足りないことが分かります。


##CLOUD VISION API
続いてGoogle社が提供している[CLOUD VISION API](https://cloud.google.com/vision/)を試してみます。
利用方法などは同じく他の記事にお任せするとして同じく無料で試せますので敷居は相当低いです。
上記の3つの画像をAPI経由で投げてみましょう。

![0001208031-001d.jpg (10.2 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/caa76a82-ab36-4840-9479-9a18104e7914.jpg)

```
[
  {
    "mid": "/m/06hwcd",
    "description": "dress shirt",
    "score": 0.95226127
  },
  {
    "mid": "/m/09j2d",
    "description": "clothing",
    "score": 0.940119
  },
  {
    "mid": "/m/062581",
    "description": "sleeve",
    "score": 0.90379345
  }
]
```

![hmprod.jpeg (17.6 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/0cd712ee-f25f-4b7d-a0a0-d15322f57a62.jpeg)

```
[
  {
    "mid": "/m/09j2d",
    "description": "clothing",
    "score": 0.93291253
  },
  {
    "mid": "/m/01g5v",
    "description": "blue",
    "score": 0.91791064
  },
  {
    "mid": "/m/062581",
    "description": "sleeve",
    "score": 0.91265881
  }
]
```

![Mzk6SYsRYX_mountain_shirt-plaid_flannel_0_original.jpg (13.3 kB)](https://img.esa.io/uploads/production/attachments/2352/2016/11/28/7062/b25fa8ea-943b-42b8-8467-b2a7d0b09318.jpg)

```
[
  {
    "mid": "/m/09j2d",
    "description": "clothing",
    "score": 0.92525727
  },
  {
    "mid": "/m/062581",
    "description": "sleeve",
    "score": 0.92079294
  }
]
```

同じく3枚ともclothing（=衣類）の判定を返してくれました。
また、モノによりdress shirtと判定してくれていますが、精度に当然ばらつきがあり、
弊社で利用出来る水準のレスポンスではありませんでした。

#まとめ
当然と言えば当然ですが、Microsoft社やGoogle社のAPIの思想が弊社のニーズとは異なることが良くわかりました。
弊社のようなニッチなニーズの場合、自社でモデルを構築していく必要があります。

それでもメタな画像判定や公序良俗に反する判定などは精度が高いと聞きますので、
ニーズによって提供されているAPIで事足りることもあるかと思います。

<hr> 

明日は弊社が誇る電気回路からフロントエンドまでイケるエンジニアの @ knakamigawa による「Kotlinを使ってAndroidの開発を始めてみる」です。

#ホワイトプラスではエンジニアを募集しています
ホワイトプラスでは、[技術的な壁なんてオレがぶっ壊してやるぜ！という技術で事業に貢献したいエンジニアを募集](https://www.wantedly.com/projects/69257)しております。