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

Anaconda環境でauto-sklearnをインストール

エラー内容

python2.7, 3.5にて、OSはMac OS X.

auto-sklearnのドキュメントにしたがって Anaconda以下で指定の手順でauto-sklearnをインストールすると、 以下のエラーで止まってしまった。

ted_api.h:15:2: warning: "Using deprecated NumPy API, disable it by "          "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
    #warning "Using deprecated NumPy API, disable it by " \
     ^
    pyrfr/regression.cpp:496:10: fatal error: 'random' file not found
    #include <random>
             ^
    1 warning and 1 error generated.
    error: command 'gcc' failed with exit status 1
    
    ----------------------------------------
Command "/Users/ユーザー名/anaconda/envs/python27/bin/python -u -c "import setuptools, tokenize;__file__='/private/var/folders/yp/khbks_h91tlbdvqxnxyqtv5m0000gp/T/pip-build-g8wAgb/pyrfr/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /var/folders/yp/khbks_h91tlbdvqxnxyqtv5m0000gp/T/pip-jCTD7x-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/yp/khbks_h91tlbdvqxnxyqtv5m0000gp/T/pip-build-g8wAgb/pyrfr/

インストール手順

python2.7にて以下の手順でインストール成功。

環境に入る

$ source activate python27env 

gccをインストール

conda install gcc

(必要なら)以下のライブラリをアンインストール

pip uninstall pyrfr
pip uninstall auto-sklearn

auto-sklearnのインストール

$ curl https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt | xargs -n 1 -L 1 pip install
$ pip install auto-sklearn

参考文献

What is auto-sklearn? — AutoSklearn 0.1.3 documentation

Zero-shot / One-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を使用するとエラーになる。