FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


画像の判別がCreateMLでダメだったのでKerasでやってみた

CreateMLで2種類の画像を見分けられなかった話
↑ここでCreateMLだと2種類の画像の分類がうまくいかなかったことを書いた。
転移学習を利用しているCreateMLだと動物の分類などでは枚数がすくなくてもうまくいくが、今回のような課題には向かないのだろう、と思いCreateMLでやるのはあきらめた。

ただ、機械学習で見分けられない課題ではないだろう?と思ったのでKeras(TensorFlowバックエンド)で分類できるか学習させてみた。

NNの構成はCNNを使うMNISTと同じで、二層の畳み込み、ドロップアウトもありのまあサンプルコード通りのものだ。
実際に動かしてみたら(私のMacには)300x300の画像は大きすぎたようで、あらかじめ全ての画像を96x96にリサイズしておいた。

判定対象画像1

判定対象画像2

↑このサイズだとこのような感じ。Excellent!の文字の有無を判定する。

その結果のログがこちら↓

Kerasでの学習結果

Train 99.23%
Test 100.0%

いけるやんかー!!!そうだよな、CNN、お前はできる子や!
5epochだけやったようなログになっているが、この前にもやっているので実際には合計で30epoch弱程度やっている。
次はこの学習結果をmacOSアプリで利用できるようにせねば。






TrueDepthカメラとARKitを使う画面の背景をキューブマッピングで設定する

Objective-CでCGAffineTransformからSCNMatrix4へ変換する
↑ここでも少し触れているが、Appleのサンプルコード Creating Face-Based AR Experiences で自分の顔の位置・姿勢、目と口の開け具合を反映してロボットの顔を表示するのがある。

FaceTracking中のスクショ

↑こういうサンプルアプリ。

このようなアプリの場合、表示にはSCNViewのサブクラスであるARSCNViewクラスが使われてる。
TrueDepth cameraを使うARFaceTrackingConfigurationでsessionをスタートすると画面の背景には自動的に(特に記述する必要もなく)フロントカメラで撮影した画像が画面に表示される。

アプリの用途によってはこのフロントカメラで得た画像は不要で、SceneKitで描いた風景なんかを描いてみたい、という場合もあるかもしれない。
ということで背景をキューブマッピングで指定してみた。
{
    // Create a new scene
    SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/ship.scn”];//—(1)

    // Set the scene to the view
    self.sceneView.scene = scene;//—(2)

    scene.background.contents = @[@"sky_front.png", @"sky_front.png", @"sky_top.png", @"sky_front.png", @"sky_front.png", @"sky_front.png”];//—(3)
}
↑SceneKitを使うプロジェクトを作成すると(1),(2)のような記述がある。
その下に(3)のような6方向の画像を指定する。これは別にARSCNViewとか関係なくSceneKitでは通常の記述だ。
挙動を見たいというだけなので2種類の画像しか使っていないが😁
その結果が↓こちら。


デバイスの方向に従って背景画像が変わっている。

なお、現在のところ上記コードの(3)を(1)と(2)の間に置くとうまく背景が設定できない(そのうち直るかもしれないけど)。


Xcode 10.1
iOS 12.1


フォレストアドベンチャー祖谷へ行った

休暇村讃岐五色台のキャンプ場へ行ってきた
↑香川県五色台でキャンプしたんだけど、その後徳島県にあるフォレストアドベンチャー祖谷(いやと読む)というところへ行った。
祖谷なんて知らなかったし読めもしないところなんだけど、大歩危・小歩危の近く。

フォレストアドベンチャー・祖谷 | 自然共生型アウトドアパーク フォレストアドベンチャー
↑こちらが公式。

これがすごくよかった!小五の息子も大人も楽しめた。
子供の身長が制限をクリアしていれば家族で楽しめると思います。

フォレストアドベンチャー祖谷のアスレチック

↑ここはこういう高所でのアスレチックができるところ。木から木へなんとか渡ったり、ぴゃーっとスライド(ジップスライドと言うのか?)して行ったり。
高い所とはいえ相当安全に気を使っている。最初にスタッフさんから講習があり、器具の使い方やルールを教えてくれる。普通にやってれば物理的に落下できない仕組みになっている。
要所にはスタッフさんがいるのでこれも安心かつ楽ちん。写真撮影OKなので待ってる間に撮影とかしたり、家族をスタッフさんが撮影してくれたり。

キャニオンジップ

↑一番のウリはコースの最後にある360m超のロングジップ(画像は公式サイトより)。これだけ楽しむコースもあるらしい。

スタッフさんによると今までに携帯を落とした人はいない、と言うし私の前の女性も携帯片手で降りていったので、私も!ということで買ったばかりのiPhone XS Maxで撮影しながらロングジップに挑戦してみた。



↑その時の動画がこれ。景色がいいので途中からは単にiPhoneを持ってただけって感じだけど。
風の抵抗の影響などで8割くらいは後ろ向きで到着するそうだ。
景色もよかったけど、iPhoneの光学手ぶれ補正すごくね?と後から感動した。

フォレストアドベンチャー祖谷のコースマップ

↑このように帰りも少し短いけど同じようなジップスライドで帰ってくる(画像は公式サイトより)。


財布を持っていったけど使う場所も時間もないので不要だった。
トイレもすませておくこと。軍手も必要(売ってたけど)。
何か持っていく場合はチャックできるポケットのある服がいい。
それからよごれてもいい服で行きましょう↓





CreateMLで2種類の画像を見分けられなかった話

ポケモンGOでエクセレントスローの瞬間って気持ちいいよね?



↑こういうの。カーブスローでエクセレントって気持ちいい!
なので、その部分ばかりを集めた動画を作成しようと数ヶ月かけてたくさんの動画を溜めてる。
そろそろ編集しようと思ったんだけど、結構大量にあるので大変。

そこで、こういう動画の中でExcellent!と表示された瞬間を含む数秒を探し切り取る、というのを自動化しようと思った。

CreateMLを使い、動画内の画像にExcellent!と表示されてるか否かを判断するするよう学習させたい。

そのためにはまず学習用の画像が必要、ということでサイズが300x300の画像をそれぞれ651枚ずつの計1,302枚を用意した(※1)。

Excellentがない場合のサンプル画像

↑一つはExcellent!という文字がない画像。

Excellentがない場合のサンプル画像概要
↑動画内にはいろんな場面が含まれる。

Excellentがある場合のサンプル画像

↑もう一つはExcellent!という文字を明らかに(人間の目で見て)含む画像。

Excellentがある場合のサンプル画像概要
↑先ほどのほどいろいろあるわけではないが、時間帯やタイミングなどでいろんな画像になる。

この二つを判別させたいわけだ。


Create MLで学習させmlmodelファイルを得る
↑これと同様にして学習させる。今回の場合はCrop, Expose, Noiseにチェックを入れた↓

CreateMLでの初期設定スクショ

学習開始から2時間28分で学習完了。

CreateMLでの学習結果

↑その結果がこれ。

Training 72%
Validation 68%
別途用意したテストデータ(40枚)に対して55%て、、、
全然ダメじゃないか、、、😩


データ数不足?いや、動物を見分けるのにもっと少ないサンプルでできてる例(※2)がある。
CropやExposeを有効にしてるからもっと学習したらよくなるんじゃないの?などと考えたりしていたのだが、、、

Create MLでMNISTの分類器を作ってみた - Galapagos Blog
↑こちらを読んでると、今回の課題自体がCreateMLに向いていないのか?という気がする。CreateMLは転移学習らしいので、形状を見分けるような課題に対してはいい結果がでるが、今回のような文字の有無を見分けるという課題にはそぐわないのかもしれない。



※1 機械学習用の画像作成のために、動画のある場所からある場所までで画像を作成するmacOSアプリを自作した。

機械学習用画像の作成ツールスクショ

↑こんな感じで1がExcellent!が出ているところで、0は出ていないところ(画像は撮影用なのでずれてるけど)。動画の全体の中でExcellent!が表示されている時間は短いので、0に相当する部分は間引いて両方の枚数が同じになるようにしている。


※2 参考サイト
Create MLで簡単に機械学習を体験する - Qiita
CreateMLを使ってさらっと画像認識させてみた - Qiita







休暇村讃岐五色台のキャンプ場へ行ってきた

11月の三連休にキャンプに行って来た。

キャンプ場 | 休暇村讃岐五色台【公式】
↑行ったのは香川県の五色台というところにある休暇村のキャンプ場。


【キャンプ場についてのメモ】

11月下旬なので閑散としているのだろうと思ったら7割くらいは埋まってた気がする。
キャンプ場からは木があるためいい景色は全く見えなかった。

今回は電気・水道が付いたオートキャンプ場を選択。
お隣との間には木があったので広く感じた。

タイルを敷いてるテントサイト

↑珍しいことに地面の一部にタイルっぽいのが敷いてあるところがあった。焚き火とかはここで、ということだと思う。

ゴミを捨てるところあり。要分別。灰を捨てるところもあった。
トイレは和式。季節的に虫はいなかった。

休暇村の本館までは1kmほどと聞いたが歩いていくのは大変そう。お風呂に入りには車で行った。

休暇村讃岐五色台からの眺め

↑本館へ行くとこのようないい眺め。

休暇村のウエルカムうどん出汁の看板

↑本館にウエルカムうどん出汁、というのがあったので飲んだらすごくおいしかった。




【私的メモ】

今回は寒さ対策でテントに敷くための大きい段ボール、および断熱シート(厚さ3ミリ程度だが)を持参。これらを通常のマットの下に敷いた。そのおかげか地面からの冷えは感じなかった。
さらにごつい服を着てたのでシュラフの中では寝返りを打ちにくく、ぐっすりとは眠れなかった。冬用のシュラフが必要なんだろうな。

夕食の味噌鍋

↑夕食はコチュジャン入りの味噌鍋。麺には現地調達した讃岐うどんを入れたけど、さすがにコシなんてなかった。寒いところだったので食べやすさを優先したメニューにして正解だった。

コールマンのホットサンドメーカーで作ったホットサンド

↑今回の初アイテム、ホットサンドメーカーで作ったホットサンド(朝食)。
焚き火の火で大丈夫かな?と思ったがススっぽくなることもなくおいしくできた。
食料を調達した香川県のマルナカには8枚切りの食パンがなく6枚切りので作ったがなんとかなった。


テント設営し、ある程度夕飯の準備をしておいてお風呂に入りに本館へ行ったところで、結婚指輪がなくなっていることに気付いた。キャンプサイトで準備中になくしたのか?頑張って探したが見つからず。しばらく警察の拾得物検索サイトをチェックすることになりそう。




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad