/dev/null/onishy

どーも。

Crypkoをはじめる

Crypko.aiが面白いです。

オタクなら好きそうなのに僕の周りであまりやっているという話を聞かないので、 布教も兼ねて説明していきたいと思います。

イーサリアムのウォレットを作る必要があるので、意外とハードルが高く感じますが、 まぁ5分もあれば始められると思います。

Crypkoとは

Crypkoとは、かわいい女の子を取引したり融合したりしてコレクションするゲームです。

ただし、一枚として同じ女の子はいません。

crypko.ai

です。

@_aixile さんが以前出した make.girls.moe というプロジェクトを発端にしています。

make.girls.moe

これは画像を生成するディープラーニングの一手法であるGAN(Generative Adversarial Network)を用いて、 女の子のアバターを自動で生成するというものです。

この技術とブロックチェーンを組み合わせたものがCrypkoです。

各カード(=女の子)に遺伝子情報のようなものが対応していて、 2枚のカードから新しいカードを作ることができます。

この新しいカードはブロックチェーン上に記録されるため改竄が不可能であり、 同じカードは一つとして存在しない、とのことです。

実際同じ親から2枚カードを作ると違う子が生まれます。 親の遺伝子がどのように受け継がれるかは、恐らくランダムな比率に基づいていそうですが、 この辺りのアルゴリズムについては公開されていません。

ただ一つ言えるのは、この遺伝子情報から生成される女の子の画像のクオリティがものすごく高いということです。

はじめてみる

0. テストネットについて

前述のようにCrypkoはブロックチェーン上でのやり取り(トランザクション)をベースにしているので、 まずはブロックチェーンを利用する準備が必要です。

イーサリアムという仮想通貨の名前を聞いたことがある人も多いと思いますが、 Crypkoではイーサリアムのテストネットブロックチェーンテスト用のネットワーク)を使います。

テスト用のネットワークなので、トークン(通貨)は無料でもらうことができます。 ただし無尽蔵にというわけではないのでご注意ください。

テスト用のネットワークなので、基本的に実際の通貨としての価値はありません。

少なくとも、誰かが「Crypkoを使うために金を払ってでも買う」みたいに、価値を見出そうとしない限りはそうです。(それはそれで胸熱展開ですね。)

1. MetaMaskの導入

イーサリアムを利用するために、MetaMaskという便利なプラグインが存在します。 これはブラウザ上でイーサリアムを支払う際の財布(ウォレット)のようなものです。

Chromeではこちらから。 MetaMask - Chrome ウェブストア

まずはこれをインストールします。

Mnemoric Phraseはランダムな12単語の羅列で、別のアプリでウォレットを使おうとすると聞かれるのでメモしておきます。

言われたとおりにアカウントを作ると、拡張機能としてブラウザから使えるようになります。

2. トークンをもらう

トークンをもらうにはhttps://www.rinkeby.io/#faucetに書いてあるように、以下のようにします。

  1. MetaMaskの「…→Copy Address to clipboard」からウォレットのアドレスをコピペし、外部SNSに公開する(ツイートするとか)。 f:id:onishy:20180602153626p:plain:w300

  2. Rinkeby https://www.rinkeby.io/#faucetに当該ツイートやポストのURLを入力する。

  3. "Give me Ether"をクリックする。

f:id:onishy:20180602153738p:plain:w300

ここで、"Give me Ether"には"3Ether/8hrs" "7.5Ethers/day" "18Ethers/3days"の3種類のもらいかたがあることがわかります。

計算すればわかりますが、"3Ether/8hrs"が一番オトクです。ただし8時間ごとに申請をする必要があって面倒なので、 とりあえず遊んでみたい方は"18Ethers/3days"で良いと思います。

3. Crypkoへのログイン

これでCrypkoへログインする準備ができました。

MetaMaskのネットワークを「Rinkeby Test Net」にして、crypko.aiを開いてパスワードを設定してログインすれば完了です。

あそぶ

それでは遊んでみます。

お迎えする

まずは女の子がいないと始まらないので、買いますお迎えします。

18Ethersあれば大抵の女の子はお迎えできてしまいますが、とりあえず1Ether以下の好みの女の子を2人選ぶと良いでしょう。 N/R/SR/SSR/URとか書いてありますが今は気にしなくて良いです。

「マーケット→販売」を選んで、好きな女の子を選びます。

f:id:onishy:20180602154826p:plain:w300

この子を選びました。

f:id:onishy:20180602154806p:plain:w300

Buyをクリックすると、MetaMaskによる承認の画面が出てくるので、Acceptします。

f:id:onishy:20180602154800p:plain:w300

しばらくすると購入が完了し、自分のコレクションに入ります。融合するために同じようにもう一人購入しましょう。

お迎えした子を選ぶと、こんな画面になります。

f:id:onishy:20180602154833p:plain:w300

女の子の右下に四角形が2つ重なった「融合」ボタンがあるのでクリックし、融合したい他の女の子を選びます。

今回はこの2人の女の子を融合します。

f:id:onishy:20180602154948p:plain:w300

融合が完了するまでしばらく待ちます。

f:id:onishy:20180602154821p:plain:w500

完了しました。

f:id:onishy:20180602154813p:plain:w500

そうすると新しい女の子ができます。極めてシンプルです。

f:id:onishy:20180602154751p:plain:w300

自分の持っているカードは、「マイカード」から確認することができます。

f:id:onishy:20180602161240p:plain:w300

売買する

お気づきの方も多いと思いますが、さっきの女の子も誰かが売りに出していたものです。Crypkoでは人身売買が可能です。

さらにヤバいのが、女の子をレンタルできる点です。 自分のカードを有償でレンタルし、融合する権利を売買することができます。ヤバい。

先ほどの「融合」ボタンの隣に「販売」ボタンと「貸出」ボタンがありますが、これを選ぶとレートを決めることができます。

オークション形式なので、最大値と最小値を決めておくと、最大値から値段がだんだん下がっていきます。

f:id:onishy:20180602155721p:plain:w300

ざっくり言えばこれだけです。ただし、システムについて理解する必要があります。

システム

レーティング(N/R/SR/SSR/UR)とは

レーティングは、融合後に次の融合を開始するまでの時間(Cooldown)を表しています。 URなら一瞬、SSRなら15秒くらいが目安です。

先ほど融合に使った子はこんな感じで11時間のcooldownになりました。

f:id:onishy:20180602161322p:plain:w300

これはそのカードを融合した回数に依存します。 なので、最初はURでも、そのカードを親として融合していくと、だんだんSSR→SRと言ったふうにレートが下がっていきます。 これにより同じ遺伝子を持つ子供の数が制限されています。

イテレーションとは

Iterは、そのカードが第何世代なのかを表しています。

Iter0はランダムに運営側で生成されてマーケットに放出される女の子で、Iter1以上は誰かが融合して作った女の子です。

子供のIter数は親のうちIter数が大きいものに1を足した数になり、これはレーティングと違って変わることはありません。

Iter0同士の子供はIter1になりますし、Iter50とIter3の子供はIter51になります。

子供の初期状態でのレーティングはIter数に依存します。Iter1で生まれてきた子供はURになりますし、Iter100で生まれてきた子供はNになります。

親のレーティングには一切関係がないので、Iter0/N同士の子供はIter1/URになります。この辺りを知っているとちょっと有利になるかもしれません。

デリバティブ

カードを開くと、その子をベースに融合した子の一覧と親の一覧を見ることができます。

これをたどっていくと、自分が売買/レンタルに出した子が今どうなっているのか、みたいな確認もできて面白いです。

余談

この章では若干テクニカルな話をします。別に読む必要はないです。

Cryptokitties

ブロックチェーン上でカードを集めて融合して…というのはCrypkoが最初ではなく、Cryptokittiesというものがあります。 www.cryptokitties.co

これはその名の通り猫を集めるもので、カード同士を融合して別の猫を作ったり、売買したりするものです。Crypkoはこれを真似した感じですね。

こちらはMain Network上で実際にイーサリアムがないと売買できないので僕はやったことがありません。

ただGANで女の子を集めるほうがモチベーションは上がりますね。。

属性

各カードには属性が入っています。

NIPSの元論文ではDiscriminatorの最後にClassifierとして34クラス分類用の全結合層をつけています。 クラスも一致しているようなので、恐らく画像の生成後にClassifierを通した結果でしょう。

ちなみに今まで遺伝子情報と言ってきているのはGANで言うG(z)のzです。

zはうまく学習ができていると内挿が可能です。つまり足して2で割ったベクトルをネットワークに入力すると、中間的な生成画像が得られます。 子供のzは、何らかの比率で親のzを混ぜ合わせていそうです。

イーサリアムトランザクションを見てみる

「取引」メニューから各取引のトランザクションが確認できます。

トランザクションを確認すると、親のID2つと子のID1つ、それからめっちゃ長い数字が一つはいっています。

f:id:onishy:20180602160909p:plain:w500

256bitsあるのでこれが遺伝子情報っぽいですね。サーバーサイドで計算した結果が入ってそうです。

理論上は2^256種類のCrypkoが存在することになります。

技術の詳細

作者の方のWebサイトはこちらです。

yanghuaj.org

NIPSのWorkshopに論文も出しているので、興味があれば読んでみると良いと思います。

[1708.05509] Towards the Automatic Anime Characters Creation with Generative Adversarial Networks

おわり

GANでここまでのクオリティのキャラクターが生成できるのはすごいですね。

遊び方は色々だと思いますが、自分の知っているキャラクターに似たキャラを生成してみるみたいな遊び方もできそうです。

今後どうなっていくかが楽しみです。