All Projects → GINK03 → Alt I2v

GINK03 / Alt I2v

alternative illustration2vec implitation of sigmoids of fully connected layer

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Alt I2v

HLML
Auto-generated maths library for C and C++ based on HLSL/Cg
Stars: ✭ 23 (-28.12%)
Mutual labels:  vectorization
ultra-sort
DSL for SIMD Sorting on AVX2 & AVX512
Stars: ✭ 29 (-9.37%)
Mutual labels:  vectorization
Cranium
🤖 A portable, header-only, artificial neural network library written in C99
Stars: ✭ 501 (+1465.63%)
Mutual labels:  vectorization
KuiBaDB
Another OLAP database
Stars: ✭ 297 (+828.13%)
Mutual labels:  vectorization
DrawingBotV3
DrawingBotV3 is a software for creating line drawings from Images
Stars: ✭ 161 (+403.13%)
Mutual labels:  vectorization
reach
Load embeddings and featurize your sentences.
Stars: ✭ 17 (-46.87%)
Mutual labels:  vectorization
Boost.simd
Boost SIMD
Stars: ✭ 238 (+643.75%)
Mutual labels:  vectorization
Univariate Linear Regression Gradient Descent Javascript
⭐️ Univariate Linear Regression with Gradient Descent in JavaScript (Vectorized)
Stars: ✭ 9 (-71.87%)
Mutual labels:  vectorization
std find simd
std::find simd version
Stars: ✭ 19 (-40.62%)
Mutual labels:  vectorization
Sleef
SIMD Library for Evaluating Elementary Functions, vectorized libm and DFT
Stars: ✭ 353 (+1003.13%)
Mutual labels:  vectorization
qHilbert
qHilbert is a vectorized speedup of Hilbert curve generation using SIMD intrinsics
Stars: ✭ 22 (-31.25%)
Mutual labels:  vectorization
runtime
AnyDSL Runtime Library
Stars: ✭ 17 (-46.87%)
Mutual labels:  vectorization
artic
The AlteRnaTive Impala Compiler
Stars: ✭ 16 (-50%)
Mutual labels:  vectorization
fasterRaster
Faster raster processing using GRASS GIS
Stars: ✭ 18 (-43.75%)
Mutual labels:  vectorization
Text2vec
Fast vectorization, topic modeling, distances and GloVe word embeddings in R.
Stars: ✭ 715 (+2134.38%)
Mutual labels:  vectorization
Guided Missile Simulation
Guided Missile, Radar and Infrared EOS Simulation Framework written in Fortran.
Stars: ✭ 33 (+3.13%)
Mutual labels:  vectorization
hypothesis-gufunc
Extension to hypothesis for testing numpy general universal functions
Stars: ✭ 32 (+0%)
Mutual labels:  vectorization
Xsimd
C++ wrappers for SIMD intrinsics and parallelized, optimized mathematical functions (SSE, AVX, NEON, AVX512)
Stars: ✭ 964 (+2912.5%)
Mutual labels:  vectorization
Neanderthal
Fast Clojure Matrix Library
Stars: ✭ 927 (+2796.88%)
Mutual labels:  vectorization
frovedis
Framework of vectorized and distributed data analytics
Stars: ✭ 59 (+84.38%)
Mutual labels:  vectorization

Alternative Implementation Of Illustration2Vec Ver2.

Alternative Illustration2Vec Ver2の概要

  • 画像をタグ等の特定の特徴量に従ってベクトル化できる
  • このベクトルとは通常画像分類で用いられるsoftmaxなどのマルチクラスではなく、softprobの(*1)問題として捉えることができる

Version2の改善、変更点

  • Ver1に比べて探索的であって割とひどいコードを修正して、わかりやすく変えました
  • 150x150の画像のサイズから、224x224にスケールアップしました
  • BatchNormalizationだけでなく、DropOutも併用してネットワークのスパース性を高めました
  • Msgpackを用いたKVSをやめて、ただのPickleで画像のシリアライズをする様になりました
  • Keras V2のインターフェースに合わせました

*1 softprobはxgboostの用語でありますが、各クラスに該当するものが、その確率値を返すものです

VGG16の転移学習

VGG16の評価モデルはよくチューニングされており、別段何かしなくても良いパフォーマンスが出せます
そのため、VGG16の評価モデルを転移学習することでそのチューニングされた良い状態を保存しつつ、softprobに該当する部分を付け足すことで、illustration2vecに該当する機能を付与させます

モデル図

毎回気持ちですみません(しかし、なんらかの活性化関数の新規のものの提案というスタイルではないので、雑でいいという思いがあります)

図1. モデルのイメージ

転移学習時のネットワーク設計

今回は過去最大の5000次元を予想するというタスクであったので、全結合層をReLuで結合していきます
前回はBatchNormalizationのみでやったのですが、これだけを用いうることに少し不安があったので、DropOutを30%のデータを入れるようにしました
ReLu, DropOutともネットワークを疎結合にする役割が期待できますので、ネットワークの意味のクラスタが獲得しやすくなると期待できます

オプティマイザと損失関数

これ系のタスクではAdamかSGDが良い成績をいつも収めることが期待されていますので、何も考えず、Adamで決め打ちです

  • オプティマイザ、Adam : LearningRate 0.001
  • 損失関数、BINARY CROSS ENTROPY

使ったデータセット

Safebooruさんからダウンロードさせていただきました
タグとURLと画像の三つの情報を保存し、学習用のデータセット1,500,000枚、テスト様に20,000枚用意します

データがメモリに乗り切らないときに使ったアプローチ

メモリに乗らないときは、最近いつも使うのですが、データセットを分割読み込みまします
ソフトウェア工学者にとっては一般的なアプローチですが、Epochと対応させて学習すると、なんとかスケジューリングできます(ちゃんとKerasのインターフェースの中にはgeneratorというデータセットを切り出す仕組みがありますが、私はこれを操作が複雑になりすぎると感じているであまり用いていません)

具体的には、15000枚の画像をオンメモリに保持 -> 1Epoch回す -> 別の150000枚の画像をオンメモリに保持 -> 1Epoch回す -> ...

ということを続けていきます

全てが一回のみスキャンされます

転移学習の例

前処理

make_datapairディレクトリ内のmake_datapair.pyを"--make_tag_index"オプションをつけて実行すると、特定のディレクトリの内部の画像とタグ情報に対して、よく頻出するタグ5000個に対して、タグとそのインデックスを記述します

make_dataset.pyを"--make_pair"のオプションをつけて実行することで、実行することで、タグとインデックスをもとに、画像のベクトル情報 Xとそのタグ情報をベクトル化した情報yのペアを作ります。一つの画像に対して、Piar(X,y)となる情報をpickle形式のファイルで出力します

学習

alt_i2v_V2.pyに"--train"オプションをつけて実行することで、学習します。15000枚の画像のデータセットをラウンドロビンで切り替えながら学習しますが、メモリ64GByteマシンの基準でやっていますので、必要に応じて、サイズを小さくするか、ランダムサンプルに切り替えるか、Epoch数を変化させるなどすると良いでしょう

予想

alt_i2v_V2.pyに"--pred"オプションをつけて実行することで予想が可能です

評価

定量的なMSEの他に、定性的なみんなが好きそうな結果を載せておきます
結果は概ね、良好で、画像識別は本当に今や簡単になりましたね、という印象があります

KPI予想としてのIllustration2Vec

Practical Lessons from Predicting Clicks on Ads at Facebookという論文があります

趣旨としては、テキストや画像やなんらかを特徴量の集合としてみなして、CTR予想などのKPI予想問題を行う際、特徴量が極めて高次元である際、アルゴリズム(この場合、勾配ブースティングの木の出力値)を特徴量とすることで、これを元にLinear Regressionをかけることで、より実践的な速度で、より高精度で予想できるという趣旨でした

勾配ブースティングはそのアルゴリズムから残渣となる誤差を最小化する様に特徴量を選択しますが、例えば、これがIllustration2Vecの出力次元値ではどうでしょうか。アルゴリズムが自動で獲得した粒度の特徴量ではないですが、同様の圧縮された特徴量の空間と見做すことができます。(LDA的な自動でクラスタを獲得させる方法も筋が良さそうです)

データが十分に手元にないので、検証は今現在、簡単に行えそうにはありませんが、できそうなことなのでいずれチャレンジしたいと考えています

コード

こちらからダウンロード可能です
https://github.com/GINK03/alt-i2v

ライセンス

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].