五島の画像を物体検出してみる。

今年は、GWに引き続き、五島に帰れませんねぇ。

GWの時に、今は力を蓄えて、将来、五島でAI技術を語りたいなっと思い、それから毎日勉強している。

今日は、物体検出アルゴリズムを五島の画像に適用してみる。

使用しましたアルゴリズムは、YOLOv4です。

人と海

人をきちんと認識してますね。

f:id:unachan_kz:20200725233255p:plain

漫画:おぉー人として認識してますねぇ。 f:id:unachan_kz:20200725233417p:plain

猫と魚

魚はだめでしたぁ。 f:id:unachan_kz:20200725233655p:plain

つばき猫と自転車

f:id:unachan_kz:20200725233844p:plain

テディーベアになっちゃった。でも自転車認識してますね。すげー

camelia catに変えてみました。ラベル変えただけだけどなんか、盛り上がってくる。

f:id:unachan_kz:20200725235859p:plain

学習データにないからねー f:id:unachan_kz:20200726000341p:plain

ゆるキャラたち

f:id:unachan_kz:20200726000656p:plain

 バス

高校生の時にお世話になりました。 f:id:unachan_kz:20200726000906p:plain

参考

こちらのコードを参考にさせて頂きました。 YOLOはメンテナンスを常時していて、学ぶ価値は多いのだろうな。

github.com

五島について

非常に良いところですよ。コロナの対策を十分にして、是非、安全になってから楽しみにいってくださいね。 www.city.goto.nagasaki.jp

頑張ってしまう

コロナウィルスの影響で、外出できない。

いつまでも、外出できないとか、会社に行かなくていいっという時間は続かないだろうなっと思い、 時間的に余裕が生まれた今、自己啓発を3月からずっと続けている。

力が付いてきたかもしれないと考える一方で、頑張りすぎてイライラすることも多い。

そこで、「謙虚力」という本を読んでみた。

謙虚力 超一流のリーダーになる条件

謙虚力 超一流のリーダーになる条件

  • 作者:松井 住仁
  • 発売日: 2019/09/12
  • メディア: 単行本(ソフトカバー)

私は足りているのに、欲が強く、あれもこれも勉強してって感じで自分自身を追い込んでいることに気づいた。

満ち足りていることを理解して、その上で、自分自身の行動を適度にコントロールすることも大事だと学んだ。

コロナ化は、なかなか人との会話が少なく、客観的に自分自身をみる機会を失ってしまう可能性もある。 そんな時こそ、謙虚に振舞うことが大事。

いろんなGAN

GANについて整理してみる。

参考資料がすごくわかりやすい。

 参考資料

http://www.kecl.ntt.co.jp/people/kaneko.takuhiro/slides/miru2019/Kaneko_GAN_Tutorial_MIRU2019.pdf

https://www.jstage.jst.go.jp/article/jasj/74/4/74_208/_pdf

conditional GAN

Conditional GANは、学習時にラベルを与えることで、種類を指定したデータの生成を可能にする。 通常のGANは、ランダムなサンプリングを行っている。このため生成されるデータの種類を指定するのが困難である。

正解ラベル(カテゴリ)を指定して画像生成を行うことが可能である。 f:id:unachan_kz:20200718153347p:plain

例えば、0, 9という正解ラベルを指定することで画像を生成し、並べて表示することができる。

インターネット検索してみると、Condition GANの発展から、動物、食品などの種類を指定した上で、 学習済みのモデルを生成するなどの事例がヒットする。

http://img.cs.uec.ac.jp/pub/conf17/180308itoy_6_ppt.pdf

pix2pix

pix2pixは言語翻訳の様に、画像のある特徴を別の特徴へ変換する。 Generatorはある画像を入力とし、出力は特徴が変換された画像となる。

pix2pixでは、ペアの画像から画像間の関係を学習する。 そして学習済みのモデルは、学習済みのモデルは、学習済みの2つの画像間の関係を考慮して、画像から画像への翻訳を行う。

f:id:unachan_kz:20200718154514p:plain

論文にあるように、領域がラベル付けされた画像から風景への変換になる。 言語翻訳のように、入力文章に文脈に合致する次文章は何かを予測するタスクに似ている。

デメリットとしては、輪郭が一致した画像のペアを大量に用意するのが大変。

土木などの分野で予測するために使用されていたりする。

http://www.jsece.or.jp/event/conf/abstract/2018/pdf/73.pdf

CyleGAN

Cycle GANは、pix2pixのように画像のペアを使うのではなく、画像群のペアを使って学習する。 pix2pixとは異なり、対応する画像同士がペアになってなくてもいいのがcycle GANの大きなメリット

f:id:unachan_kz:20200718155348p:plain

Cycle GANは、画像群Aの画像を画像群Bの画像に変換して学習すると共に、変換した画像群Bをもう一度画像群Aの画像に変換して学習する。 このようにサイクルを繰り返すことで、写真をモネ風の画像に変換したり、夏の景色を冬の景色に変換することも可能になる。

確認したいDeep Learning 勉強サイト 整理

最近、いろいろとDeep Learningを体系的に勉強するためのサイトに遭遇することがある。

ただ、残念なことに、チラッと確認してみて終わっている。

そこで、少しでも情報を整理して、今後の役にたてたいなっと思う。

TensorFlow, Keras and deep learning, without a PhD

絵が多くて、わかりやすそう。いろんな人への説明図として活用可能な気がする。

codelabs.developers.google.com

Dive into Deep Learning

An interactive deep learning book with code, math, and discussions

d2l.ai

Deep Learning with Pytorch

Pytorch を体系的に理解できる。 https://pytorch.org/assets/deep-learning/Deep-Learning-with-PyTorch.pdf

Google Colaboratoryをsshで操作する。

Google Colaboratoryをsshで操作する方法がわかったので情報を整理する。

引用情報

https://towardsdatascience.com/colab-free-gpu-ssh-visual-studio-code-server-36fe1d3c5243

手順

  1. ngrokのtalkenを取得する。
  2. Colabにngorkをインストールし実行する。
  3. 手元のPC(mac)でremote接続する。

1. ngrokのtalkenを取得する。

https://ngrok.com/

ngrokで無料の登録をし、authentication setting にてAuthtokenを取得します。

f:id:unachan_kz:20200716223138p:plain

2. Colabにngorkをインストールし実行する。

# Install useful stuff
! apt install --yes ssh screen nano htop ranger git > /dev/null
# SSH setting
! echo "root:carbonara" | chpasswd
! echo "PasswordAuthentication yes" > /etc/ssh/sshd_config
! echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config
! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
! service ssh restart > /dev/null
# Download ngrok
! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
! unzip -qq -n ngrok-stable-linux-amd64.zip
# Run ngrok

PUT_YOUR_TOKEN_HEREには1. で取得したAuthtokenを代入します。

authtoken = "PUT_YOUR_TOKEN_HERE"
get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 22 &')
! sleep 3
# Get the address for SSH
import requests
from re import sub
r = requests.get('http://localhost:4040/api/tunnels')
str_ssh = r.json()['tunnels'][0]['public_url']
str_ssh = sub("tcp://", "", str_ssh)
str_ssh = sub(":", " -p ", str_ssh)
str_ssh = "ssh root@" + str_ssh
print(str_ssh)
  1. 手元のPC(mac)でremote接続する。
ssh root@0.tcp.ngrok.io -p 14407

passwordを求められた場合には、carbonaraを入力する。

無事にログインできました。

補足

何度かトライしてると以下の様なエラーが発生してしまう。この点は調査を進めていく。

ConnectionError: HTTPConnectionPool(host='localhost', port=4040): Max retries exceeded with url: /api/tunnels (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7feef3c55b70>: Failed to establish a new connection: [Errno 111] Connection refused',))