swirl (渦巻き画像)

五島列島で撮った写真を用いながら、画像処理の勉強をしている。

渦巻き画像

f:id:unachan_kz:20200603003527p:plain

三井楽港

よくわからない状態に変化する。 f:id:unachan_kz:20200603003906p:plain

 堂崎教会

f:id:unachan_kz:20200603004403p:plain

 つばき

f:id:unachan_kz:20200603004427p:plain

使用したAPI

スワール(渦巻き化)

transform.swirl

コード

 参考論文のまま使用しました。このため、参考文献をご確認願います。

Ex. 4: Implement the swirl transformation using warp

メモ

def swirl(xy, x0, y0, R):
    r = np.sqrt((xy[:,1]-x0)**2 + (xy[:,0]-y0)**2)
    a = np.pi*r / R
    xy[:, 1] = (xy[:, 1]-x0)*np.cos(a) + (xy[:, 0]-y0)*np.sin(a) + x0
    xy[:, 0] = -(xy[:, 1]-x0)*np.sin(a) + (xy[:, 0]-y0)*np.cos(a) + y0
    return xy

----
im1 = warp(im, swirl, map_args={'x0':100, 'y0':100, 'R':250})
---

map_argsのx0, y0が回転の中心点、Rは回転する各周波数を求める際になります。

参考文献

今回使用したコードは下記の本を読んでみて作りました。

五島について

www.city.goto.nagasaki.jp

AIにできることできないこと

AIにできることできないこと / 続AIにできることできないこと

読んだ理由

普段、ユーザに対して、問題解決をする際に、なぜこの機械学習の手法を選択したのか、深層学習とは何か?ということを説明することが多い。 理解力や向上心、向学心が高い人が多いと説明は楽だが、一般的には、AIだったらなんでも解決できるんでしょっというノリで相談してくる。 そこで、ユーザにどのように説明すれば良いのか?という点で平たく説明する方法は無いか?と考え読んでみた。

共感のポイント

  1. 動機:解決すべき課題を定める力(とくべき課題を見つける)
  2. 目標設計 : 何が正解かを定める力(どうなったら解けたとするかを決める)
  3. 思考集中 : 考えるべきことを捉える力(解く上で検討すべき要素を絞る)
  4. 発見  :正解へと繋がる要素を見つける力 (課題をとく要素を見つける)

1. 動機

ユーザと普段、要件定義を決める際、何を課題としているのか?を整理できていないことが多い。 このため、自分が解きたいと願う課題を整理する必要がある。

2. 目標設計

どうなれば課題が解決できたとするのか、最前の解決にならかったとしても、より満足いく結果が得られたと捉えるのか? これを定めるのも難しい。

3. 思考集中

コロナウィルスで時間ができた一方で、やりたいこと、学びたいことが増えて、思考集中できていない。 何をすべきかを考えるべきか、中長期的に何を獲得したいのか?を考えて行動していく必要がある。

4. 発見

考えることを絞って、いよいよ選択肢を実際に目標設定に繋がる密筋を探します。

確かにこう書くと当たり前ですが、なかなか、行動できていない。別にAI云々でなく、己がどのようにいきていくのか?を問われている気がする。

続AIにできることできないことは、「実際に残渣ユニットの説明」、「BERT」などの説明があり、面白い。きっとAI技術者でも知らない人が多いので、この本を読むと 理屈だけでは、AI技術者依も詳しくなると考えた.

AIをビジネスで活用する場合

下記のDeNAの記事や、ブレインパッドの方達が書いている記事が有益である。 engineer.dena.com

何事も知識と現場の人と向き合い、現場の協力をえる体制が必要である。 また技術を蓄積する努力もまた必要である。

手紙屋

コロナウィルスの自粛で図書館が閉まってしまったぁ。

でも本を読む機会と考えて、いろんな種類の本を読んでみた。

手紙屋

心に響いたフレーズ

  1. 素晴らしい人生を送ることに必要なこと。それはー「今、目の前にあるものに全力を注いで生きる」こと
  2. 人生という大海原に漕ぎ出す時に、その船が誰のものであるのか、自分が船長か船員か、船の大きいか小さいかなんて、実はどうでもいい。大事なのは、その船が何を目的として航海するか、だ
  3. 人生の目標を持った時から、あなたの人生が始まる。目標をしっかりと持てば、”今日を生きる”という確固たる生き方ができる。

言い訳かも知れないが、就職活動時に読んでおくべきだった。 このコロナウィルスの影響下で、最初は限られた世界に対して不満を持つことが多かった。 どのようにしたら、ころなウィルスの問題が収束した場合に、自分がコロナウィルスの自粛前より輝けるのか?も考えていた。

この本から学んだことは、その日一瞬の輝きを考えるのではなく、長期的に努力を習慣化して輝くこと。 自分を変えてくれるような本を読み、自分の意見を書き綴っていくことだということを学んだ。

余談

 手紙やシリーズはいろいろとあるんだなぁ。次はこちらを読みたい。

手紙屋 蛍雪篇 私の受験勉強を変えた十通の手紙 (喜多川 泰シリーズ)

手紙屋 蛍雪篇 私の受験勉強を変えた十通の手紙 (喜多川 泰シリーズ)

  • 作者:喜多川 泰
  • 発売日: 2007/12/28
  • メディア: 単行本(ソフトカバー)

本サイトの目的

時々、趣旨とは離れた投稿があるが、このサイトの趣旨は、データサイエンスを学びながら、故郷である五島に貢献できないか?と考えて、日々のデータサイエンスの勉強記事を学んだものに対して、島のネタをまとめている。 私は、五島市出身ですが、公共団体とは関わりがなく、一人の五島出身者として何ができるか考えたサイトです。

時々考えにブレがあるため、投稿しなかったり、全く関係ないことになっておりますがご了承願います。

五島とは

 

五島列島は、九州長崎の西方100キロメートルに浮かぶ大小140余りの島々からなり、美しい海と豊かな自然に恵まれています。五島市五島列島最大の島、福江島にあり、2004年8月に福江市南松浦郡富江町玉之浦町岐宿町三井楽町奈留町と合併し、五島市となりました。四季を通して釣りやマリンスポーツなどが楽しめ、奈良・平安時代には遣唐使船最後の寄港地、中世以降は海外貿易の拠点として栄え、カトリック教会や神社仏閣、城跡や武家屋敷などの歴史遺産が数多く残っています。

www.city.goto.nagasaki.jp

DOT言語でグラフを描く

東京から五島に帰省するとした場合

f:id:unachan_kz:20200531232543p:plain

東京羽田空港から博多空港経由で五島福江空港に行く必要があります。

上記図をdot言語で記載したい場合には以下のようになります。

goto1.dotとして編集しました。

digraph finite_state_machine {
  rankdir=LR;

  1 [label="羽田空港", color=orange, style=filled];
  2 [label="博多空港", color=orange];
  3 [label="五島福江空港", color=orange, style=filled];

  1 -> 2 [ label = "飛行機" ];
  2 -> 3 [ label = "飛行機" ];
}

ターミナルから下記のコマンドを実行します。

 dot goto1.dot -T png -o goto1.png

博多から船を利用する場合

博多港から福江港まで船で移動することができます。 深夜0時に出発し、のんびりと9時間の旅となります。

f:id:unachan_kz:20200531233143p:plain

goto2.dotとして編集しました。

digraph finite_state_machine {
   rankdir=LR;

  1 [label="羽田空港", color=orange, style=filled];
  2 [label="博多空港", color=orange];
  3 [label="五島福江空港", color=orange, style=filled];
  4 [label="博多港", color=orange];
  5 [label="福江港", color=orange, style=filled];

  1 -> 2 [ label = "飛行機" ];
  2 -> 3 [ label = "飛行機" ];
  2 -> 4 [ label = "地下鉄|バス" ];
  4 -> 5 [ label = "船" ];

}

ターミナルから下記のコマンドを実行します。

 dot goto2.dot -T png -o goto2.png

 東京から長崎への経路を考えた場合

長崎空港経由で長崎県五島列島に行くとします。 長崎空港と長崎港は遠いので、バス移動(約1時間)必要となります。

f:id:unachan_kz:20200531233724p:plain

goto3.dotとして編集しました。

digraph finite_state_machine {
  rankdir=LR;

  1 [label="羽田空港", color=orange, style=filled];
  2 [label="博多空港", color=orange];
  3 [label="五島福江空港", color=orange, style=filled];
  4 [label="博多港", color=orange];
  5 [label="福江港", color=orange, style=filled];
  6 [label="長崎空港", color=orange];
  7 [label="長崎港", color=orange];


  1 -> 2 [ label = "飛行機" ];
  2 -> 3 [ label = "飛行機" ];
  2 -> 4 [ label = "地下鉄|バス" ];
  4 -> 5 [ label = "船" ];
  6 -> 3 [ label = "飛行機" ];
  1 -> 6 [ label = "飛行機" ];
  6 -> 7 [ label = "バス" ];
  7 -> 5 [ label = "船" ];
}

ターミナルから下記のコマンドを実行します。

 dot goto3.dot -T png -o goto3.png

陸路(新幹線)を追加した場合

まだ長崎新幹線は完成しておりませんが、新幹線を利用して五島市に行くことができます。 時間がある方にはいいのかもしれません。

f:id:unachan_kz:20200531234611p:plain

goto4.dotとして編集しました。

digraph finite_state_machine {
  rankdir=LR;

  1 [label="羽田空港", color=orange, style=filled];
  2 [label="博多空港", color=orange];
  3 [label="五島福江空港", color=orange, style=filled];
  4 [label="博多港", color=orange];
  5 [label="福江港", color=orange, style=filled];
  6 [label="長崎空港", color=orange];
  7 [label="長崎港", color=orange];
  8 [label="東京駅", color=orange, style=filled];
  9 [label="博多駅", color=orange];
  10 [label="長崎駅", color=orange];

  1 -> 2 [ label = "飛行機" ];
  2 -> 3 [ label = "飛行機" ];
  2 -> 4 [ label = "地下鉄|バス" ];
  4 -> 5 [ label = "船" ];
  6 -> 3 [ label = "飛行機" ];
  1 -> 6 [ label = "飛行機" ];
  6 -> 7 [ label = "バス" ];
  7 -> 5 [ label = "船" ];
  8 -> 9 [ label = "新幹線" ];
  9 -> 4 [ label = "地下鉄|バス" ];
  9 -> 10 [ label = "特急" ];
  10 -> 5 [ label = "船" ];

}

ターミナルから下記のコマンドを実行します。

 dot goto4.dot -T png -o goto4.png

余談

今回、dot言語に慣れるために手を動かしながら実行しましたが、用途に応じてはfreemindなどを使って整理してみるのもいいです。

https://ja.osdn.net/projects/freemind/

五島市について

いい所なので、是非、コロナが明けましたら、行ってみてくださいね! www.city.goto.nagasaki.jp

計算グラフの可視化

私は、普段、信号処理の一つの手段としてDeep Learningアルゴリズムを利用している。 そこで、信号処理についても調査した内容について整理していこうと思う。

まずは、信号処理を考える上で大事となるシステムブロック図を考えていく。 ただ、これは趣味のブログであるため、すぐには本題には入らない。

システムブロック図

f:id:unachan_kz:20200531224610p:plain

まずブロック図をgraphvizを使いながら初めて行く。

graphviz

Graphvizはグラフを可視化するためのツールである。 「グラフ」とは計算グラムのようなノードと矢印によるデータ構造を意味する。 officialのサイトにサンプルがたくさん存在する。

graphvizのオフィシャルサイト

graphvizを使って可視化しようと思ったきっかけ

今回、ゼロから作るDeep Learning③を学びながらスキルアップをしたいと考えたため。

 

ゼロから作るDeep Learning ❸ ―フレームワーク編

ゼロから作るDeep Learning ❸ ―フレームワーク編

  • 作者:斎藤 康毅
  • 発売日: 2020/04/20
  • メディア: 単行本(ソフトカバー)

私はmacOSを利用しているためHomebrewを使用して、graphvizをインストールした。

$brew install graphviz

ノードを結ぶ図を作る。

ゼロから作るDeep Learning③のP.185のステップ25に従い、絵をシステムブロック図を描いてみる。

sample.dotファイルに下記のように記載する。

digraph finite_state_machine {
  1 [label="x", color=orange, style=filled];
  2 [label="system",color=lightblue, style=filled,shape=box];
  3 [label="y", color=orange, style=filled];
  1 -> 2 [ label = "入力" ];
  2 -> 3 [ label = "出力" ];
}

ターミナルから下記のコマンドを実行する。

dot sample.dot -T png -o sample.png 

下記のようなシステムブロック図を描くことができた。

f:id:unachan_kz:20200531230511p:plain

ノードを結ぶ図を横展開するようにする。

rankdir=LRを追加することでグラフを横向きに展開することができた。

digraph finite_state_machine {

  rankdir=LR;  

  1 [label="x", color=orange, style=filled];
  2 [label="system",color=lightblue, style=filled,shape=box];
  3 [label="y", color=orange, style=filled];
  1 -> 2 [ label = "入力" ];
  2 -> 3 [ label = "出力" ];
}

f:id:unachan_kz:20200531224610p:plain

参考文献

ゼロから作るDeep Learning③

ゼロから作るDeep Learning③を読み始めた。

1章は下記から読めるようです。

koki0702.github.io

この本は正確には読むだけでなく手を動かすことで見えてくるものがある。

普段、データ分析をメインにしているが、深層学習FWの本質までをここまで考えたことがなかった。

これまで組み込みエンジニアとしてLinux kernel / Android Platformなどや、いろんなプロダクトの開発をした経験もあるが、 Linux / Androidともに自前のPlatformを作る本が出だした頃にブームが終焉している気がする。 一方、ここで生き残れるか、次の技術に本質的な技術理解ができずに次に移る技術者になる人が増えてくると思われる。

この本は、下記の本を読んだ時に感じた、経験に基づくテクニック、さらに、複雑なドメインに直面するソフトウェアプロジェクトにおける開発を容易にする基本原則などに 対する考え方と同様で非常に共感でき、学ぶことが多かった。

ゼロから作るDeep Learning③が出て、きっとこれから技術者感の差が生まれる気もした。私も取り残されないようにしないといけない。

なお、作者は、対馬出身の様だ。私も島出身として一歩一歩努力していつかは成果をだしたいなぁ。

ゼロから作るDeep Learning ❸ ―フレームワーク編

ゼロから作るDeep Learning ❸ ―フレームワーク編

  • 作者:斎藤 康毅
  • 発売日: 2020/04/20
  • メディア: 単行本(ソフトカバー)

線形フィルタの理解

空間フィルタとは

  • 周囲の情報を利用して画素値を決めるフィルタ

  • 空間フィルタは2つに分けられます。

  • 線形フィルタ

  • 非線形フィルタ f:id:unachan_kz:20200510161242p:plain

今回は、線形フィルタについて考えてみます。

線形フィルタとは

出力画素値を周囲画素の重み付和で計算するフィルタ f:id:unachan_kz:20200510161334p:plain

線型フィルタを1次元配列で考えます。

1次元配列があるとします。

12 22 3 35 6 33 9 35 3 44 3 99 33 2

下記の一次元配列で平滑化したいとします。 1/3 1/3 1/3

以下のように計算することで、線形フィルタと一次元配列が計算されます。 youtu.be

結果のグラフは以下の感じであり、平滑化されていることがわかります。 f:id:unachan_kz:20200510163716p:plain

下記の一次元配列でフィルタ処理した場合には、エッジの変化が大きい箇所を特徴抽出することができます。 0.5 0.0 0.5

youtu.be

f:id:unachan_kz:20200510164912p:plain

考察

Deep Learningが普及した理由としてConvolutional Neural Networkの技術が挙げられるが、 手を動かしながら理解することで根本的なことがよくわかるきがする。 例えば、畳み込み処理は、フーリエ変換を用いた信号処理としても考えることができ、この仕組みを理解することで色々と理解が深まるのでは無いかと考えています。

参考資料

http://www.clg.niigata-u.ac.jp/~lee/jyugyou/img_processing/medical_image_processing_03_press.pdf

http://takashiijiri.com/classes/dm2018_1/dm1_4.pdf

参考文献