クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

画像処理を勉強しよう

「闇の力を秘めし鍵よ」真のイメージを我に示せ!レリーズ

「ぜったい、だいじょうぶだよ。」は本当に無敵の呪文。かえるのクーの助手の「井戸中 聖」(いとなか あきら)です。ほぇぇぇぇぇ~。レリーズ!!(封印解除)

f:id:AssistantOfKoo:20201212140303p:plain

論文「呪文と認証の関係」より

そろそろ手持ちのGPUを買い替える時期になってきました。自分の実験にはGPGPUなんて不要!と思っていましたが、今や大活躍です。新製品(RTX3000系)はcudaコアの数も大幅に増え、搭載メモリも倍増の勢い(っぽいの)で、実験対象もMNISTの手書き数字一択からミニ画像にレベルアップできそうな気がしてきました!!(毎RTX30系の話題をかいており、よっぽど欲しいのだと我ながらに思います)

f:id:AssistantOfKoo:20201212124213p:plain f:id:AssistantOfKoo:20201212124222p:plain
MNIST HandWitten Digits
(28 x 28 モノクロ
DATA:60000+TEST:10000)
   CIFAR-10 Image
(32 x 32 カラー
DATA:50000+TEST:10000)

「星の力を秘めし鍵よ」時代はウェーブレット!

1次元ウェーブレットフィルタは以前勉強して、音に対してのフィルタリング性能、再構築性能を実証できました。(かえるのクーの実験:クーは不在ですが、そろそろ冬眠しているはずです)

数式は相変わらずわかりませんが、しくみをわかってしまえば、ウェーブレット変換はフーリエ変換よりもよっぽど簡単で扱いやすいです。(ウェーブレットをフィルターとして通して成分検出(内積!)し、戻すには成分からウェーブレットを離散的に「加算」して元の波形にするだけです。(掛け算と足し算のみ!行列*1ってすごい!検出成分が周波数特性かつ位相特性です!なんてお手軽!!)上のクーの実験でウェーブレットの凄さにびっくりしました。

「夢の力を秘めし鍵よ」そして多次元ウェーブレットへ

いよいよ2次元ウェーブレットフィルタ(もしくは3次元ウェーブレットフィルタ)を勉強していきます。複素数の世界がそこには広がります。

以下自分用のリンク集です。

ウェーブレット入門(おさらい)

画像処理のための複素数ウェーブレット変換(ダウンロード)

ディジタル画像処理

ウェーブレットのお勉強(2次元部分)

ウェーブレット理論と工学への応用

なるほど!ウェーブレットパケット解析がよさげなのですね。

相変わらず数式部分はさっぱり*2ですが、がんばれば「技法」や「しくみ」を読み取れるかもしれません。いろいろ読むと、jpeg2000のソースコードを読む必要性を感じてきました(ウェーブレットで圧縮している)。どこかに公開されていないか確認します。

ありました。

Java版はこちら(1.4以前のソースのようで、エラーがでますが、見る分には問題ないです)

勉強します。なお、JPEG 2000 は規格としては素晴らしいようですが、とっても重いので全く普及していないようです。

勉強中のメモ

JPEG 2000 Wikiがすごく詳しい。

キーワードのまとめ・さらなる疑問とか(勉強中)


非可逆(ローシックモード)・可逆(ロスレスモード):

ローシック:9/7-DWTを使用(なぜ9/7フィルタだと非可逆なのか不理解)

以下はJJ2000フィルタ例

public class AnWTFilterFloatLift9x7 extends AnWTFilterFloat {
/** The low-pass synthesis filter of the 9x7 wavelet transform */
private final static float LPSynthesisFilter[] =
{ -0.091272f, -0.057544f, 0.591272f, 1.115087f,
0.591272f, -0.057544f, -0.091272f};
/** The high-pass synthesis filter of the 9x7 wavelet transform */
private final static float HPSynthesisFilter[] =
{ 0.026749f, 0.016864f, -0.078223f, -0.266864f,
0.602949f,
-0.266864f, -0.078223f, 0.016864f, 0.026749f }; 

ロスレス:5/3-DWTを使用(なぜにこれが可逆?)

public class AnWTFilterIntLift5x3 extends AnWTFilterInt {
/** The low-pass synthesis filter of the 5x3 wavelet transform */
private final static float LPSynthesisFilter[] =
{ 0.5f, 1f, 0.5f };
/** The high-pass synthesis filter of the 5x3 wavelet transform */
private final static float HPSynthesisFilter[] =
{ -0.125f, -0.25f, 0.75f, -0.25f, -0.125f };

気分でJavaのIDEとしてIntelliJいれてみましたが、ソースのコピペがオシャレにできます。


リフト:

 説明にいりいろ出てくるリフトってなんなの?グーグル先生、勿体つけないで教えてください!!いえいえ、スキーがしたいんじゃなくって、重量上げでもなくて。。。この説明の中のリフトのことですか?画像処理では知っててあたりまえの用語のようですね。リフトが暗部の持ち上げ、下げ。ゲインが明部の持ち上げ下げ。ガンマが中央部の持ち上げ下げの調整のようですね。承知しました!


色空間変換:

カラー画像を扱うとき、どのように扱うのかがまだ分っていません。RGBそのまま処理するものなのか、他の空間(昔のアナログテレビのようにモノクロ+カラー差分?)で行うのが普通なのか・・・?


離散ウェーブレット変換 (Discrete Wavelet Transform:DWT):

適用イメージはJPEG 2000 Wikiの説明がとてもわかりやすかったです。

f:id:np2LKoo:20201213170027p:plain(この図を理解することが要です)

X方向とY方向にそれぞれにローパス、ハイパスをかけていく感じ。再帰的に圧縮している感じがよくわかりました。LLの部分が再帰的にフィルタリングされていく感じです。これが圧縮の「しくみ」の要であるようです。

ちなみに1次元(音など)では以下の感じでした(当ブログサイトより)

f:id:np2LKoo:20170922173420p:plain

※なお、直積とあるのは内積の誤りです。

 


EBCOT:

 Wikiも詳しいですが、さらに詳しい説明がありました。

「9/7 非可逆」のエンコード・デコード例も載ってました。

ハール(Haar)変換の応用はこれ

 ハ~る変換の原理は書いてないですが、実施例はこれ

 ハールウェーブレットのWikiはこれ  ここまで降りてくると全く理解不能。。。


インパルス応答:

要学習。音響関係とかフィルタ関係では必ず出てきますが、よくわかっていません。


わからないこと:

ウェーブレットといえば、基底:マザーウェーブレットですが、JPEG2000画像の基底が何かまだわかっていません。元の画像の縮小画像自体が基底である気もしますし、違う気もしますし。。。

ハード寄りだけでとってもためになるサイトを見つけました。

新構想の「自己符号化器」のほうは、まだ構想中です。

とこで、貴方のお気に入りの「活性化関数」は何ですか?

わたくしは、断然「シグモイド関数」です💘。学習生成されるフィルタ(ウェイト群)の周波数成分は控えめとなりますが、いい感じに汎化されています。*3

f:id:AssistantOfKoo:20201212144926p:plain

女王の気品と美しさを感じずにはいれらません。勾配問題でReluにとってかわられていますが、単層なら最強の活性化関数と信じています。(sigmoid教ともいいます。活性化関数といえば「コレ」と初期刷り込みされています。)

ニューラルネットワークやsigmoid関数を知ったのはもう30年以上前ですが、当時のスペックではニューラルネットをパソコンでシミュレートすることは事実上できませんでした。今やCRAY-1(1976 150MIPS)以上の性能を最安のノートパソコンが持ち、地球シミュレータ(2002初代 40.96TLOPS)程度の性能をRTX 3090(単精度35.7TFLOPS)を積めば実現できる時代です。計算しないわけがありません。(RTXが買えればという妄想)

はやく来年1月にならないかなぁ~:RTX 3060 12GB リリース!

か?RTX 3060 12GB の噂はまだ否定されていません。出たとしてもすぐには買えないので、次に噂される(そして出ると確信している)RTX 3070 Ti 16GB(どうやら10GB説が有力の模様ですね、残念) の価格決定を待ってから買います。(もしくはお金がなくて買えません)RTX3080Ti 20GBは非常に高スペックですが、買える範疇にないのは明白です。でもさらに上位のRTX  3090は地球シミュレータ(2002~2004年5期世界ランキング1位 本体約400億円)「くらい」の処理性能であることを考えると、(RTX 3090に)人生を賭けてみるのも一興かもしれません。(3090を買うなら、TSMC版が出てからかなぁ。それってRTX 3090 Super??? 25まんえん以上?)

f:id:np2LKoo:20201213194101p:plain

(これは未発売・未発表製品についてはリーク情報をまとめただけなので、最終的にガセになる可能性があります。*4バランス的にとってもよいと思います。(あと、(最終的に)RTX 3060 Super が 16GBで発売されたりすれば、Radeonは当面怖くなくなります。:これはリーク情報でなく、希望なのでご注意。なお、3070Ti*5はメモリを倍増させず、Superまで持ち越す説もありはします*6「8GBて、それはないでしょう。」という気はします。結構情報が錯綜しています。)

なお、試作品が確認されて、リーク情報が正確でも「量産販売」されるとは限りませんので。。。

「革ジャンおじさん」はモノリシック偏執狂ですがそれ以上にとっても「負けず嫌い」なので、次のRTX hopper系列(5nm MCM:マルチチップ)のシナリオを繰り上げるかもしれません。リサ・スーに負けないためなら、なんだってやるでしょう。いやそれ以上に意識しているは、ダークホースの「セレブラス社」か?他のAIチップスタートアップも鼻息が荒いです。MCMにすれば「技術的には」ですが、さらにcuda coreを倍増可能です!!はらたいらに3000点!倍率ドーん。お値段さらに倍!

f:id:AssistantOfKoo:20201213234704j:plain   f:id:AssistantOfKoo:20201213235227j:plain

*1:高校で「行列」に苦しんだ?世代ですが、今にして行列が大活躍なのは感無量です

*2:数式は「プログラミング言語の一種・またはアルゴリズムそのもの」と認識できてからはかなり抵抗感・違和感がなくなりました。それでも数式から「意図」を読むには、プログラムと違った次元の思考/スキルが必要なので苦手です。わからなくても数式があれば、(暗黙の省略を補う必要はありますが)プログラムできると思います。

*3:何故、活性化関数の種類で学習ウェイトWの周波数成分の傾向に違いがでるのかはまだ理解できていません

*4:2021/01/02 Lenovo情報により製品の裏付けがとれましたので、RTX3050, 50Ti, 60 12GBは確定です。1/5になって12GB版はRTX 3060 ULTRAで、3060Tiよりも高いなどというとんでもない情報も出てきています。本当なら今回PASSですね。。。$449!?だめだこりゃ。

*5:12月中下旬現在、10GB説が有力です

*6:30系Super(TSMC版)はださず、The Last モノリス(Lovelace) by TSMCを挟んで、シナリヲをひとつ早める噂(リークではない)勝手予想もあるようです。はてさて、NVIDIAはTSMCとの契約枠をどのように使うのでしょうか?