takuroooのブログ

勉強したこととか

2019年上半期に参加した勉強会まとめ2

目次

2019/03/26 LINE AI Talk #01

line.connpass.com

LINE主催のAIに関するトークイベント。この日のセッションは2つ。一つは、ネオコグニトロンを開発した福島邦彦先生の「Deep CNN ネオコグニトロンと視覚パターン認識」。もう一つは、LINEの機械学習チームの方の「Fully Convolutional Networks における Softmax Cross Entropy Loss の変種の適用」

ネオコグニトロンはCNNのベースになったモデルで今回は最近のネオコグニトロンに使われている技術の解説だった。

主に

  • ネオコグニトロンの基本構成(S細胞、C細胞の役割)
  • Add-if-Silentによる学習
  • 内挿ベクトル法による識別

について解説されていた。 どれもDeepLearningでよくある「理論はよく分からないけど、試してみたらうまくいった」というような技術ではなく、「〜という原因があるから〜という手法が効果的だ」というように理論の解説が丁寧にされていたのが印象的だった。

講演時の資料ではないけど、発表内容は以下の資料とだいたい同じだった。
Deep CNN ネオコグニトロンの学習

2019/3/28 Machine Learning Team Building Pitch

connpass.com

株式会社scouty、エムスリー株式会社、クックパッド株式会社、Repro株式会社による共催の機械学習チームビルディングに関するトークイベント。

チームビルディングの方法で特にチームの技術力の上げ方や組織の中でどこに機械学習チームを作るべきか(機械学習チームという独立した一つの組織を作るのか、それとも各事業部にそれぞれ機械学習チームというものを作った方がいいのか)という点に興味があったので参加した。
しかし、そういう観点での発表はなく「どうやって優秀な人を採用するか」みたいな話が多かった。(scoutyがいたせいかもしれないけど....)

2019/04/06 nlpaper.challenge NLP/CV交流勉強会(最終回)

nlpaper-challenge.connpass.com

cvprの論文読み会をするするチームcvpaper.challengeとそれのNLPバージョンのnlpaper.challengeの合同勉強会。ブレインパッドで開催。

この日は画像認識の第7章〜第8章までの読み合わせとオムロン サイニックエックスの牛久 祥孝先生の講演があった。 牛久 祥孝先生の講演ではキャプション生成の最近の研究についての発表があった。(講演の資料欲しかったけどなかった。)

2019/05/11 SysML2019 論文読み会

mlxse.connpass.com

機械学習工学研究会が主催のSysML Conferenceの論文読み会。 一番興味深かったのは最初の方に紹介されたCNNの2値化の話。精度を犠牲にして速度を上げる2値化、3値化はあまり意味がないという内容。
2値化、3値化前のモデルを速度と精度の二軸でプロットするとパレート最適解のラインができる。2値化、3値化のモデルはこのラインを超えることができない、つまり2値化、3値化のモデルより性能が良い2値化していないモデルが存在するとのこと。

他にはハード関連の論文紹介などがあったが全く話についていけなかった....

SysMLのサイト
www.sysml.cc

2019/05/15 第21回ステアラボ人工知能セミナー

stair.connpass.com

DeNAの内田さんによる「畳み込みニューラルネットワークの高精度化と高速化」の講演。

スライドが133枚あって約2時間ノンストップの講演だった。

内容は、

という感じ。知らない手法が多かったので参加できて良かった。また疑問に思ったことを質問したときに、基本的な質問にも関わらず的確で丁寧に回答をいただけて勉強になった。
当日の動画とスライドは以下のサイトで閲覧可能 stair.center

2019/06/08 DLLAB 2 周年イベント: ディープラーニングの社会実装を阻むものは何か?

dllab.connpass.com

DLLAB主催のイベント。DeepLearning流行っているけどなんでDeepLearning使ったサービスが増えていかないの?ということについて講演したりハンズオンしたりするイベント。

講演自体はあまり興味がなく、JetBotを作るというハンズオンだけが目的で参加した。

ハンズオンでは、すでに用意されている部品を組み合わせてJetBotを組み立てて、AzureでNNを学習したものをJetBotにデプロイして動かすというもの。
という予定だったがネットワークの問題があってJetBotを走らせるところまでいかなかった。

JetBotの制御は組み込みソフトっぽいのを想像していたがすでに用意されている関数を叩くだけで簡単に制御できた。たぶんPythonちょっと書ける人なら誰でも動かせると思う。
2020年から学校でプログラミングの教育が始まるらしいけど、JetBot作る授業とかあったら面白そう。

2019年上半期に参加した勉強会まとめ1

2019年上半期に参加した勉強会まとめ
長いので2つに分けてまとめる。

目次

2019/02/02 fpgax #11 + TFUG ハード部:DNN専用ハードについて語る会

fpgax.connpass.com
六本木Googleオフィスで開催。大きいスクリーンがあってそこにスライドを映していて見やすかった。

DNN向けのハードウェアについて発表者が話す会でTPU、AIチップ、FPGAによるDNN、DNNコンパイラ、DNN高速化など多岐にわたる内容で非常に勉強なった。

特にDNNコンパイラの話はなぜDNNコンパイラとは何かという話から始まり最近のコンパイラの動向まで分かりやすく解説されていてコンパイラに詳しくなくても楽しく話が聞けた。

当日の発表内容はYouTubeにアップされている。
www.youtube.com

2019/02/27 Edge Deep Learning Summit

leapmind.connpass.com

LeapMind主催のイベント。渋谷ストリームホールが会場。
組み込みディープラーニングを実践している企業が事例を紹介したり、LeapMindの方がLeapMindの製品の話したりするイベントで技術的な話より事例紹介が中心。企業がの事例を聞く限り組み込みディープラーニングやってみましたという例が多く、使い方を模索しているようだった。もう少し幅広い業種の例が聞きたかった。

LeapMindはクラウド側ではなく、エッジ側でモデルを動かすことに特化したサービスを提供している。クラウド側での推論には通信コストやプライバシーの問題があることを指摘していた。

TensorFlowなどのフレームワークを使った量子化ではビット数を8bitまでしかサポートしていないが、LeapMindのBulueoilを使えば1 or 2 bitに量子化できるとのこと。Bulueoilではユーザーが学習データを用意するだけで、量子化モデルを作ることができる。対応しているタスクはclassification / detection / semantic segmentationなどがある。 現在Buleoilはオープンソース化されている。

blue-oil.org

またこのイベントでエッジAI専用チップを開発することを発表していた。

monoist.atmarkit.co.jp

2019/03/04 SIX2019

six.abejainc.com

Abejaが主催のイベント。品川グランドプリンスホテルが会場。

二日間の開催だったが初日だけ参加した。 EDLSとは違い、多くの企業が機械学習のデータ集め方やアノテーション方法、実問題に対するモデルの適用例など幅広いテーマで講演していた。そのうち以下の4つの講演を聞いた。

  1. DeNAにおける先端AI技術活用のチャレンジ(DeNA 内田祐介)
  2. 機械学習による広告クリエイティブの制作支援と生成(サイバーエージェント 内田光太)
  3. 少数データからの学習法の展開とABEJAの取り組み(ABEJA 藤本敬介)
  4. 徹底討論:AI導入・運用を加速性よ、40分一本勝負!(ABEJA 岡田陽介 マスクドアナライズ)

中でもDeNAサイバーエージェントの話が面白かった。DeNAの話ではAIチームの構成や組織のあり方の説明があって勉強になった。 サイバーエージェント機械学習で広告制作をアシストする事例を紹介していて、人間がやるべきこととAIがやるべきことの線引きがうまくできている印象を持った。

発表資料のいくつかは以下のリンクから参照可能。

six.abejainc.com

2019/03/15 【緊急開催】キカガク&マスクド・アナライズ共催イベント『ここが変だよ、日本のAIプロジェクト』

kikagaku.connpass.com

キカガクの吉崎さんとマスクド・アナライズとの対談イベント。 AI開発で起こるあるあるや失敗例を取り上げ、うまくAIを使うにはどうすればいいかということをテーマとしていた。 以下参考になった話。

  • AIを使う目的が曖昧。AIを使うことが目的になっている。
  • pocは試行錯誤の繰り返しになるので自社でやるべき。本番システムを作る時はAI専門の会社に頼む。
  • 新規事業でAIを使おうとすると、AIでどこまでの精度があればいいか判断しにくい。
  • AIで全てをやろうとすると失敗する。ヒューマンインザループがあるとうまくいく。

「AIを使うことが目的になっている」というのはよく悪い例として出るけど小さな課題に対してとりあえず使ってみるというのは大切だと思う。そもそも使わないと何ができるか想像できないし、使う上での障害も理解できないし。

AI開発を請け負うベンチャーの人がよく「顧客にAIでとにかく何かやりたいって言われて大変だ」みたいな話しているけど、まずはどういうところにAIで解決できる課題があるのか顧客と一緒に探す根気強いコンサルサービスから始めるべきだと思う。

2019/03/20 Recap of TensorFlow Dev Summit 2019

tfug-tokyo.connpass.com

Google六本木オフィスでの開催。 TensorFlow Dev Summit 2019をRecapする会。

バイス上で学習するFederated Learningは興味深かった。勉強会の後、ネットで調べてみたけど情報があまりなくどうやって協調学習していくのか謎だった。

単純に考えるとデバイスから取れた情報を使ってクラウドで学習するというのがありえそうなケースだけど、これの問題点としてよくプライバシーの問題が挙げられる。だからデバイス上で学習しようという話なのだけども、今どきの人はネットに情報をアップロードすることに抵抗があまりないのではないかとも思う。

2018年に参加した勉強会まとめ

2018年8月22日にconnpassに登録してから定期的に勉強会に参加しているので、(まずは)2018年に参加した勉強会をまとめてみた。

勉強会に参加するまで分からないことがあれば自分でネットで調べたり本を買ったりして勉強していたけど、

  • 勉強したいことの幅と深さに限界があると思った 。
  • 自分の会社以外のエンジニアってどんな人がいるのか知りたかった 。

という思いがあったので色々参加してみることにした。

目次

2018/09/22 組込みDL体験コース

connpass.com
東京駅近くのビルの一室で行われたイベント。場所がわかりにくかった。

内容は、前半はディープラーニングの簡単な講習と後半はtiny-YOLOをラズベリーパイ上で動作させる実習があった。オリジナルtiny-YOLOをパソナテックのフレームワーク「コキュートス」に変換してそれをC言語でラズパイ上に実装した。
パソナテックの研修のお試し版のようで、これをもとに実践コースというものを開発しているとのこと。

講習はneural neworkの種類やconvolutionの概要、あとYOLO階層構造について触れていた。convolutionなのに一部separable convolutionかのように説明されていたのが気になった。

実習はデフォルトのエディタしかないのでviとか使えないと厳しいかも。C言語使えてちょっとディープラーニング触ってみたいという人にはちょうどいいイベントかも。

2018/12/01 Chainer Beginner's Hands-on Course #01

chainer.connpass.com
会場は六本木のGoogleオフィス。いろはすが無料だった。このイベントで初めてDefine by runを使って使いやすさに感動した。

Chainer入門のイベントで、Chainer使ってアプリケーション開発しようという内容。全4回で構成されていて、初回に参加した。
Google Colaboratory上で実行できる説明資料が公開されていて、基本的にそれを順番に実行していく形式。初回はFashion-MNISTの学習だった。

chainer-colab-notebook.readthedocs.io

また当日の様子が中継されており、YouTubeで視聴することもできる。 www.youtube.com

資料が分かりやすい+YouTubeでの説明付きなので、現地参加していかなくてもある程度自習できるけど、現地参加ならチューターがいるので分からない箇所はその場ですぐ質問できるというメリットもある。

2018/12/27 Neural Network Console ハンズオンセミナー in ソニー

nnc.connpass.com 大崎のソニーで開催されたNeural Network Consoleのセミナー。講師はソニーの人ではなかった。

Neural Network Consoleで学習したモデルをお絵描きWebアプリに組み込むハンズオン。MNISTを学習させて、ブラウザ上で数字を書くとモデルが予測した数字をプリントするみたいなやつ。最初に資料を渡されてそれを見ながら各自進めていき、分からないところがあれば質問するというスタイル。自分のペースで進めていけるので良かった。

GUIでパズルみたいにモデルを作るのが楽しかったのと、モデルの作成から学習、評価までブラウザ上で完結してできるのが開発しやすいと感じた。
個人的には各レイヤーの入出力が可視化できたり、エラーの分析機能だったり、学習/評価データの分布が見れたりできたらさらに使いやすいと思った。

GWでやったこと

10連休中にやったことまとめたみた。

目次

FCNの論文まとめた

論文は昔に読んだことあったけど、読んで実装しただけで終わっていたので内容をまとめてみた。古い論文だけど、全結合層なしのモデルをsemantic segmentationに使うとかskip architectureで低層の特徴マップを高層にバイパスするとか最近のモデルで標準的に使われている手法をいち早く使っている論文になっている。色々重要な試みをされている論文なのでオススメです。
takuroooooo.hatenablog.com

U-Netの論文まとめた

U-NetはQiitaの記事で読んだ程度だったが、色々な記事でよく見かけるので論文を読んでみた。医療画像系のタスクで使われたモデルで、医療画像の学習データが少ない中どうやって精度を出すかという課題に対する取り組みも書かれている。モデルはFCNの改良版という印象。 takuroooooo.hatenablog.com

DeepLabv3+の論文まとめた

Papers With Code : Semantic SegmentationでBestMethodになっていたので読んでみた。この論文以前にDeepLabv1,DeepLabv2,DeepLabv3と3つの論文があるようで、それらを全て読まずにDeepLabv3+の論文を読んだので消化不良になっている箇所がいくつかあるのでv1から読んでまとめてみようと思っています。

takuroooooo.hatenablog.com

U-Net実装した

論文読むだけでは物足りないのでPyTorchで実装してみた。 github.com

Optuna使ってみた

ハイパーパラメータ自動探索ツールは使ったことがなく、Optunaは前々から気になっていたので触ってみた。自動で探索してくれるのですごく楽だけど、探索方法の概要とか知らないとなんとなく気持ち悪いのでOptunaの探索アルゴリズムも勉強していきたい。 optuna.org

Quiver使ってみた

Kerasの層の出力特徴マップを可視化できるツール。GUIで入力画像と層を指定するとその入力画像をいれたときの特徴マップが見れる。UIがシンプル。 github.com

A Recipe for Training Neural Networksを読んだ

これはただ記事を読んだだけだけど内容が良かったので書いておく。OpenAIのエンジニアのブログでニューラルネットワークの学習で気をつけることが書かれている。特に共感したのは以下の部分。

What we try to prevent very hard is the introduction of a lot of “unverified” complexity at once, which is bound to introduce bugs/misconfigurations that will take forever to find (if ever).

ニューラルネットワークを学習するとき、バグのなどの原因になるから未検証なことを一気に突っ込むなという意味だと思っているけど、この通りだと思う。色々な変更入れた結果、動作がおかしくなると何が原因なのかが特定しにくいのはニューラルネットワークの学習に限らない話なのであらゆる仕事に共通する決まりごとだと思う。

また以下の箇所はニューラルネットワークの学習ではなく、コードの書き方のアドバイスだけどすごく勉強になった。

I like to write a very specific function to what I’m doing right now, get that to work, and then generalize it later making sure that I get the same result.

いきなり汎用的な関数書くと難しくてバグりやすいから特定のことしかできない関数を書いてからそれを徐々に汎用的な関数に修正していくのが好きとのこと。

他にもためになるTipsがまとまっているのでニューラルネットワークを勉強している人は一読をオススメします。

karpathy.github.io

今後やっていきたいこと

  • 論文読んでPyTorchで実装するというのは今後も続けていきたい。
  • 物体検出系の論文読んで実装したい。
  • もうすぐTensorFlow2.0が正式版になるようなので使ってみたい。
  • Keras Tuner使ってみたい。
  • Optunaの探索アルゴリズム勉強したい。
  • QuiverのPyTorch版作りたい。(フロントエンド、Flask、Reactあたり勉強する必要がありそう。)

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation(ECCV2018)

SemanticSegmention関連の論文メモ
図は論文からの引用

GoogleのDeepLabv3の進化版であるDeepLabv3の論文。

目次

概要

オブジェクト境界のセグメンテーション結果を強化するためにDeepLabv3にシンプルなデコーダモジュールを追加したDeepLabv3+を提案。

論文リンク

https://arxiv.org/pdf/1802.02611v3.pdf

著者

  • Google Inc
    • Liang-Chieh Chen
    • Yukun Zhu
    • George Papandreou
    • Florian Schroff
    • Hartwig Adam

提案手法

f:id:takuroooooo:20190504210142p:plain

DeepLabv3からの変更点

  • DeepLabv3のベースネットワークをResNetからベースのネットワーックを改良版Xceptionに変更。
  • より鮮明なセグメンテーションを得るためにDeepLabv3にデコーダモジュール追加。
  • 計算量とパラメータ数を削減するためにDepthwise separable convolution をASPP(Atrous Spatial Pyramid Pooling)とデコーダに適用。

Atrous Spatial Pyramid Pooling

初代DeepLabからあるモジュールだけど少し補足。
f:id:takuroooooo:20190504213140p:plain

  • SPPNetSpatial pyramid poolingをAtrous convolutionで実行
  • 異なるrateでAtrous convolutionを実行することでマルチスケールのコンテキスト情報をキャプチャ。
  • PSPNetではこれをAtrous convolutionではなくPooling(Max/Avg)で処理していた。
  • Atrous convolutionのrateを大きくしていくとフィルタの有効な重みが小さくなる問題がある。(下記Figure4参照 図はDeepLabv3の論文から引用。
  • この問題に対応するためにImage PoolingをDeepLabv3で導入。Image Poolingではグローバルなコンテキスト情報をキャプチャするために、Global Average Pooling + 1x1 convを使う。
  • DeepLabv3+ではAtrous Spatial Pyramid PoolingにDepthwise separable convolutionを導入した。

f:id:takuroooooo:20190504214730p:plain

改良版Xception

f:id:takuroooooo:20190504215442p:plain

改良点
1. レイヤー数を増加
2. max pooling をDepthwise separable convolutionに置き換え。
3. batch normalizationを追加。

結果

f:id:takuroooooo:20190504220029p:plain
PSPNetよりもmIOUが高い。

実装

github.com

参考リンク

developers-jp.googleblog.com

Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

SemanticSegmention関連の論文メモ
図は論文からの引用

目次

概要

クラス分類用の学習済みモデルをfine tuningして全結合層なしモデルを構築しSemanticSegmentationに応用。深い層のsemantic informationと浅い層のappearance informationを統合するskip architectureを導入することで正確な推論を行う。

論文リンク

https://arxiv.org/pdf/1605.06211.pdf

著者

  • UC Berkeley
    • Evan Shelhamer
    • Jonathan Long
    • Trevor Darrell

提案手法

f:id:takuroooooo:20190501215334p:plain まず学習済みのモデル(論文ではVGG16)の全結合層を畳み込み層に置き換えて完全畳み込みネットワークのベースを作る。全結合層がなくなることで任意のサイズの入力を受け付けることができる。

f:id:takuroooooo:20190501215519p:plain 上記図のconv7までがベースのネットワーク。これにskip architectureを追加する。これによってPoolingによって失われたローカルな情報が深い層の特徴マップに伝播される。
skip architectureの追加の仕方によって3つのモデルができる。(FCN32s/FCN16s/FCN8s)

FCN32s

  • skip architectureなしのモデル。
  • conv7の出力を32倍拡大して最終的な推論結果を出力する。
  • 拡大にはbilinear upsamplingのパラメータで初期化された学習不可deconvolution層を使う。
  • FCN32s/FCN16s/FCN8sの最後のdeconvolution層は拡大する倍率以外は全て同じ条件になっている。

FCN16s

  • skip architectureありのモデル。
  • pool4からの特徴マップをconv7の出力に加算する。
  • pool4/conv7の出力と解像度が合わないためにconv7層の出力を2倍に拡大する。
  • 拡大にはbilinear upsamplingのパラメータで初期化された学習可能なdeconvolution層を使う。
  • pool4/conv7の出力の加算結果を16倍拡大して最終的な推論結果を出力する。

FCN8s

  • skip architectureありのモデル。
  • FCN16sに対してさらにpool3からの特徴マップを加算する。
  • pool3/pool4/conv7の出力の解像度を合わせるためにpool4の出力を2倍、conv7層の出力を4倍にする。
  • 拡大にはbilinear upsamplingのパラメータで初期化された学習可能なdeconvolution層を使う。
  • pool3/pool4/conv7の出力の加算結果を8倍拡大して最終的な推論結果を出力する。

結果

f:id:takuroooooo:20190501222406p:plain
以前のSOTAであるSDSとの比較。

f:id:takuroooooo:20190501222358p:plain
FCN32s/FCN16s/FCN8sの比較。
FCN8sが一番性能が良く、skip architectureが有効なことが示されている。

f:id:takuroooooo:20190501222414p:plain
FCN8sはskip architectureによって正確な推論が可能となっている。一方、skip architectureがないFCN32sではpoolingによって詳細な位置情報がかけてしまっているため推論結果がぼやけたイメージになってしまっている。

実装

github.com

参考リンク

[.html:title]
meetshah1995.github.io

cv-tricks.com

warmspringwinds.github.io

自分の実装

PyTorch

github.com

Keras

github.com

U-Net: Convolutional Networks for Biomedical Image Segmentation

SemanticSegmention関連の論文メモ
図は論文からの引用

目次

概要

コンテキスト情報を抽出するcontracting pathとアップサンプリングを行うexpansive pathを持ち、contracting pathの特徴マップを対応するexpansive pathにスキップ結合することでコンテキスト情報を抽出しつつ、正確な位置情報を伝播するU構造のネットワークの提案。

論文リンク

https://arxiv.org/pdf/1505.04597.pdf

著者

  • University of Freiburg
    • Olaf Ronneberger
    • Philipp Fischer
    • Thomas Brox

提案手法

f:id:takuroooooo:20190428004411p:plain

U-Net

特徴抽出を行うcontracting pathと画像を拡大するexpansive pathをもつU-Netを提案。

  • contracting path
    • 3x3 conv(paddingなし) + ReLUを2回 + 2x2 max pooling(stride2) のセットを繰り返すことでダウンサンプリングをしつつ特徴抽出を行っていく。
  • expansive path
    • 2x2 convによってチャネル数を半分にし画像の縦横をそれぞれ2倍にアップサンプリングする。
    • 対応するcontracting pathからの特徴マップをcropしてアップサンプリングされた特徴マップと結合する。これによりダウンサンプリングによって失われた位置情報が伝播される。
    • 結合した特徴マップを3x3 conv + ReLUで処理する。
  • final layer
    • 最後に1x1 convでch数を任意の数に調整する。

結果

f:id:takuroooooo:20190428013407p:plain 医療画像タスクの結果

実装

Keras
github.com

PyTorch
github.com

動画

www.youtube.com

メモ

  • 医療画像タスクはデータが少ない。そのためデータ拡張が重要になってくる。
  • 医療画像タスクは同じクラスが密接しているため(細胞とか)オブジェクトを分離することが難しい。本論文では細胞の境界のロスを大きくさせることで境界部分を分離して検出できるように工夫した。
  • 画面の端で畳み込みをする場合は、ミラーリングすることで画素がない領域を埋めるようにした。(Overlap-tile strategy )
  • FCNとの違い
    • スキップ結合するときにFCNは加算だがU-Netはconcatした後に畳み込みをする。
    • FCNは、中間のアップサンプリングは(bilinear upsamplingで初期化された) 学習可能なdconvolution filterで最終層のアップサンプリングは、学習不可なbilinear interpolation。U-Netは同様にdconvolutionを使うが初期値については特に指定されていない。