Giter Site home page Giter Site logo

pixcaler's Introduction

Pixcaler(Pixel-art scaler)

(変換元素材: 白螺子屋様, 学習データ: カミソリエッジ 様【オリジナルの素材を配布していたのは First Seed Material 様(サイト閉鎖)】)

ドット絵に特化した拡大ツールです。

既存の手法と比較してより自然な拡大が可能です。

いわゆるディープラーニングと呼ばれる技術を用いて実装されており、pix2pix というネットワーク構造をベースにしています。実装はchainer-pix2pixを改造して制作しました。

環境構築

  • Python 3.5 が必要です
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
  • GPU を利用する場合は手動で cupy を追加インストールしてください
pip install cupy

データセット

  • データセットを用意するディレクトリを image/dataset とします。
    • image/dataset/chartip に学習に使いたいキャラチップ素材を 背景を透過して png 形式で保存します
      • 背景を透過するためのユーティリティを用意しています。
        python -m pixcaler.tool.transparent-chartip image/dataset/chartip /path/to/chartip1.png /path/to/chatip2.png
        
    • image/dataset/tile に学習に使いたいマップチップ素材のうちタイル用の素材を png 形式で保存します
    • image/dataset/obj に学習に使いたいマップチップ素材のうち前景に配置するオブジェクト素材を png 形式で保存します
    • image/dataset/font に学習に使いたいフォント素材を ttf 形式で保存します
    • image/dataset/test に学習結果のプレビュー用に拡大する画像を png 形式で保存します

学習

  1. 以下のコマンドを実行します(GPU利用推奨)
    • GPUを利用しない場合、数週間〜数ヶ月学習にかかる可能性があります
python -m pixcaler.train -g [GPU ID or -1(CPUを使う場合)]--composite -i (データセットのディレクトリ) -b 4

学習したモデルを使った画像変換

  1. 上記の手順に従った場合、通常、 result/gen_iter_{iteration}.npz に世代ごとのモデルが出力されます。iteration には学習のイテレーション回数(数値列)が入ります。
  2. 以下のコマンドを実行します。
python -m pixcaler.run --generator=result/gen_iter_{iteration}.npz --mode up /path/to/image1.png /path/to/image2.png

既存の実装からの変更点

学習データ

  • もとの画像を以下の手順で処理して学習しています
    • キャラチップに関しては点(0, 0) の色を透明色とみなし、該当する色を(0, 0, 0, 0)に変更します
    • キャラチップから64x64の範囲をランダムに切り取ります
    • キャラチップ、フォントを背景のタイルセットからランダムにまたは固定色1色の背景と合成します
    • 画像を平行移動(64x64のcrop)と鏡像反転して、データを水増しします
      • 平行移動はおそらく重要です
        • nearest neighbor 縮小は性質上、1枚の画像に対して、4種類の結果が存在します(縮小時に4x4格子のどの点を取るかの自由度があるため)
        • 画像をランダムに平行移動することによって、この4種類の結果をすべて学習データセットに加えることができ、実質的に画像を4倍に水増しできます
        • さらに、目などの細かいピクセルの模様も nearest neighbor 縮小のいずれかのパターンではきれいに残っていること多いので、学習を繰り返すことで、適切な復元方法にたどり着ける可能性が上がります
    • nearest neighbor 法(PIL.Image.NEAREST_NEIGHBOR によるリサイズ)で縮小し、再度64x64に nearest_neighbor 法で拡大したものを変換元、もとの画像を変換先として学習します

その他

  • adversarial loss 倍率を1/8に変更
    • ドット絵の場合、l1-lossが通常の写真などよりもより小さい値に収束するため、adversarial loss を小さく取らないと学習が不安定になります
  • pix2pix ネットワークの encoder, decoder の最上段を kernel size 5x5, stride 1, padding 2 の Convolution2D に換装(効果あるのか微妙)
    • もとのネットワークでは画像サイズが128x128以上ないと、画像幅が足りずエラーになります
    • そこで、最上段を5x5のConvolution2D(縮小なし)に換装しました
    • 3x3 ではなく5x5 なのは 既存の手法 が5x5のconvolutionをベースとしていたことや、より広い範囲を見たほうが、そのドットのコンテキストを推論しやすいだろうという予想のもとです

pixcaler's People

Contributors

mitaki28 avatar mattya avatar rcalland avatar bkvogel avatar gwtnb avatar nushio3 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.