CreateMLで人の顔を見分けたい
CreateMLで2種類の画像を見分けられなかった話
↑以前CreateMLで画像内にある文字列の有無を判断させようとしたけどうまくいかなかった、というのをやったが、、、
今回は人間の顔画像を与えて見分けることができるか試してみた。
顔写真を1人あたり学習用に40枚、テスト用に10枚用意した。
画像サイズは300 x 300px以上推奨だが横幅150px程度の小さいのも含む。
6人分のデータを用意し、maxIterations=30、オプションはCrop, Blur, Exposure, Noiseの4つ。学習時間は約31分で結果は、Evaluationが70%程度。
このデータ数、この処理時間でこの成績ならよしとすべきか?
と思いCoreMLでこのモデルを使っていろんな画像を評価してみたところ、、、
なんだか微妙だ、、、

↑例えばテスト用データにあった画像(訓練用ではない!)。
これを評価してみると
サンド富澤 71.5%
となり正解なのだが、、、

↑先ほどの画像に画像処理アプリでノイズを入れてみたら
大島美幸 61.2%
サンド富澤 26.9%
という結果になった。
うーん、このまま行くのは躊躇するなあ。
↓やってて気付いたことなど
1)maxIterationsはデフォで10だが精度がよくなければ倍にしろ、とリファレンスにあるので20にしたら確かに良くなったが30だと20より下がった
2)同じ条件で実行してもやるたびに結果は変わる(データが多い方が安定してるように見えた)
3)オプションのFlipは上下左右反転させるとリファレンスにあった(水平だけが欲しかった)
4)繰り返し評価する場合GUIのMLImageClassifierBuilderを使うよりコード(※1)でMLImageClassifierなどを使った方がラク
5)精度が欲しいならやはりデータの質と量は大事だ
ということで、今はデータセットの質を高めてみようかと考えてる。
※1 コードの場合はこんな感じで。
↓参考サイト
Create ML Tutorial: Getting Started | raywenderlich.com
Create MLで簡単に機械学習を体験する - Qiita
↑以前CreateMLで画像内にある文字列の有無を判断させようとしたけどうまくいかなかった、というのをやったが、、、
今回は人間の顔画像を与えて見分けることができるか試してみた。
顔写真を1人あたり学習用に40枚、テスト用に10枚用意した。
画像サイズは300 x 300px以上推奨だが横幅150px程度の小さいのも含む。
6人分のデータを用意し、maxIterations=30、オプションはCrop, Blur, Exposure, Noiseの4つ。学習時間は約31分で結果は、Evaluationが70%程度。
このデータ数、この処理時間でこの成績ならよしとすべきか?
と思いCoreMLでこのモデルを使っていろんな画像を評価してみたところ、、、
なんだか微妙だ、、、

↑例えばテスト用データにあった画像(訓練用ではない!)。
これを評価してみると
サンド富澤 71.5%
となり正解なのだが、、、

↑先ほどの画像に画像処理アプリでノイズを入れてみたら
大島美幸 61.2%
サンド富澤 26.9%
という結果になった。
うーん、このまま行くのは躊躇するなあ。
↓やってて気付いたことなど
1)maxIterationsはデフォで10だが精度がよくなければ倍にしろ、とリファレンスにあるので20にしたら確かに良くなったが30だと20より下がった
2)同じ条件で実行してもやるたびに結果は変わる(データが多い方が安定してるように見えた)
3)オプションのFlipは上下左右反転させるとリファレンスにあった(水平だけが欲しかった)
4)繰り返し評価する場合GUIのMLImageClassifierBuilderを使うよりコード(※1)でMLImageClassifierなどを使った方がラク
5)精度が欲しいならやはりデータの質と量は大事だ
ということで、今はデータセットの質を高めてみようかと考えてる。
※1 コードの場合はこんな感じで。
import Cocoa
import CreateML
let trainDataPathStr = "/Users/…/train/"
let testDataPathStr = "/Users/…/test/"
let trainDataPath = URL(string: trainDataPathStr)!
let testDataPath = URL(string: testDataPathStr)!
// training
let parameters = MLImageClassifier.ModelParameters(
featureExtractor: .scenePrint(revision: 1),
validationData: nil,
maxIterations: 20,
augmentationOptions:[.crop])
let classifier = try! MLImageClassifier(trainingData: .labeledDirectories(at: trainDataPath) ,
parameters: parameters)
// evaluation
let evaluation = classifier.evaluation(on: .labeledDirectories(at: testDataPath))
let evalAccuracy = (1.0 - evaluation.classificationError) * 100.0
print("Evaluation Accuracy: ", evalAccuracy)
print("Confusion: ", evaluation.confusion)
print("Recall: ", evaluation.precisionRecall)
// save model
let metadata = MLModelMetadata(
author: "Tatsuya",
shortDescription: "ite20,40x6,crop only",
version: "1.0")
let saveFilePathStr = "/Users/…/model/hogeClassifier.mlmodel"
let saveDirectory = URL(fileURLWithPath: saveFilePathStr)
try classifier.write(to: saveDirectory, metadata: metadata)
↓参考サイト
Create ML Tutorial: Getting Started | raywenderlich.com
Create MLで簡単に機械学習を体験する - Qiita
スポンサーサイト
<< CSSのクラスが反映されない TopPage 【ポケモンGO】1週間で50kmを歩いて得たリワード >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1300-44c20115
https://ringsbell.blog.fc2.com/tb.php/1300-44c20115