The night, and the dream, were long...

はじめに

この記事はklis Advent Calendar 2017の21日目の記事です.

adventar.org

昨日はktmnさん(@piyopiyo_tititi)生活にアザラシを取り入れてから気が楽になった話 - 日記という記事でした. あざらし可愛いですね. 私も短気なので生活にあざらしを取り入れていきたいと思います.

kotori-tititi.hatenablog.com

さて,この記事の題目となっている"The night, and the dream, were long..."というセリフをご存知でしょうか.

"The night, and the dream, were long..."は,"Bloodborne"のラスボスの一人であるゲールマンのセリフです.

私(@lapis_zero09)は現在klis14の学生で卒業を間近に控えておりますが,大学生活は長いようで短く,夢のように過ぎ去っていきました. まだ残ったモラトリアムも有意義に過ごしたいです.

Bloodborneについて

さて,くさいセリフは置いておいてBloodborneは,FromSoftwareより出ているゲームです.

FromSoftwareは,Bloodborneの他に"DarkSouls"や"ARMORED CORE"などのソフトを出していることで知られています.

www.fromsoftware.jp

Bloodborneは,DarkSouls,及び,Demon's Soulsと並んでソウルシリーズと呼ばれ,その雰囲気やスタイリッシュさから壮絶な人気を博しています*1*2

また,Bloodborneは,"死にゲー"と呼ばれるほど難しく,かっこよさに惹かれ,始めたはいいものの途中で攻略を諦める人が後を絶ちません*3. しかし,その難しさを諸共せず,あるいは難しさに惚れ込み,四六時中このゲームのことを考えたり,プレイしたりする人間もおり,そのような人は地底人と呼ばれています*4

このBloodborneは,その他のFromSoftwareの作品と同様,ほとんどと言って良いほどゲームの世界観を伝えるNPCの台詞やムービーが無く,解釈の一切をユーザに委ねています. このことから,フロム脳を患うユーザが後を絶ちません. フロム脳とは,ゲームの設定を必要以上に考察してしまう精神病の一種で,重度の場合,現実世界の事象についても考察し始めます*5. フロム脳罹患者によるBloodborneに関する考察や2次創作は後を絶ちません.

フロム脳の発症者の中には高い技術力や文才を持った者もおり、こういった人々の解釈・考察・動画は作品の世界を更に広げていく可能性を持っているため、フロム脳をただの妄想癖と言って悪く決めつけきれないところがある。

出展:フロム脳とは (フロムノウとは) [単語記事] - ニコニコ大百科

前置きが長くなりましたが,この記事は何らかの形でBloodborneの二次創作を作成し,Bloodborneをより多くの人に知ってもらうと共に,Bloodborneを盛り上げ,フロム脳患者を増やし,あわよくばBloodborne2の発売を願うものです.

二次創作

そもそも私が,Bloodborneにハマったのは中の良い二人の悪いオタクが主な原因です. ある日,いつものようにたまり場にいる時,二人の悪いオタクが「お前もやってみろ」と私にPS4のコントローラを渡し,気づけば,無意識にBloodborneのことを考え,作業中にBloodborne考察動画を流し,また,大学から家までの道のりにある木の位置や階段の段数を考察するフロム脳の自分がいました.

そして,Bloodborneにハマった要因の一つに,"original soundtrack(以下,OST)の良さ"があります.楽団と聖歌隊によるコーラスによって重厚な曲は作業用のBGMに向いており,この記事の執筆時にも流しているほどです.

Amazon Musicにあるので是非聞いてみてください.

一方で,人間,同じ曲ばかり聴いていると飽きが生じてしまうもので,Bloodborneそのもののプレイにも支障を来すことになり兼ねません. OSTに含まれる曲数は限られ,ゲームの続編が出ない限りサウンドトラックが増えないことは想像に難くないでしょう.

なので,この記事では似たような曲を作ることを二次創作とします. しかし,私はピアノやギターは弾いたりするものの作曲に関しての知識は毛頭ありません. そこでその辺の機械学習ラボに属している私らしく機械学習によって作曲することを考えます.

作曲

まず,私が所持している音楽データは全てステレオmp3形式なので,音楽を学習・生成するニューラルネットワークを設計するために,ニューラルネットが理解できる形式に変換する必要があります.

皆さんご存知の通り,音波は連続的な信号であり,無限のデータ点に分割することが可能です. サンプリングでは,サンプリング周波数で決まる一定の時間間隔で信号の値を保存します. したがって,サンプリングによって無理やり有限のデータで連続信号を表すことを考えます. サンプリング周波数は44100Hzに設定しました. 一般的に,人間の耳は,20000Hzまでの周波数を聞き取ることができると言われています. したがって,20000Hzを超える周波数が存在しても,違いはないと想定します. また,Nyquist–ShannonのSampling Theorem*6によると,サンプリング周波数は20000Hzのほぼ2倍にする必要があります. したがって,44100Hzは理論的に学習可能なサンプリング周波数とみなすことができます.

次にステレオmp3をモノラルmp3に変換することで,音楽を空間性を持たないものに変換します. モノラルであるということは,例えばイヤホンで音楽を聞いた時,左右の耳から聞こえる音が同じであることを示しています. 簡単に言えば,モノラルサウンドは,ステレオサウンドを表現するために必要なマトリックスのサイズの半分で表現することができます. これにより,ニューラルネットワークを訓練するのにかかる時間だけでなく,必要なメモリも削減することができます.

しかし,モノラルに変換したと言えど,mp3は,圧縮形式であるというのには変わりなく,まだニューラルネットで学習するのに優れた形式ではありません. そこで,モノラルmp3をWAV形式に変換します. WAV形式は,FLAC以外に最も簡単に利用できる非圧縮オーディオであり,pythonライブラリであるscipyによって簡単に扱うことができます. これで,時間領域で圧縮されていないサンプリングされたオーディオ形式が得られました.

さらに,WAVファイルをニューラルネットが理解できるものに変換します. ニューラルネットに時間信号の異なる周波数をよりよく理解させるために,離散フーリエ変換(以下FFT)を使用して,時系列の複雑なデータを対応する周波数領域に変換しました. これで前処理の終わりではなく,FFTの出力は複素数の配列であり,ニューラルネットワークの入力にするために実数部と虚数部に分割する必要があります. また,時間が一致しないものはゼロパディングを行いました.

これにより,元のステレオmp3データは3次元のテンソルとして構造化することができました. この3次元マトリックスニューラルネットに与えることで音楽を生成します. これで前処理のタスクは終了しました.

次に発生する問題はニューラルネットアーキテクチャーをどう設計するかです. リカレントニューラルネットワーク(以下,RNN)は音声のような時系列データを扱うのに最適なニューラルネットワークです. シーケンスのすべての要素(このケースではテンソル)に対して,事前定義された操作を繰り返し実行するため,リカレントと呼ばれます. 重要な点は,次の一連の操作でも,前の計算の結果が考慮されることです. したがってRNNには情報を記憶できるmemoryがあることがわかります. 音楽データに対して考えると,ネットワークに一連の音符を与え,それはシーケンス全体を通って次の音符を予測します. しかしノーマルのRNNには,長い間情報を保持することができないという欠点があります. そこで,Long Short Term Memory(以下,LSTM)が提案されています. LSTMでは,セルと呼ばれる別のベクトルが情報を記憶するために用いられています. LSTMの大きな利点の1つは,学習する必要のあるパラメータの数が従来のネットワークに比べて少ないことです. 情報の転送・更新,出力の生成のための重みとして機能する基本的に3つの行列があります. 3つの行列は、シーケンスの各要素に対して操作を実行するために繰り返し使用されます RNNやLSTMに関するより詳細な情報はDeep Learning Book*7などを参照してください.

今回は,自前のGPUを使用したため計算的リソースは非常に限られており,浅いネットワークを構築しましたが,訓練には数日を要しました. モデルの生成と学習にはkerasを使用しました.

以下が生成した音楽例になります.

最初の方は良さげですね.

もっと潤沢なリソースで複雑なネットワークを扱うことでより皆さんの感性に合う音楽が作れるかもしれません.

最後に

明日は卒論の提出日ですが,最後まで気は抜けないのでそろそろ寝ることにします.

明日のklis Advent Calendar 2017はまっつんさん(@crc9dijo)の担当ですが,卒論の話が聞けるかもしれません.

おやすみなさい.


商品を買ってFromSoftwareを応援しよう!!

【PS4】Bloodborne(通常版)

【PS4】Bloodborne(通常版)

Mangakiチャレンジ

日記です.

Mangakiチャレンジに参加した.

マンガ・アニメを推薦するタスク

このコンペティションでは、アニメ・マンガに対するユーザの評価の予測に取り組んでもらいます。データセットとして、実際のユーザによる評価結果が提供されます。



0828に一発目を投げて,1位だったのでほったらかして結局4位だった.




予測タスクが簡単すぎた(?)のかどのモデルでもパフォーマンスが頭打ちの感


最終的にベースモデルにはSVMを使った.


評価値は,評価行列を作って,"ユーザ"と"アイテム"それぞれでクラスタリング(k-means).
クラスタ数は,施行により設定.


ユーザもアイテムも何千のオーダーだったけど,クラスタ数は一桁が一番良かった.




追加データも出たらしいけど見てない.





2位だった先輩の解法:http://nzw0301.github.io/2017/10/mangaki




このくらいのコンペなら隙間時間にできて良い.

導入

klis14のしんさく (@lapis_zero09) | Twitterです.

この記事は,klis advent calendar 2016の23日目の記事です.

今日からクリスマス三連休ですね.

www.adventar.org

昨日は

本題

財布の膨らみ


突然ですがこれはなんでしょう.

f:id:lapis_zero09:20161218214236j:plain

そう筑波大生なら誰しもが持っている学生証ですね.

学生証の使い所は,身分証,筑波大附属図書館の入館・貸与証,コピー機での認証,各証明書・旅客運賃学生割引の発行などがあります.

人によってはあまり使わない機能もあるかもですね.

この機能を実現しているのは裏面のバーコードあるいは内蔵されているICチップです.

詳しく知りたい方はSony JapanのWebページ*1*2*3を御覧ください.

www.sony.co.jp

www.sony.co.jp

有益


せっかく財布に入れて持ち歩いているのですから,もっと有益に使いたいですね.

学生証のICチップはクレジットカードのように剥き出しなものではなく,完全に内蔵されているタイプであり,非接触型のICカードリーダを用いて内容を読み込むことができます.

非接触ICカードリーダには以下のようなものがあります.

www.sony.co.jp

このカードリーダとnfcpy*4を用いることで学生証のICチップを読み取ることができます.

Python module for near field communication — nfcpy 0.13.4 documentation

nfcpyのインストールについては割愛します.

nfcpyのexampleであるtagtoolを用いて以下のように学生証のID,PMM,SYSを取得することができます.

f:id:lapis_zero09:20161218222559p:plain

IDは製造ID(IDm)のことで8バイトのバイト列です.上位2バイトの値が製造者コード,続く6バイトがカード識別番号です.

PMMは製造パラメータのことで,こちらも8バイトのバイト列です.これはカードの種別および性能を識別するためのパラ メータです.

SYSはシステムコードのことで,システムを特定するための2バイトの値です.

また,Type3とありますから学生証は「JIS X 6319-4」に準拠したソニーFeliCaをベースとしていると認識されています.

さらに,筑波大学の学生証は裏面にロゴがある通り,FCFフォーマット*5です.

ここ*6には,FCFキャンパスカードフォーマット仕様*7に準拠したものとありますね.

有効活用したい


klisの研究室の入室には学生証とは別のICカードが必要です.

どうせなら学生証で入れるようにしてほしいというのは誰しもが思うことですね.

いきなり研究室に設置するのは色々問題がありそうなので,筆者のマンションでデモを行います.

まず,先ほどのICカードリーダに加え,みんな大好きRaspberry Piとサーボを用意し,繋ぎます.

サーボはGWSサーボ GWSMIRMGFA(MICRO/2BBMG/FP) フタバ: パーツ一般 秋月電子通商 電子部品 ネット通販です.

サーボの操作はServoBlasterを用いて行うことができます.

nfcpyとカードリーダで取得したパラメータを照合し,合致すればサーボを回転させるというプログラムを適当に書きます.

www.instagram.com

これをドア鍵に設置することで学生証をかざすことでサーボでサムターン*8を回転させ,開閉することが可能です.さらには,10秒後には鍵が閉まるオートロック機能も付与しています.f:id:lapis_zero09:20161222214921j:plain

不要時には電圧がかからないので,本来の鍵を鍵穴に差し込み開錠・施錠も可能です.

www.instagram.com

懸念事項として,ドアからPaSoRi RC-S380が生えている御宅が少ないので住居を特定される可能性があります.

しかし,これはあまり問題にはなりません.

なぜなら,本来の目的は我が家の鍵を開閉することではなく,研究室の認証方式を変換することだからです.

数日後,B3の初ゼミが研究室で行われました.

f:id:lapis_zero09:20161222180422j:plainf:id:lapis_zero09:20161222180430j:plainf:id:lapis_zero09:20161222180441j:plain

明日はhimktさんです.期待しましょう.

参考

*1:"Sony Japan | FeliCa | 法人のお客様 | ダウンロード"."Sony Japan". http://www.sony.co.jp/Products/felica/business/tech-support/index.html

*2:"Sony Japan | FeliCa | FeliCaとは | FeliCaって何?"."Sony Japan".https://www.sony.co.jp/Products/felica/about/index.html

*3:"Sony Japan | FeliCa | NFCについて | NFCの定義"."Sony Japan".https://www.sony.co.jp/Products/felica/NFC/index.html

*4:"Python module for near field communication — nfcpy latest documentation".nfcpy.http://nfcpy.readthedocs.io

*5:"一般社団法人 FCF推進フォーラム".http://fcf.jp/index.html

*6:澤村 博道."情報科学類・CS専攻入退室管理システム".http://www.tech.tsukuba.ac.jp/2010/report/n14_report2010.pdf

*7:"FCFキャンパスカードとは"."一般社団法人 FCF推進フォーラム".http://fcf.jp/fcf12461125151253112497124731245912540124891239212399.html

*8:"図解 - 鍵の各部名称|鍵と防犯の用語集|住まいの防犯特集"."美和ロック株式会社".http://www.miwa-lock.co.jp/lock_day/glossary/lock/12.html