ぼくの実装した最弱のディープラーニング

8月の頭からディープラーニングを実装していたのを、先日、プレゼンしてきました。
プログラマのための数学勉強会@福岡 - connpass



GPU対応したり、ドロップアウトとかミニバッチとかいろいろ実装して、結構つよくなってます。
ちゃんと学習してくれないこと以外は。


ソースはこんな感じになってきています。
https://github.com/kishida/neuralnet/tree/CorrectOperationAsCCN


GPU対応にはaparapiを使っています。JavaGPUコードが書けるスグレモノです。
aparapi - API for data parallel Java. Allows suitable code to be executed on GPU via OpenCL. - Google Project Hosting
けど、バグがあってはまってたので、修正してパッチ投げてます。
Add parenthesis around conditional expression by kishida · Pull Request #10 · aparapi/aparapi
最近停滞してるっぽくて、取り込まれる気がしない。
※ 9/9 取り込まれました!


参考文献としては、とりあえずこの本。ディープラーニングについて、だいたいわかります。基本的には、この本を参考にして実装しました。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

細かいパラメータやニューラルネットワークの構成などは、ニューラルネットが流行りだすきかっけになった、この論文を参考にしてます。
ImageNet Classification with Deep Convolutional Neural Networks
このふたつを読むと、実装に必要な情報はだいたい揃います。


学習用の画像には、CALTECH256というのを使っています。
http://www.vision.caltech.edu/Image_Datasets/Caltech256/
※ 9/9追記 カテゴリごとの画像数が、80枚だったり700枚だったり、偏ってるので注意


学習結果を保存できるようになったり、ニューラルネットの構成をJSONで記述できるようになったり、だいぶ まっとうなフレームワークになってきた気がします。

畳み込みニューラルネット、失敗

最近流行りのディープラーニングなるものを実装しようと思ってます。
いまやろうとしてるのは、画像認識のための畳み込みニューラルネット(CNN)です。
一応、コードを書いてみるには書いてみたんですけど、失敗。
下のノイズっぽいのが一段目のフィルタ群なんですが、画像を一回学習させただけで白く発散してます。


なんか、数式を勘違いしてるんだと思うんで、もう一回、本を読み直しです。
この本、とりあえず実装に必要なことは全部書いてあると思います。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

けどなんか、レビューで誤植があるっぽいこと書いてありますね。確認してみよう。


今のところのコードはこんな感じです。
https://github.com/kishida/neuralnet/blob/69f789f474534323ecee0ca169000f3715ee3bc2/src/main/java/kishida/imagefiltering/ConvolutionalNet.java

パーセプトロンからSVMでの画像認識まで、機械学習エントリのまとめ

なんかJJUGナイトセミナーで機械学習をやるっぽくて、定員100人が40人キャンセル待ちとかになってますね。
【東京】JJUG ナイト・セミナー「機械学習・自然言語処理特集!」12/17(水)開催 - 日本Javaユーザーグループ | Doorkeeper
ということで、予習用だか復習(になるかわかんないけど)用に、2008年になんか機械学習をやってたときのエントリをまとめてみます。


今でこそ機械学習はなんかもりあがってるけど、2008年にぼくがやってたとき「ところで機械学習やってなんになるの?」ってよく言われてました。ぼくも「いや、なんかそこに機械学習ってものがあるから実装してる」みたいな答えをしてた気がします。特に目的はありませんでした。
たまたま サポートベクターマシン入門 という本を見かけて、なんか実装してみたくなっただけです。
変な力がありあまってたっぽい。

続きを読む

ビール画像判定プログラムできたよ!

ヴェルティンス ピルスナー

画像同士の距離が取れるなら、ビール画像の判定プログラムもできるよね。
ってことで、手持ちの画像をSVMに食わせてみて、ビール画像を判定させてみました。


誤判別?なにそれ


ソースはこんな感じ。
ビールの画像はbeerがついたフォルダかファイル名にしてください。

続きを読む

画像同士の距離がとれたら近い画像マップができるよね

鬼太郎ビール ヴァイツェン

CCVで画像同士の距離が取れたってことは、画像同士どれが近いかというマップができるよね。


ソースはこんな感じで

続きを読む

Color Coherence Vectorで画像検索を作ってみた

デリリウム

ということで、昨日のColor Coherence Vector使って、似た画像を検索するプログラム作ってみた。
ちょっと簡単に似た画像を求めたいときには、なかなかよさげ。
左側がキーになる画像



ソースはこんな感じで。最初のパスには、画像のフォルダを入れてください。
画像のパスをテキストフィールドに入力して「検索」ボタンで探します。

続きを読む

Color Coherence VectorをJavaで実装してみた

アンデックス ヴァイスビア

こちらで紹介されてたアルゴリズムJavaで実装してみました。
Color Coherence Vectorを実装してみた


詳しい説明はあちらを見てもらうとして、前処理をした画像はこんな感じ


結果はこんな感じ。ここでは、横を200ドットに制限して、20ドットを閾値にαとβを計算してます。

0 ( 33, 123)
1 ( 2, 110)
4 ( 0, 17)
5 ( 12, 78)
16 ( 2, 64)
17 ( 0, 3)
20 ( 11, 52)
21 ( 44, 236)
22 ( 7, 200)
25 ( 0, 3)
26 ( 10, 184)
37 ( 0, 14)
38 ( 0, 26)
41 ( 0, 3)
42 ( 50, 211)
43 ( 14, 80)
46 ( 0, 1)
47 ( 6, 68)
58 ( 0, 18)
59 ( 0, 28)
62 ( 0, 5)
63 ( 7, 119)


これを使って画像間の距離を求めると、似たような画像が検出できるかも、ってわけですね。
ソースはここから

続きを読む