読者です 読者をやめる 読者になる 読者になる

Zero-shot / One-shot Learningに関する資料集

書きかけ 機械学習 画像処理 論文・資料・スライド集 Zero-shot Learning
  • 定義
    • Zero Shot Learning
    • one shot learning
  • 関連研究・スライド
    • 2008年
      • Zero-data Learning of New Tasks
    • 2009年
      • Zero-Shot Learning with Semantic Output Codes
      • Learning To Detect Unseen Object Classes by Between-Class Attribute Transfer
    • 2013年
      • Zero-Shot Learning Through Cross-Modal Transfer
      • DeViSE: A Deep Visual-Semantic Embedding Model
    • 2014年
      • Transductive Multi-view Embedding for Zero-Shot Recognition and Annotation
    • 2016年
      • ECCV 2016 Tutorial
      • Matching Networks for One Shot Learning
      • Low-shot Visual Recognition by Shrinking and Hallucinating Features
      • One-shot Learning with Memory-Augmented Neural Networks
      • Zero-Shot Learning of Intent Embeddings for Expansion by Convolutional Deep Structured Semantic Models

必要になったので。

おおよそ時系列順、専門外なので網羅できてません…。

定義

Zero Shot Learning

主に画像系のタスクに於いて、

複雑な問題(セグメンテーションなど)への教師データ作成のためのアノテーションのコストは増加する傾向にある。

さらに複雑な問題に対しては、教師データの数はさらに少なくなる。

教師データが僅かしかない、もしくは存在しないラベルに対して正確な予測、もしくは未知のラベルであることを予測できるようにする。

one shot learning

関連研究・スライド

2008年

Zero-data Learning of New Tasks

元論文:Larochelle, Hugo, Dumitru Erhan, and Yoshua Bengio. “Zero-data Learning of New Tasks.” AAAI. Vol. 1. No. 2. 2008.

続きを読む

エラー解決:PythonのAnaconda環境でXGBoostを利用した時「Reason: image not found」

エラー解決

エラー内容

XGBoostをimportする時に

Reason: image not found

となるか、jupyter notebookのカーネルが死ぬ。

解決方法

conda remove xgboost
conda install -c aterrel xgboost=0.4.0

でオッケー。ただしこのバージョンでは自分で定義した目的関数を使った回帰ができないので注意。

原因

CNNを用いたテクスチャ合成(Texture Synthesis)の仕組みのメモ

機械学習 深層学習 画像処理

自分の研究が画像処理系の機械学習と関係ないのでやや適当です。

問題設定と評価指標

[Gatys2015]より。

ある画風の画像を入力して、その画風を持った見た目が自然な画像を出力する

画風の元になった画像が認識できない状態を保って成功とする。つまり画像のつぎはぎが目立つ、といったケースは問題にしない。

CNNを用いた画風変換の元になったモデル。

既存の手法

パラメトリック、ノンパラメトリックと大きく二つの方針に分かれている。

ノンパラメトリックな手法

画風の元になる画像を指定して、そこから画風(を表してると思われるもの)をうまくサンプリングして新しい画像や物体に適用する。

画風変換で検索すると、もはやCNNベースの手法しか検索で出てこないけれど、「Fast texture synthesis using tree-structured vector quantization」という有名な論文がある。これは、小さなテクスチャ画像を自然な形で大きく変換するアルゴリズム。同論文著者はサーフェス上へのテクスチャの適用などこれ関係の論文とレビューに明るい方。CNNベースの手法が出る前のテクスチャ合成に関するサーベイ論文は[Wei2009]が詳しい。

f:id:misos:20170214082754p:plain

[Wei2000]より。黒色箇所が補完されて画像のつなぎ目のない自然な画像へと変換できている。

パラメトリックな手法

[Portilla2000]による“steerable pyramid"を拡張した手法。

Steerable Pyramid: The Steerable Pyramid: a translation- and rotation-invariant wavelet representation for images

提案手法

概要

提案手法はパラメトリック(そもそもモデルにハイパーパラメータがいくつもあるので)な手法に分類される。CNNを用いて行う作業は大雑把に

ステップ1. 画像から様々なサイズの特徴を偏りなく抽出して入力テクスチャの画風を取得

ステップ2. ホワイトノイズだけの画像を元のテクスチャから生成した特徴を用いて元のテクスチャとは違う(けれど画風は同じ)画像を生成する

※Deconvolution: 画像の特徴マップ(中間層)をCNNの入力空間に伝播させて入力空間の画像に変換する

の三段階に分かれる。

詳細

ステップ1

テクスチャ生成のための特徴を作成するステップ。

CNNにテクスチャ画像を入力した時に各レイヤーで得られる特徴マップ(レイヤーkでの特徴マップFk)を取得する。この時 Fk は レイヤーkにおける”特徴マップの数”×"バクトル化した特徴マップ"の大きさの行列で表現できる。 なのでこの行列Fkの ij要素は i番目のフィルターをレイヤーkに適用した時の出力ベクトルのj番目の要素に対応している、かな?

テクスチャに存在する画像の位置情報によらない画風に関する情報は特徴マップの相関で表現できるはず、相関が全くないならば異なる特徴マップに共通する要素=画風が存在しないことになってしまう。

このようにして求めた相関の情報(グラム行列)がCNNのそれぞれのレイヤーについて計算できる。

ステップ2

ステップ1で作成した特徴を元にして新しいテクスチャを作成するステップ。 ホワイトノイズ画像をCNNを用いてDeconvolutionしていく。

この時ステップ1で求めた相関の情報(グラム行列)が画風に関する情報と見て取れるので、Deconvolutionする過程で得られるレイヤーごとのグラム行列をステップ1で求めたグラム行列になるべく近づけることでホワイトノイズ画像を元のテクスチャの画風に寄せていく。

f:id:misos:20170214094252p:plain

[Gatys2015]より引用。真ん中の□がレイヤーごとのグラム行列で、元テクスチャのグラム行列とホワイトノイズ画像のグラム行列の間の損失を少なくすることで似た画風の異なる画像を生成する

この時、最も重要となるのはグラム行列の間の差を計算する損失関数となる。レイヤーlでの損失はレイヤーlに存在するフィルター数Nと特徴マップのベクトル長Mで割って平均化した

f:id:misos:20170214094651p:plain

で、モデル全体での損失は単純にそれらの重み付け(ここがパラメトリック)和を計算した

f:id:misos:20170214094812p:plain

で表される。この損失を最小化する高次元の最適化問題をL-BFGS法を用いて計算する。

これを基にした画風変換

参考文献

[Gatys2016]Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “Image style transfer using convolutional neural networks.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

[Gatys2015]Gatys, Leon, Alexander S. Ecker, and Matthias Bethge. “Texture synthesis using convolutional neural networks.” Advances in Neural Information Processing Systems. 2015.

[Wei2000]Wei, Li-Yi, and Marc Levoy. “Fast texture synthesis using tree-structured vector quantization.” Proceedings of the 27th annual conference on Computer graphics and interactive techniques. ACM Press/Addison-Wesley Publishing Co., 2000.

[Wei2009]Wei, Li-Yi, et al. “State of the art in example-based texture synthesis.” Eurographics 2009, State of the Art Report, EG-STAR. Eurographics Association, 2009.

[Portilla2000]Portilla, Javier, and Eero P. Simoncelli. “A parametric texture model based on joint statistics of complex wavelet coefficients.” International journal of computer vision 40.1 (2000): 49-70.

エラー解決:Exception: The shape of the input to "Flatten" is not fully defined

エラー解決

エラー内容

kerasを用いている時に

Exception: The shape of the input to "Flatten" is not fully defined ...

のエラー

解決方法

モデルの定義が正しい(レイヤー間の次元数の数が正しい)のに失敗する時は

vim ~/.keras/keras.jsonとして

{
    "image_dim_ordering": "tf",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "tensorflow"
}

の記述をチェック。

  • "backend": "tensorflow"なら"image_dim_ordering": "tf"
  • "backend": "theano"なら"image_dim_ordering": "th"

に変更する。記述しないと"image_dim_ordering": “tf”`に指定されて、この時に theanoを使用するとエラーになる。

dockerでのコンテナ作成、削除関係のコマンド一覧

コマンド

実験で使用するため。Mac OS X、Docker version 1.13.0環境での内容。 HPOlibがなかなか動かせないので一度Dockerfileを作っておきたくてその時の作業メモ。

イメージ

イメージ一覧

docker image ls

イメージ取得

docker pull IMAGE_NAME

ubuntu 14.04の環境で実験を行いたい場合は

docker pull ubuntu:14.04

イメージ削除

docker rmi IMAGE_ID

既存のコンテナからイメージを作成

docker commit CONTAINER_ID

コンテナ

公式のリファレンスなどを参照したほうがいい。

コンテナ一覧

docker ps -a

コンテナ起動

docker run -d -p 8888:80 --name CONTAINER_NAME IMAGE_NAME

-p 8888:80によってlocalhost:8888とコンテナのポート80をつなぎます。

コンテナに指定した名前をつけて起動して、コンテナに入る

docker run -it --name="CONTAINER_NAME" IMAGE_NAME:TAG_NAME /bin/bash

ubuntu:14.04の場合を例にすると、

docker run -it --name="demo2" ubuntu:14.04 /bin/bash

ホスト側のディレクトリをコンテナ内にマウント

コンテナ内でMac上のディレクトリへのアクセスをできるようにして、そこでファイルをやり取りしたい場合に利用。dockerコマンドを実行しているディレクトリ$(pwd)以下のDIRNAMEディレクトリとコンテナ内のABS_PATH_TO_DIRディレクトリをつなげます。

docker run -it --name="CONTAINER_NAME" -v $(pwd)/DIRNAME:ABS_PATH_TO_DIR IMAGE_NAME:TAG_NAME /bin/bash

具体的には

docker run -it --name="demo2" -v $(pwd)/mount:/mount2 ubuntu:14.04 /bin/bash

など。

コンテナ削除

削除前に停止する必要があります。

docker stop CONTAINER_ID;docker rm CONTAINER_ID

Dockerfile関係

以下のようなDockerflieを作成して、ビルドします。こうすることでDockerfileさえあれば同じ環境をいつでも作る事ができます。Dockerfileの中身を適当に記述して…

FROM ubuntu:14.04
MAINTAINER misos <sample@hoge.com>

RUN locale-gen en_US.UTF-8
ENV LC_ALL en_US.UTF-8

RUN \
    apt-get update  \
    apt-get -y install \
    software-properties-common \
    vim \
    wget \
    unzip \
    curl \
    git-core \
    python-dev \
    python-pip \
    python-numpy \
    python-nose \
    python-scipy \
    python-pandas \
    python-protobuf \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

上記ファイルを DOCKERFILE_DIRディレクトリ以下に保存、そして

docker build DOCKERFILE_DIR

を実行。DOCKERFILE_DIRはDockerfileのあるディレクトリ。

普段はRUN apt-get update ...の後に RUN pip2 install ...などが続く。

参考文献など