ボードコンピュータで世界は変わる

日々進化する小型のコンピュータの世界。

人工知能で音楽は作れるのか その1 後編

前回の続き

boardcomputer.hatenablog.com

また違う方向からの音楽への人工知能のアプローチの例としてこちらの記事も合わせて呼んでいただけるとバックグラウンドがわかりやすいと思う。

boardcomputer.hatenablog.com

面白いことにすでに前回説明したような様々な音楽へのアプローチがすでに存在している。他にも興味深い音楽への人工知能のアプローチがあったら教えて欲しい。

 

このようなアプローチがある中で自分が目指すものは二つある。

・学習するデータに実際に自分の好きな音源を複数使用する。

・学習データから実際に音楽をソートしたり音源を生成したり出来るようにする。

 

次回は実際にどのようにしてチューニングしていくのかを考える。

雑談:なぜ最近の若者の好きなアーティストが偏らないのか

眠れないので雑談を書こうと思います。例によってみんな気付かれないうちに人工知能に操られてるんだよって話です。僕は音楽をやっているんですが自分より若い人に好きな音楽を聴いて出るバンドは大体ポルカドットスティングレイとかやばTとか大体の人が同じアーティストを答えるんですよね。これってなんでなんですかねって話です。

 

話が少しずれますが皆さんはどうやって新しい音楽を見つけますか?僕が音楽を聴きだしたときはまだ音源販売が普及していない時代でCDを買うのが当たり前でした。レンタルショップで借りてきた音源をお小遣いを貯めて買ったiPod nanoに入れて大事に聴いていました。

しかし時代は音源をネットでダウンロードする方向にシフトしています。未だにCDを買うのは日本人くらいとバカにされているらしいですよ・・・

じゃあ、今時の新しい音楽を見つける媒体ってなんなんだ??

 

そりゃYoutubeとAppleMusicでしょ!

 

最近はインディーズのそんな売れてないバンドもみんなPVやMV作ってますもんね、時代は動画、そして普及するiPhone。みんな入ってるAppleMusic。そりゃCDショップ潰れますよね。実際に僕も結構使ってますけど便利です。

 

でもこの二つにはニューラルネットワークのような人工知能が使用されてるのを知っていますか?

 

Youtubeではおすすめ動画、AppleMusicにはFor you・・・あれってどうやって算出されてるんですかね・・・そう、おそらくNNが使われています。

 

そもそもニューラルネットワークってなんだって話はもういいかもしれませんが教師なし学習の一つで人間の脳の中のニューロン同士を伝う電気信号、シナプスを参考に作られた深層学習の一つです。超ざっくりいうとデータを学習してそのデータをもとに新しいデータを生成できるモデルです。学習するデータはなんでもいいんです。

例えば自分の朝食のメニューを毎日メモして記録していたら、ニューラルネットワークを利用すると自分の今日食べたい朝食のメニューを自動的に考えてくれるかもしれません。

ん?じゃあYoutubeのおすすめって自分の好きなアーティストを探せるんじゃない??

と思うじゃないですか・・・実は違うんです。ニューラルネットワークはデータならほぼなんでも学習できます。そしておそらく先ほどあげたようなメディアが学習させているのは音源のデータではなく視聴履歴なんです

 

同じじゃないのかと思いますが大きく違います。視聴履歴を学習していると言いましたがこれは自分のデータではありません。全てのユーザーを学習させているでしょう。つまりここから生成されてくるデータは大衆受けする音楽の中で自分が見ている音楽を聴いている人は他にどんな音楽を聴いているのかということです。

 

本当に自分の好きな音楽をNNで探したければ自分の聴く音楽の音源を学習させるべきです。

今回の僕のNNで音楽を生成する自由研究はそんなバックグラウンドがあります。まぁ一番いいのは自分の足でライブに行ったりレコードショップで音源を漁ったりすることなんでしょうけどね

 

みんな人工知能には気をつけましょう。知らない間に洗脳されてるかもよって話でした。僕も例外ではなく。

 

人工知能で音楽は作れるのか その1 前編

はじめに

さて何かとブログ等は三日坊主になってしまうことが多いので好きなことを絡めてやって行きたいと思う。大学が夏休みに入り少し手が空きそうなので夏休みの自由研究として人工知能で音楽を生成できないかやってみようと思う。このプロジェクトは理論も確立できてないしただの夢物語で終わるかもしれないがこの研究を通して深層学習の知識を広められたらと思う。

まず僕がどんな人間かというと一応人工知能を研究している大学生である。一応といったのには理由があって僕が研究しているのは最近はやりのディープラーニング(DL)やその一種であるニューラルネットワーク(NN)とは全く違うものである。詳しくは説明しないが僕のやっている研究はかなり漠然としていて今の世の中には全く普及していない宗教のような研究をしている。良い機会なのでついでにNNを勉強しよう。

序章:音楽と人工知能

で実際に音楽に対して人工知能でどうアプローチして行くかである。当然、世界中の多くの研究者たちが音楽に対して多くのアプローチをし、その中のいくつかは実際にマーケティングやジャンルのソート等に用いられている。まず、先駆者の素晴らしい成果を覗き見て勉強させていただこう。

1.Google Magenta

youtu.be

まず、この記事のタイトルを見たときNNを普段から使っている人なら思い浮かぶものがTensorFlowだと思う。TFとはGoogleが提供している機械学習のライブラリでこれを用いることで比較的簡単に最適化されたNNを扱うことができる。Magentaはそのライブラリに含まれる音楽などの芸術専用のプロジェクト音楽データからコード進行を予測したり有名な画家の絵を学習させて画像をその画家が描いた絵のように変換したりできる。この動画のプレゼンではバッハの楽曲を学習して似たような楽曲を生成している。これのすごいところは実際に人間が心地の良い音階を生成できていることである。今までも様々なアプローチでコンピュータによる楽曲を生成は行われていた。しかしその多くは人間が聞いても不快な音階だったりよくわからないものが生まれてしまうことが多かった。しかし、このプレゼンによると今回生成されたバッハのような音源とバッハの本物の音源を用いてどちらが心地よい音楽かアンケートを取ったところ人工知能によって生成された音源の方が良いと答えた多かったらしい。これは面白そうだ、実は今の所は僕もTensorFlowを使おうかなっと思っている。

2.deep-chord

http://deep-chord.net/

これは実際にやってみたいことに一番近い、コード進行を指定すると人工知能が続きのコードを生成してくれるというもの。しかしこの生成されるコード進行は作成者のyuraさんが学習させた音声データから作成されているので自分の好きなコード進行にはならない。でも UIもしっかりしていて素晴らしい・・・

 

その1 後編に続く かも・・・

Raspberry Pi 3 で Open CV 3.2 その2

前回のお話

boardcomputer.hatenablog.com

はい、OpenCVについてですね

 

このOpenCVについて色々使ってみようとしましたが・・・結論だけ言うとOpenCV 3.2を使用することはやめました。

なぜならOpenCVはVer3.~からC言語のサポートをしなくなったからです。

今まで使っていたプログラムやサンプルプログラム等々動かそうとした結果エラーの嵐・・・別にPython等で書いてもいいんですがボードコンピュータのCPUでガンガンレートを要求するプログラムを書く自分にはコンパイルが欠かせないんですよね。

ちなみにC++はサポートされてますがちょっとOpenCVのためだけに勉強するのはめんどくさい。

 

そこでVer2.~系から動かそうと思い立つ。そこでホームページのリリースのページへ

opencv.orgよく見てみるとOpenCV ってVer2系とVer3系、どちらもまだリリースされてるんですね

今最新のVer3.2がリリースした一週間前にVer2.4.13.2がリリースしています、分岐してるような感じでしょうか。

 

というわけで次回はOpen CV Ver2.4.13.2を入れてみよう。

 

Raspberry Pi 3 で Open CV 3.2

Open CVというものをご存知だろうか、近年では情報系の中にOpenなんとかという色々なものが流行っている気がする・・・(例えばOpenGL OpenData )

このようなOpenとは大抵の場合は誰でも自由に扱えるものということが多い。

OpenCVとはインテルが開発を始めた(今は他の会社に引き継がれている)オープンソースのビジョンライブラリである。

 

つまりなんぞやというと、比較的に自由に使える画像や動画等の制御・認識ライブラリである。

例えばコンピュータに搭載されたカメラを使って顔認識ができたり、与えられた画像に移ったターゲットをトラッキングできたりと一般的に見たことあるような画像や動画の制御、認識はほぼこれだけで出来てしまうと言っても過言ではないだろう。

 

これを今回はRaspberry Pi 3に積んで搭載したカメラから得たデータを使って色々遊べないかととりあえず入れてみた。

OpenCVのリリースは大体一年に2回ほどらしい。出来れば最新バージョンを入れた方が良いだろうから今回はOpenCV 3.2を積んでみた。

 

Raspberry Pi 3にOpenCVを積んでる人はネットを探せば他にも結構いたが、バージョン 3.2を入れていて日本語で解説している人は見つけられなかったから一応誰かの役に立てばいいかな・・・

 

インストール手順

インストール手順はいくつかあるし正直バージョン3.0以降からは変わってない気もする。英文だがRaspberry Pi 3にOpen CV 3.0を入れ方を丁寧に説明している方がいたのでこちらを参考にした。

www.pyimagesearch.com

まず注意するべきことはapt-get等は使わないこと。

確かにapt-getを使えば簡単に導入することはできるが今(2017,6)apt-getでOpenCVをインストールするとバージョンが古いものが導入されてしまう。そこでバージョンが新しいものを使いたいならapt-get等は使うべきではない。

 

というわけで実際に入れてみる。

一応、最新にしとく

$ sudo apt-get update

$ sudo apt-get upgrade

依存ライブラリ等の導入

$ sudo apt-get install build-essential cmake pkg-config
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

$ sudo apt-get install libxvidcore-dev libx264-dev

$ sudo apt-get install libgtk2.0-dev$ sudo apt-get install libatlas-base-dev gfortran

$ sudo apt-get install python2.7-dev python3-dev

 OpenCVの依存ライブラリは結構膨大で色々結構めんどくさい。時間もそれなりにかかった。

OpenCVの導入

まずはダウンロードから

$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip
$ unzip opencv.zip

 OpenCVをフルインストールするためにはopencv_contribも必要っぽい。そっちも落としておく。

$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip
$ unzip opencv_contrib.zip

 次にインストー

$ cd ~/opencv-3.2.0/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
    -D BUILD_EXAMPLES=ON .. 

 そしていよいよmake

$ make -j4

 ここでmakeするときのオプションだが-j4というのはmakeに使用するコア数を指定できるオプションらしい。-j4でやったらCPU使用率が跳ね上がりフリーズの嵐だったのでクロスコンパイラを使うか他のプロセスを切ってから行うべきかもしれない。ちなみに僕はめんどくさかったので-j3で気長に待った。

 

結構失敗するので無理だったらmake cleanしてからやり直す

$ make clean
$ make 

 終わったら最後にインストールして終了。

$ sudo make install
$ sudo ldconfig

 お疲れ様です

はい。実際にやってみるとビルド失敗しまくって発狂しかけましたが多分入れれたと思う。使ってはないから成功してるかは謎なので次回はこれで遊んでみます。ちなみにRaspberry Pi使ってる人はPython系はすでに入れてると思ったので省いてます、入れてない人は参考リンクの英文のページには省かず書いてあるので試してみて下さい。

次回

boardcomputer.hatenablog.com