人工知能とか犬とか

人工知能と犬に興味があります。しょぼしょぼ更新してゆきます。

2020年04月の論文リスト

4月にこんな論文読んだよ、というまとめです。

今月も先月に引き続き自宅で過ごす日々でした。 緊急事態宣言も延長されることになったため、こういう日常はしばらく続きそうですね。

GW中はしばらく機械学習まわりの論文は読むのをやめ、積ん読していた本や別分野の論文などを読もうと思っています。

論文読解

Slowfast networks for video recognition

動画の行動認識手法であるSlowFastについて色々調べていました。 githubのトップにあるGIF動画がキャッチーで良いですね。

github.com

元になっている論文は、以下のものです。

  • Feichtenhofer, Christoph, et al. "Slowfast networks for video recognition." Proceedings of the IEEE International Conference on Computer Vision. 2019.

また、内部で使用されているNon-local neural networksはなんとなくぼんやり知っていたのですが、ちゃんと論文を読んではいなかったのでちゃんと読みました。

  • Wang, Xiaolong, et al. "Non-local neural networks." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.

任意の動画に対して本手法を適用しようとすると、githubで公開されているソースコードだけでなく、別途推論した人物領域検出結果と組み合わせる必要があります。 以下はKineticsの適当な動画にたいして適用し、一人分を表示した結果です。

f:id:wanchan-daisuki:20200501112654p:plain

動画を確認すると座っている子が何やら喋っているので、まあまあこの推論結果は合っていそうだな、という気がします。

Soft-NMS -- Improving Object Detection With One Line of Code

物体検出モデルの後処理として適用されるNMSのソフトなバージョン、というこの論文。 少々昔の論文ですが、NMSのような論文によってはサラッと1行で済まされる内容について改めて考えるというのはまあまあ大切なことかなと思って読んでみました。

内容はQiitaにまとめてみました。

qiita.com

Content and Style Disentanglement for Artistic Style Transfer

スタイル変換系の手法です。この手の論文はたくさんありますが、とりあえずコレを読んでみた感じです。こちらもQiitaにまとめてみました。

  • Kotovenko, Dmytro, et al. "Content and style disentanglement for artistic style transfer." Proceedings of the IEEE International Conference on Computer Vision. 2019.

qiita.com

PyTorch: An Imperative Style, High-Performance Deep Learning Library

PyTorchの論文です。普段お世話になっているので読まねば、と思っていたのですが、やっと読めました。内容的には概ね知っていることも多かったのですが、CPUとCUDAの非同期処理周りは知らないことばかりで興味深く読めました。

あと、恥ずかしながらPyTorch本体にプロファイラがあるというのは初耳でした。自分はボトルネックを探すときにNVidiaのVisual Profilerしか使ったことがなかったので、今度試してみようと思います。

  • Paszke, Adam, et al. "PyTorch: An imperative style, high-performance deep learning library." Advances in Neural Information Processing Systems. 2019.

f:id:wanchan-daisuki:20200501120258p:plain

Butterfly detection and classification based on integrated YOLO algorithm

YoLoを蝶々の検出に使ってみました、という論文です。少し前にThe Batchで紹介されていた論文です。既存手法で使われていたアノテーション方法の曖昧さを特定し厳密にしたり、複数の検出器を統合することで検出精度を上げたりと、地味なんだけれども物体検出手法を現場に適用しようとした際に生じる課題を丁寧に解決しているな、という印象です。

  • Liang, Bohan, et al. "Butterfly detection and classification based on integrated YOLO algorithm." International Conference on Genetic and Evolutionary Computing. Springer, Singapore, 2019.

MaskFusion: Real-Time Recognition, Tracking and Reconstruction of Multiple Moving Objects

少し古いですが、動画内の物体が動く状況でのStructure from Motion手法であるMaskFusionを提案している論文です。 以下のプロジェクトページの動画がわかりやすいです。

visual.cs.ucl.ac.uk

RGBからMask RCNNによって得られるインスタンスレベルでのセグメンテーションを行います。一方で、RGB-Dを元に頂点マップ・法線マップを出しつつ、各物体・背景の3次元姿勢推定も行いながら、各物体の3次元モデルを更新していきます。COCOで訓練されたMask RCNNを使用するので、COCOに存在しないクラスの物体は3次元モデルの推定対称外です。

SfM系の論文は初めて読むのでよくわからないところもありましたが、これから穴を埋めていってどうにか最前線に追いつけるよう来月以降も読み勧めていこうと思っています。

  • Runz, Martin, Maud Buffier, and Lourdes Agapito. "Maskfusion: Real-time recognition, tracking and reconstruction of multiple moving objects." 2018 IEEE International Symposium on Mixed and Augmented Reality (ISMAR). IEEE, 2018.

Context-Transformer: Tackling Object Confusion for Few-Shot Detection

Few-shotの物体検出手法です。考え方として面白いのは、新しいドメインの物体それ自体の特徴ではなく、物体の周辺の特徴から求めようという点でしょうか。

f:id:wanchan-daisuki:20200502105901p:plain

  • Yang, Ze, et al. "Context-Transformer: Tackling Object Confusion for Few-Shot Detection." arXiv preprint arXiv:2003.07304 (2020).

A Simple Baseline for Multi-Object Tracking

Multi Object Tracking(MOT)の手法です。シンプルでありながら、SotAを達成しているという研究です。 こちらはQiitaに解説記事を書いてみました。

qiita.com

ちょっと気になるのは、自宅のGTX 1080tiを使ったら16fpsしか出なかったことです。実際の動画に対してリアルタイムに推論をさせようとするときに、トラッキングのために計算されるコスト(IoUやRe-ID特徴の距離によって算出される)が大きくなってしまうため、精度も劣化しちゃいそうです。

AutoToon: Automatic Geometric Warping for Face Cartoon Generation

似顔絵の生成手法です。一般的なスタイル変換だけではなく、部位の誇張のような幾何的な変換の要素も入っています。教師なし手法かなと思って読み始めたのですが、実際には頑張って教師データを作っている教師あり手法でした。ネットワークの構造や損失関数などは、まあ教師ありながらそうするよね、というものでした。

  • Gong, Julia, Yannick Hold-Geoffroy, and Jingwan Lu. "AutoToon: Automatic Geometric Warping for Face Cartoon Generation." The IEEE Winter Conference on Applications of Computer Vision. 2020.

CSベストペーパー読解

先月に引き続きYAGOの論文を読んでいたのですが、自分の理解が甘いところが多く、まだ他人に紹介できる段階ではなさそう、ということがわかってきたので、もう少し読解を深めていこうと思います。 まあ、多少記事の公開が遅れたところで誰が迷惑するようなものでもないので、気楽にやっていきます。

ベストペーパーの読解に関しては、このブログとは別のサイトを立ててやるというのも面白いかなと思っています。

次の論文も決めたいところですが、プログラミング言語周りの論文を読んでみたいなあと思っています。とは言え、あまり最先端の研究だとついていけない可能性大なので、古典的なものを読んでいきたいなあ、と思っています。

実装

RepPointsの実装を行い、ひたすらデバッグを行っていました。しかし、コレが非常に難しかった。 CUDA周りのRuntime Errorが続発し、原因がよくわからない。結局DerformConv2dに入力するoffsetの値域をclampによって制限することでRuntime Errorを回避することができました。しかし他方で、マルチGPU環境で訓練させるとこれまた別のRuntime Errorが生じる。

GW明けにも引き続きデバッグを行っていく予定です。

2020年03月の論文リスト

3月に読んだ論文や実装してみた手法についてのまとめです。 花粉症で頭がぼんやりするつらい時期ということもあり、今月はあまり読めなかった。。。

新型コロナウイルスの影響で3月は100%在宅勤務でした。基本的にはインドア趣味なので、大したストレスは感じていないのですが、家庭事情によってはとても大変な思いをされている方もいると思います。 また、今回の騒ぎが社会に与える影響は様々にあり、これまでの社会の前提となっていた枠組みが、大きく変わる可能性もあるだろうなと、ぼんやりと考えています。

なんにせよ自分が技術を磨くことで少しでも世の中を良くできるはずだという強い信念を持って、4月も粛々と論文読んだり実装したりしていきます。

論文読解

SRHandNet: Real-time 2D Hand Pose Estimation with Simultaneous Region Localization

手のポーズの推定ってどんな物があるのかなあ、と適当に目についた論文を読んでみました。

www.yangangwang.com

特定のカテゴリに絞った検出手法もなかなか高速化・高精度化の工夫が楽しそうだなあという感じです。

本手法では、3つのチャネルで手の領域を表現しており、更にそれを利用して興味領域をズームし、手のキーポイント検出精度を上げるという流れになっています。 1080Tiで30fpsというのは、まあまあ速い気がします。

Image Segmentation Using Deep Learning: A Survey

セグメンテーション手法の復習のためにざっと読んでみました。

arxiv.org

全体的に知っていることがほとんどだったわけですが、Recurrent Neural Network Based Modelsという分野は知らなかったので収穫でした。

First Order Motion Model for Image Animation

静止画をお手本の動画のように動かすという手法です。

github.com

実際には、この論文だけを読んでも何をやっているのか今ひとつわからないので、以下の2つの論文を読む必要がありました。

  • Animating arbitrary objects via deep motion transfer
  • Unsupervised learning of object landmarks through conditional image generation

前者は通称MonkeyNetと呼ばれる静止画アニメ化手法の先行研究で、後者は教師なしキーポイント検出(抽出といったほうが適切かも)の手法です。 後者については、Qiitaに解説記事を書いてみました。

qiita.com

First Order ~ とMonkeyNetについては、一通り読んでみたのですが、まだ良くわかっていない部分もあるので、4月にまた読み直そうと思います。

ベストペーパー読解

YAGO: A Core of Semantic Knowledge Unifying WordNet and Wikipedia

一通り読みおわり、なるほど、ナレッジベースとはこういうものか、とわかったのですが、バージョンアップが何度か行われているようなのでその関連の論文も読んでみようかなと思っています。 4月中にはまとめてブログ記事を上げたいと思います。

実装

今月は2つ実装しました。

RepPoints

アンカーフリーの物体検出手法であるRepPointsを実装しました。torchvisionの0.5から、deformable convが実装されたので、それを使って実装しました。 残念ながら訓練ができていないのですが、多分大丈夫だろうと思っています。

StyleGAN v2

StyleGANのバージョン2は、出てわりとすぐに論文を読んだし、Qiitaにも解説記事を書きました。

qiita.com

しかし、いざ自分で実装するとなると、ProgressiveGAN由来の細かい工夫やアンチエイリアスを考慮したUpsampleなどが盛りだくさんで、ちょっと苦労しました。

実装したは良いものの、精度的に少々微妙で、CelebAの128x128くらいでも崩れた生成結果になるので、デバッグが必要そうです。

以上。

2020年2月の論文・実装リスト

2020年2月の論文と実装のリストです。

これから読むつもりの論文、実装するつもりの手法についても少し書いています。

論文読解

2月は、先月に引き続き単眼深度推定モデルの読解をしつつ、まえまえから気になっていた論文を読んでみました。 実際には、仕事で使うために別のテーマの論文も漁っているのですが、ここでは挙げません。全体合わせると10本くらいは読めたかなという感じです。

Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos

f:id:wanchan-daisuki:20200301140007p:plain

単眼深度推定手法では、映っている物体の動きに対する処理が雑なものが多かったところを、事前に物体領域をInstance Segmentationで切り出しておき、個別に動きも推定することで丁寧にやろうよ、という手法です。

また、推論時にオンラインでパラメータを更新することで、深度推定の精度を上げられるということも示しているのが特徴的です。

Depth from Videos in the Wild: Unsupervised Monocular Depth Learning from Unknown Cameras

f:id:wanchan-daisuki:20200301140716p:plain

自分が読んだ限りでは最新の単眼深度推定の最新の論文です。

これまでの多くの深度推定手法が、学習の過程でカメラの内部パラメータを事前に知っておく必要があったのに対して、本手法では、内部パラメータも推定するということを特徴にしています。これにより、きっちりキャリブレーションされたカメラで撮影された動画だけでなく、YouTubeなどにアップロードされた野良動画(Videos in the Wild)も教師データとして使うことができるようになっています。

これまで読んできた深度推定の論文が、ある意味で無味乾燥なKittiデータセットを使っていたのに対し、上図に示したような様々なシーンでの深度推定ができているのを比べると、とてつもない進歩を感じる手法です。

手法としては、オクルージョンへの対処を厳密に行っていること、オプティカルフローを推定するためのFlowNetベースの構造をつかって動く物体の運動を算出しているといった点が特徴的です。

Single Headed Attention RNN: Stop Thinking With Your Head

良くも悪くも話題になったSHA-RNNという、言語モデル手法に関する論文です。この論文が話題になったのは、提案手法そのものではなく、論文のスタイルにありました。 一般的な学術論文のスタイルを無視し、かなりくどい文章で書かれています。

私個人は英語の読解があまり得意ではないので、こういう自由な英語を読むのはとても苦労しました。そして本論文を読むのは時間の無駄だと判断し、全体を読むのは断念しました。

ただ、この論文のメッセージ自体は重要なことだと思いました。 技術の発展というのは、みんなで一つの方向に向かっていては成し遂げられない可能性がある、ということは技術で食っていく人間は肝に命じておくべきでしょう。そもそも、ニューラルネットワーク自体が数年前までは微妙な立ち位置だったわけですから。

Transformerをベースとした各種Pretrainedモデルの勢いは凄まじいものがありますが、RNN系の研究も地道に続けられています。RNN系の手法が将来NLPで重要な役割を果たす可能性は、まだ捨てきれないわけです。

EfficientDet: Scalable and Efficient Object Detection

f:id:wanchan-daisuki:20200301143417p:plain

物体検出のEfficientなアーキテクチャを考えてみたよ、という論文です。Efficientという名称からわかるように、EfficientNetをベースのネットワークとして使っています。

もっとも、主要な提案点はそこではなく、複数の解像度の特徴マップをブレンドしてFeature Pyramidを構築する新しいアーキテクチャであるBiFPNにあります。 個人的に面白いと思ったのは、特徴マップのブレンド方法を最適化するNAS-FPNというNeural Architecture Searchの手法が少し前に提案されていたのですが、 本手法では人手構築したネットワークによってそれを上回っているという点です。

NAS系の手法はどうしても探索空間の定義次第では「漏れ」が生じてしまうので、あまり過信しすぎるのもどうかな、と前々から思っていたので、そのような事例が出てきてよかった、と思いました。

Neural Tangent Kernel: Convergence and Generalization in Neural Networks

通称NTKと呼ばれる理論的な枠組みを提案している論文なのですが、さっぱりわからない。というわけで日本語解説記事を読んだりしていました。

medium.com

理論の肝となる部分は超ざっくりと、理解したつもりになれましたが、こういう道具をつかって色々と研究している人たちがいるんだなあと、いう超ぼんやりとした感想を抱いた次第です。

ベストペーパー読解

HighLife: Higher-arity Fact Harvesting

先月に引き続き、WebConf2018のベストペーパーを読んでいました。

www2018.thewebconf.org

そして先程、その読解感想記事をあげました。

takoroy-ai.hatenadiary.jp

YAGO: A Core of Semantic Knowledge Unifying WordNet and Wikipedia

上記の論文で、ナレッジベースに関する前提知識が必要な箇所があったのですが、そこらへんは適当に読み流していました。 でも、もう理解を深めたいなと思ったので、来月以降は、上記論文と同じ学会でTest of Time Awardを受賞したYAGOと呼ばれるナレッジベースに関する論文を読んでみたいと思っています。 2007年のWebConfで提案され、その後の研究に大きな影響を与えた、つまり時の試練に耐えた研究ということで評価されています。

まだアブストを読んだ程度なので、中身についてはこれからです。

実装

SfMLearner

今月は、先月実装したSfMLearnerをチューニングしていました。論文で示されていたsmoothingに関するハイパーパラメータだと出力結果が過剰にぼやけるということが判明し、それなりの結果を得るまでに結構苦労しました。

結果は以下のようになりました。精度とかは特に算出していません。

f:id:wanchan-daisuki:20200301150140p:plain

SfMLearnerの後続論文で、いくつか実装しやすい改善点が提案されているので、今後そこらへんを盛り込んで見ようかなと思っていますが、とりあえず来月はおやすみにしようと思います。

RepPoints

来月は、アンカーフリーの物体検出手法であるRepPointsを実装してみようかなーと考えています。RepPointsについては、以前Qiitaに解説記事を書きました。

qiita.com

torchvisionで正式にDeformableConvが使えるようになったので、その応用例としてRepsPointsを実装してみよう、という思い立ったためです。

Deformable Convolutionは、前々からC++ Extentionの勉強も兼ねて自分でスクラッチで実装しようかなと思っていたのですが、その前にtorchvisionで公式サポートされてしまいました。どんどんC++を書くモチベーションが下がっていっている今日このごろです。

【論文感想 #001】HighLife: Higher-arity Fact Harvesting

CS系の学会のベストペーパーに選出された論文や古典といえる論文を読むということを習慣的にやっていきたいなと思っています。 2ヶ月に1本くらいのペースで読んでいきたいと思っています。飽きたら自然消滅することでしょう。

初回の題材は、2018年のWorld Wide Web Conferenceでベストペーパーに選ばれた"HighLife: Higher-arity Fact Harvesting"です。

www2018.thewebconf.org

World Wide Web Conferenceは、World Wide Webに関する包括的なトピックを扱う国際学会で、毎年開催されているようです。Webに関する包括的な、ということでかなり幅広いジャンルの研究が集まるわけですが、機械学習に近い分野でいうと、ウェブマイニングやパーソナライズ、SNSの分析などが挙げられます。

今回取り上げる論文は、テキストマイニングに関する研究です。ウェブを含むテキスト情報から、何らかの知識を抽出する、という種類の研究です。 何となくぼんやり知っている範囲では、例えば、テキストからある単語の上位-下位、全体-部分といった関連性を持つ単語を抽出したり、特定のエンティティの属性を抽出するというというタスクがあります。

今回の論文では、n-arity factと呼ばれる、より高度な情報抽出を行います。例えば以下のような2つのタスクをある程度自動的にこなせるようになります。

  • 医療情報コーパスをもとにした、症状に対する薬の用法・用量の抽出
  • ニュース記事コーパスをもとにした、企業の買収情報、および、スポーツの受賞情報の抽出

より具体的には、実験において以下のようなn-arity factを抽出しています。

f:id:wanchan-daisuki:20200224115652p:plain

これらのタスクが先に上げた関連語や属性の抽出と比較して何が異なっているのかというと、与えられたエンティティに対して、一意に定まる様々な属性やエンティティを抽出するのではなく、複数の要素の組み合わせ全体を抽出する必要がある、という点にあります。

論文中では以下のような例が挙げられています。

An example is to capture which drug is used for which disease at which dosage (e.g. 2.5 mg/day) for which kinds of patients (e.g., children vs. adults).

薬物の疾患に対する利用においては、用量(dosage)が患者の種類(子供/大人)によって異なってきます。そのため、薬の用量という知識を正確に得るためには、誰に対して投与するのかという条件も込みで抽出しなければならない、というわけです。

全体像

まずは、手法の全体像を確認しましょう。

f:id:wanchan-daisuki:20200223183200p:plain

  1. Preprocessing/NERD:入力されたコーパスをもとに、前処理とNERDを行います。NERDは、Named Entity Recognition(固有表現抽出)とDisambiguation(曖昧性解消)の略です。エンティティの辞書として、既存のナレッジベースを使用しています。これによって、エンティティのアノテーションが行われた文章が得られます。
  2. Tree Mining:得られた文章に対して、依存関係木を構築します。そして依存関係木をもとに、Pattern Treeと呼ばれる構造に変換します。この木構造は、rootがn-arity factの要素のひとつである文章の主語、leafがn-arity factの各要素となるようなものになっています。
  3. Tree Analysis:コーパスから大量のPattern Treeが得られたところで、その中から、十分な頻度で出現する部分木pattern subtreeを抽出します。その後、検証済みのn-arity factをシードとして利用し、信頼できるpattern subtreeを得ます。この信頼できるpattern subtreeを、salient seed treeと呼びます。
  4. Tree Matching:このsalient seed treeを利用すると、他のpattern subtreeからn-arity factの候補を抽出できます。しかし、salient seed treeに完全にマッチする表現がpattern subtree内に出現することは稀ですので、salient seed treeとpatten subtreeの類似度を算出し、候補としての重みを決定します。
  5. Consistency Reasoning:得られたpattern subtreeからn-arity factの候補を抽出し、それらをマージし最終的なn-arity factとして採用します。その際に、事前に用意されたルールにpattern subtreeを当てはめていき、Weighted Max-Sat問題として解きます。

2, 3, 4あたりにたくさんの木構造が出てくるので、少し整理してみました。要するにseed factという検証済みのn-arity factを使って信頼できるパターンであるsalient seed treeを抽出し、それを使って他のfactに関わるpattern subtreeからfact候補を抽出する、という流れがつかめればよいかと思います。

f:id:wanchan-daisuki:20200224112251p:plain
fact候補抽出までの流れ

なお、本手法を特徴づける概念として、partial factというものがあります。n-arity factのn個の要素すべてが同一の文章に出現する、ということはあまりありません。そのため、n個の要素の一部のみを含む文章からもfactの一部を抽出し、マージしてあげることで完全なfactを得る必要があります。最後のステップであるConsistency Reasoningにおいては、その処理を行っています。

以下、細かく見ていきましょう。

NERD(Named Entity Recognition & Disambiguation)

NER

NERには、Stanford CoreNLPを使っています。既存のナレッジベースに収録されているエンティティを辞書として用いています。 ここらへんの処理は、この手の研究ではおそらく色々と蓄積があるんだろうなあ、と思いながら読んでいました。

  • 医療関係の文書に対しては、Unified Medical Language Systemに収録されているエンティティ辞書を用いています。この辞書は、3,221,702エンティティ、12,842,558名称をカバーしているそうです。効率的にエンティティの候補を見つけるために、MinHashを使用しているそうです。
  • ニュース記事に関しては、AIDAを曖昧性解消に利用しています。これは、YAGOのエンティティとリンクしています。
  • より一般的なDisambiguationは、WordNetのConsceptを利用して行っています。
  • 量的な表現(薬の投与量や企業の買収金額)については、エンティティの型やPOSタグ、具体的な単語を利用した正規表現を使って抽出しています。
  • 時表現は、Stanford CoreNLP sutime moduleを用いて、標準化しています。

Tree Mining

エンティティの情報が付与された文章に対して依存関係木を構築し、pattern treeに変換します。その流れを表したのが以下の図です。

f:id:wanchan-daisuki:20200224122239p:plain

2.5 mg Albuterol may be used to treat acute exacerbations, particularly in children.

という文章から依存関係木をつくっています。この依存関係木のノードに含まれるエンティティや量表現などをtargetと呼びます。targetは、最終的にはn-arity factを構成する要素の候補になります。

次に、得られた依存関係木(上図左下)から、pairwise pathと呼ばれるものを抽出します。pairwise pathは、主語であるtargetから、別のtargetへの道のりを表現します。 上記の例では、主語となるtargetはAlbuterolで、他のtargetは2.5 mg, acute exacerbations, childrenなどですが、それぞれについて以下のようなパスが抽出されます。

f:id:wanchan-daisuki:20200224140220p:plain

これらのpairwise pathをまとめ、pattern treeにします(2つ上の図の右)。pattern treeは、主語targetをrootとし、別のtargetがleafとなるような構造になります。複数のpairwise pathで重複する部分は、マージされます。これによって、各target、つまりfactの構成要素の間にどのような関係があるのかを木構造として抽出できたことになります。

Tree Analysis

一つの文章から得られたpattern treeは、様々なノイズを含む汚いものです。これを、コーパス内のすべての文章に対して抽出し(下図左)、その中で共通して高頻度で現れる部分木を比較的信頼できるpattern subtreeとして抽出します。

f:id:wanchan-daisuki:20200224145551p:plain

ここで、pattern subtreeは、高頻度で出現する部分木で、FreeTreeMinerというアルゴリズムによって抽出されます。いわゆるFrequent Pattern Miningの一手法ですね。

その後、人手で検証済みのseed factを用意します。このseed factを用いて、pattern subtreeの中で、より信頼のおけるsalient seed treeを抽出します。この時、Frequent Pattern Miningでよく使われるsupport(支持度)を用いて、pattern subtreeの信頼度(confidence)を算出します。これにより、どんなに高頻度であっても、seed factと相容れないtargetの組でも出現する無節操なpattern subtreeを除外できます。

confidenceは以下のような式で表現されます。

 {confidence}(PS(s))=\frac{{ support }(PS(s), SX(R))}{{ support }(PS(s), SX(R) \cup CX(R))}

SX(R)はseed fact(の一部)に含まれる要素からなる組、CX(R)はseed fact(の一部)とは相容れない要素からなる組です。これにより、n-arity fact及びその一部であるpartial factでよく出現する信頼度付きのsalient seed treeが得られます。

Tree Matching

salient seed treeを用いることで、seed factとは別のfact候補を表すpattern subtreeとの類似度を算出し、その中に現れる(partial) factの候補を得ることができます。

salient seed treeとpattern subtreeの類似度は、まず、そこに含まれるpairwise path同士の類似度を算出し、それらを掛け合わせて算出します。

pairwise path同士の類似度は、下式で表現されます。要するに、パスの長さが同一でない場合は0、長さが同一のときはパス内の要素がどれくらい同じかによって計算されます。

f:id:wanchan-daisuki:20200224160808p:plain

そして、部分木同士の類似度は下式のように、そこに含まれるpairwise pathの類似度の掛け算として表現されます(\operatorname{argmax}をここで使っているのは、誤植のように思います。たぶん。。。)。

f:id:wanchan-daisuki:20200224160707p:plain

この部分木同士の類似度を使って、salient seed treeに近いpattern subtreeに現れているfact候補を抽出します。この時、この(partial) fact候補には、salient seed treeのconfidenceと、salient seed treeとpattern subtreeの類似度を使って算出された重みが割り当てられます。

Consistency Reasoning

以上のようにして得られた大量の重み付き(partial)fact候補には、矛盾する内容も含まれるはずです。そういうわけで、候補同士の一貫性を、重みを考慮しながら整理していく必要があります。

ここで、様々なPredicateとそれらによって成り立つConsistency Ruleを用意し、そこにpattern subtreeから得られるfact候補の要素を当てはめ、論理的な推論をすすめることでfact候補の正当性を明らかにするという処理を進めます。この推論は、重み付きのものなので、Weighted Max-Sat problemという問題に帰着されますが、これに対する近似解法であるSOFIEという手法が本論文では使用されています。

まず、Predicateについては、以下のようなものを人手で頑張って用意しています。ドメイン知識を利用した臓器の全体-部分関係などは特徴的です。

f:id:wanchan-daisuki:20200224165948p:plain

次に、これらのPredicateを使ってfact候補の要素を論理的に表現し、以下のようないくつかのルールによってできるだけ整合性のあるもののみを最終的なfactとして出力します。

f:id:wanchan-daisuki:20200224164152p:plain

一番上のTree pattern-fact dualityは、pattern subtreeから、その中に含まれるtargetの型などの整合性を確認し、fact候補のタプルを作るというルールです。Mutual Exclusionは、矛盾する組み合わせのPredicate、例えば病気の原因を表すタプルの構成要素と病気への処方箋のタプルの構成要素が同じものであってはならないとか、企業の買収関係を表すタプルに含まれる買収する側・される側が逆転することがあってはならない、というように、論理的な矛盾を抑制するようなルールが挙げられています。

また、一番下のEquality Constraintsでは、partial factを組み合わせることで、一つの完全なfactを構築できるケースについてのルールを整備しています。 例えば、AthleteWonAward(Kerber,OlympicSilver,tennis, 2016,X)という一部が歯抜けになっているPredicateと AthleteWonAward(Kerber,OlympicSilver,Y, 2016, Rio) というPredicateは、組み合わせることで、AthleteWonAward(Kerber,OlympicSilver,tennis, 2016, Rio)という完全な形を作ることができます。

感想

と、パターンマイニング初心者が、畏れ多くも最高峰の論文をざっと読んでみました。 この分野の様々な蓄積が確認でき、それらをフルに活用している手法であることがわかりました。

固有表現抽出やら依存関係木の構築などは、自然言語処理の重要なアウトプットなわけですが、それを何に使うの、というのは恥ずかしながらあまり意識したことがなかったので、なるほどこういったナレッジベース構築の一つの前処理として使われるのだな、ということがわかり意義がよくわかった気がします。

また、Consistency Reasoningの部分で、機械学習分野だとおろそかにされがち?な論理的な推論をベースにした方法が採られているのが面白かったです。Weighted Max-Sat problemという問題の形式も初めて知ったのですが、それ以上に、人手でルールを書いていってそれをもとに推論させていくというプロセスは、大変そうだがうまく問題にハマるように設計できると気持ちいいだろうなと思いました。

なお、本論文を読む前に気になっていた点として、引用件数の少なさというのがあったのですが、その理由はConsistency Reasoningまわりの手作業の部分が再現を困難にしているのではないかなとも思いました。

2020年01月の論文リスト

概要

今月すでに読んだ、これから読む予定、実装する予定論文をまとめておきます。

1月が終わったので、簡単に振り返ります。 内容的に外部に共有して良さそうなものは、Qiitaとか本ブログで発信していく予定です。

論文読解

今月のテーマは単眼深度推定モデルにしていて、特に、訓練時にステレオカメラデータを必要としないタイプのもの、かつSelf-Supervisedなものを中心に読んでいます。 とはいえ、網羅的なサーベイはしておらず、目についたものをとりあえず読んでいるという状態です。来月も引き続きテーマにする予定です。

「ベストペーパーを読む」は、今年の最初の目標に挙げていた、いろいろな分野のベストペーパーを読んで行こうという企画です。 とはいえ、時間の制限を決めてチャレンジする、という企画なので、「へー、こんな分野があるんだねー」程度の理解しかできない可能性もあります。

また、それ以外にも、へーこんなのあるんだ、と発見したものを読んでいきます。

単眼深度推定

【済】How Do Neural Networks See Depth in Single Images?

サーベイも兼ねて、単眼深度推定モデルが何を根拠に深度の推測をしているの、という論文です。 詳細はQiitaに記事を書きました。

qiita.com

個々のモデルの内部には一切触れずあくまでブラックボックステストを行うような実験だったので、サーベイとしては微妙ですが、こういう弱点に気をつけなければいけないんだな、ということがわかって、なかなかおもしろい論文でした。

以下の論文は、本論文で比較対象になっている手法ですが、余裕があったら読もうと思います。

  • SemiSupervised Deep Learning for Monocular Depth Map Prediction
  • Unsupervised Monocular Depth Estimation with Left-Right Consistency

【済】Unsupervised Learning of Depth and Ego-Motion from Video

いわゆるSfMLearnerの論文です。これも「How Do ~」で比較対象になっています。 Depthを予測するネットワークとPoseを予測するネットワークを組み合わせる手法で、Self-Supervisedなところが特徴です。 Self-Supervisedの手法の中ではよく引かれる論文で、源流になっていますね。

【済】Learning depth from monocular videos using direct methods

これも「How Do ~」で比較対象になっています。 こちらは、SfMLearnerのPose部分を、DDVOという手法に変えているものです。 端的に言えば、SfMlearnerの場合は、2つのフレーム画像からPoseを推定しますが、DDVOの方は、推定した深度マップも加えてPoseの推定に使う、というもののようです。

興味深いのは、DDVOを使う場合は、ニュートン法を使用してPoseを推定します。初期値としてPoseCNNの出力結果を使うと、より良いとのことです。

【済】Digging Into Self-Supervised Monocular Depth Estimation

MonoDepth2として公開されている手法の論文です。 既存の手法の細かい不具合を取り除くための3つの提案をしている論文です。

【済】Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos

struct2depthという名前で公開されている手法の論文です。

sites.google.com

深度を推定するだけでなく、周囲の物体の運動も捉えるという手法のようです。 まだ読み始めていないのでテキトーな予想ですが、単眼深度推定は動いている物体は基本的にうまくいかないので、速度の推定も同時に行うことで、深度推定もロバストになるよ、というのは有り得そうな話です。

周囲の物体は事前にインスタンスセグメンテーションしておく、という前処理が必要です。その後、まずはPoseを推定して単純な再構成画像を作ります。このとき、セグメンテーションされた各物体も同時に再構成しますが、再構成損失には関与しません。単純な再構成画像は、「もし、周囲の物体が動いていなければ別視点からはこう見える」という意味合いです。そのため、別視点から見たときの真の物体の見た目と単純な再構成画像とを見比べると、「その物体が動かなかったときの見た目」と「その物体が動いたときの見た目」を比較することになりますので、そこから物体の運動を推定できる、ということみたいです。

【途】ベストペーパー:HighLife: Higher-arity Fact Harvesting(WWW2018 Best Paper)

WWW2018のベストペーパーです。 いわゆるWebマイニングの研究ですが、通常、Web上から関係抽出を行う際は、Triplet(3項)を作って行う、というのが一般的なところを、より多項の関係(Higher-arity)でやろうという研究のようです。 論文をざっと見ると、何やら木構造が描いてあり、探索アルゴリズム的な手法を提案している雰囲気が漂っています。 引用件数がそんなに多くないので、再現や改善する上での制約があるタイプの研究なのかもしれません。

深度推定系の論文を読むのが意外と骨が折れたので、途中までしか読んでいません。別に急ぐ必要はないので、2月の半ばくらいまでを目処に目を通してみたいです。

その他

【済】Analyzing and Improving the Image Quality of StyleGAN

StyleGANのversion2です。 StyleGANは、画像生成モデルにStyleTransferで使われるAdaptive Instance Normalizationを使ってやったぜって研究だったわけですが、 この論文では、AdaINはお払い箱になり、それに代わる機構が導入されています。

詳細はQiitaに解説記事書きました。

qiita.com

【済】Unsupervised Robust Disentangling of Latent Characteristics for Image Synthesis

ICCV2019でDisentangle系の論文をいくつか読みたいなと思ったので、そのうちの1つです。 例として挙げられていた、人物画像の服装の入れ替えがオモシロイと思ったので、読んでみようとしています。

画像中の人物や物体の見た目(appearance)と姿勢(pose)を分離したエンコード表現を得る、ということを目的とし、それらを合成して任意のポーズと見た目を組み合わせた画像を生成できる、という手法でした。 見た目と姿勢の情報を分離するために、敵対的分類器を創り、見た目情報と姿勢情報との相互情報量が最小になる、つまり、それぞれが独立するように訓練していきます。

一通りは読んだのですが、久々に読むVAE系の手法なので、色々と基本的な数式を忘れてしまっていて雰囲気で読んでしまったので、来月以降この手の手法を一気に再読する機会を設けたいなあと思います。

【未】Content and Style Disentanglement for Artistic Style Transfer

ICCV2019でDisentangle系の論文をいくつか読みたいなと思ったので、そのうちのもう1つです。 こちらは画風の変換モデルにDisentanglementの観点を入れてみたというもののようですね。

残念ながら手つかず。少し間を開けて上の論文の再読時に読もうと思います。

再現実装

【済】OpenPose(2018年版)

OpenPoseって結構まえからある姿勢推定のモデルなわけですが、2016年版と2018年版があるということを最近知りました。 というわけで、2018年版の論文を昨年末に読んだので、それを実装しています。

実装はすでに終わっていて、現在Training中です。 後処理の実装は並行して進めていますが、こちらもほぼ完了しています。PAFsの後処理がめんどくさいかなと思っていましたが、意外とすんなり実装できました。 チューニングとかも含めて今月中に完了できればいいなあ、と思います。

Qiitaに実装上の気付きも含めた解説記事も書いてみました。

qiita.com

チューニングがやや甘いので、来月以降も少しやっていこうと思います。 データセット作るのが大変だとは思いますが、人間以外の動物や物体に対しても本手法を適用して学習させてみたいです。

【途】SfMLearner

論文も読んだし、まずは基本的な単眼深度推定モデルを実装してみようと思い、SfMLearnerをPyTorchで再現実装中です。 ネットワークの実装はほぼ完成しており、再構成画像をPoseとDepthと入力フレーム画像から作成する、という部分が残っているぐらいです。 こちらもチューニング含めて今月中に一段落させたいところです。

一通り実装は完了して、これからデバッグと実験です。実験は試算してみたところ、GTX1080ti singleだと2日かかりそうです。 来月にいくつか別の論文の改善要素も取り込んでみながら引き続きとりくんでみようと思います。

まとめ

  • 論文:7.5本

  • 論文解説記事:4本

この記事に挙げているもの以外に、RepsPointに関する解説記事を書きました。

qiita.com

  • 実装:1.5個

2020年の目標的な何か

2020年になりました。

今年のなんとなくぼんやりとした目標があるので、書き出しておいておきます。

深層学習・機械学習の鍛錬

仕事や趣味で、画像認識系の深層学習手法について、色々と論文読んだり実装したりしています。 広く・浅く、ときどき深く、という方針でやっているので、新しい分野への挑戦と、自分なりの研究テーマの深堀りを進めていきます。

3D系の深層学習に手を出してみる

今年は3次元画像認識に手を出そうとおもいます。 強化学習の方向に進めるというのもありかと思ったのですが、どうも自分は「認識」にしか興味がわかないようです。

Mixed Reality系の分野ともちょっと関わることがあるかも、みたいなことも想定して、深度推定や三次元再構成など、3D系の色々に手を出そうと考えています。 また、そのための道具についても、色々と学んでいこうと思います。例えば、Unreal EngineBlenderについても、少しくらいはできるようになっておきたいです。

機械学習系論文をコンスタントに読む

仕事でも必要なもの・ないものに関わらず、機械学習系の論文を読むことが習慣化されてきたように思います。 今でも月最低5・6本は読めていますが、もっとペースを上げて、週3本をコンスタントに読んでいきたいと思います。 読んだものについては、Qiitaで紹介記事を書いてみたり、再実装してみたりしたいと考えています。

研究を形にする

いくつか進めている研究があるので、なんとか形にして世に出したいと思っています。 論文や研究会発表なんて学生のとき以来で、うまくいくかわからないし、勤め先の支援が得られるかどうかわからないけれど。

コンピュータ・サイエンスへの再入門

最近コンピュータ・サイエンス(CS)分野への再入門を考えています。 しかし、教科書を読むという硬い感じではなく、もう少しゆるくサクッとやる方法はないかなと考えています。

CSの古典論文・ベストペーパーを読む

教科書を一冊読み通すのはしんどいので、論文を読む、という企画を考えています。 どう考えても、途中で不勉強な分野にぶつかって教科書をつまみ読みすることになったり、読み始めたはいいが全くわからんということも起きうるのですが、それでも気にせずやる予定です。

具体的には、以下のようなリストを利用し、ランダムにピックアップして読んでいこうと思います。

あとは、リストとしてはまとまっていない気がするけれど、Test of Time Award系の論文も面白そうなので入れるかもしれません。

新しい言語を学ぶ:Rust

自分の現状のメイン言語はPythonで、基本的にはこれからもメインの言語としていきたいのですが、 Pythonよりも少し低級な言語に進めば、CSへの再入門にもつながるかなと思うのでRustに入門してみたいと考えています。

最近O'ReillyのOnline Learningに入ったので、評判の良さそうな教科書を読みながら地道にやっていこうと思います。

以上です。

【私的まとめ】2019年12月の機械学習関連記事

2019年も残すところあと一日、といったタイミングで、今月面白かった記事をまとめておきます。

2019年面白かった論文リスト@Reddit

毎年この時期になると、2019年面白かった論文に関するスレッドがRedditで挙がります。 基本的に論文の調査は各国際学会の掲載ページで行うことが多いのですが、 普段見過ごしているジャンルの論文にも触れることができるので、毎年このリストを見るのが楽しだったりします。

www.reddit.com

Weight Agnostic Neural Networks

weightagnostic.github.io

ニューラルネットワークの形状それ自体によって、重みの学習なし(Weight Agnostic)に様々なタスクをどの程度解くことができるのかを実験している論文です。 ネットワークの構造が持っている事前知識(Prior)が存在することは、みんななんとなくわかっているわけですが、それだけでどこまでできるのか、という問題設定はなかなかチャレンジングです。

公式のプロジェクトページがインタラクティブになっていて、見ているだけでも楽しめます。

参考: [DL輪読会]Weight Agnostic Neural Networks

The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks

arxiv.org

いわゆる「宝くじ仮説」の論文。巨大なニューラルネットワークの精度が良いのは、ランダムなパラメータの中から「アタリ」を見つけやすくなるから、というざっくりとした理解です。 概要だけはふわっと知っていたのですが、改めてざっと眺めてみると、パラメータの初期化やプルーニングなどにも示唆がありそうな論文です。

参考: The Lottery Ticket Hypothesis: Finding Small, Trainable Neural Networ…

Reconciling modern machine learning practice and the bias-variance trade-off

arxiv.org

バイアス-バリアンストレードオフといえば、機械学習のどんな教科書にも載っている基本的な原理ですが、それに対する疑いを投げかけている論文です。 深層学習で使われる多くのパラメータを持つモデルは、教師データに正確に適合するように訓練され、通常はこのようなモデルは過剰適合とみなされますが、それでもテストデータの精度が高くなることがあります。 この論文では、そのような特性を"double descent curve"として示し、従来のバイアス-バリアンストレードオフとの接合を図っています。

f:id:wanchan-daisuki:20191230131103p:plain
二重降下曲線

参考: www.youtube.com

ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness

arxiv.org

ImageNetで学習したCNNは、形状よりはテクスチャを優先して判断するようなバイアスが掛かっているよ、という指摘をしている論文です。 スタイル変換した画像で訓練すればテクスチャの影響が減って形状側にバイアスをかけられるよ、という当たり前といえば当たり前の解決方法が提案されています。

参考: 論文紹介: ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness - Qiita

2019年のPythonパッケージ10選の中から3つ

毎週楽しみにしているPyCoder's Weeklyというニュースレターで紹介されていたTop 10 Python libraries of 2019を読んで、自分のアンテナの悪さを感じたので、機械学習に関係あるものを3つほどピックアップしておきます。NetflixのMetaFlowも気になるには気になるのですが、あまり内容を把握していないので、この記事では取り上げません。

FastAPI

fastapi.tiangolo.com

API機械学習エンジニアの成果物になることはよくあることだと思いますが、FastAPIはその道程を極限まで短縮してくれます。 今までFlask+Flask-RESTPlusという構成で作成していたAPIを、一気に簡略化できるという代物です。 pydanticでtypingを使った入出力スキーマを定義し、それに沿ったエンドポイントを作成してあげると、即座にRestfulなAPIが作成され、Swagger UI(APIのドキュメント)も自動で生成されます。

Streamlit

streamlit.io

以前の記事でも紹介しましたが、どんどん改良を重ねているStreamlit。前はWindows環境で起動するとHello worldアプリケーションが落ちたりと、いろいろとまずい感じだったのが、もう解消されています。 機械学習モデルを構築したあとにどういうふうに見せるか、という点に特化したフレームワークは、意外と今までなかったので、個人的には仕事でバリバリ使っており、とても重宝しています。 転職活動などをする方は、機械学習まわりのポートフォリオとしても使用できるのではと思います。

Transformers

github.com

トップの顔文字が印象的なhuggingface/transformersは、最近資金調達をして本格的にTransformerベースのNLPモデルの整備に乗り出す模様です。 TensorFlow 2.0とPyTorchの両対応というところもすごいと思いますが、最近公開されたパイプライン機能もすごい。 以下のようなQuestionAnsweringが一瞬でできるというのは、圧倒的進歩を感じさせます。

f:id:wanchan-daisuki:20191230135502p:plain

今月は以上です。