ダークサイドにようこそ!

限界クリエイターのブログ

【Bostar】6色に光るLEDテーブルランプを買ってみた【USB充電】

暖色系のテーブルランプが欲しいなあということで、こちらの商品を購入してみました。さっそく使ってみます。

 

 

f:id:hahaeatora:20190728171711j:plain

暖色に光らせてみました。三段階に明るさを調整できることに加え、6色にも光らせられるとのこと。ライト頂部をタッチすると光の切り替えができます(電源ON&OFFは長押し)。

 

f:id:hahaeatora:20190728172430j:plain

こちらは緑色に光らせたところです(明るさ調整ができるのは暖色の光のみ)。吊るす用の引っ掛りもあって便利。ちなみに充電はMicroUSBケーブルで可能です。

個人的に明るさがもう少し欲しいところですが、コンパクトさや値段も考えるとなかなか良いかも。

【イタリア料理】ジョジョ5部アニメ放送が終わって悲しいのでサイゼリヤで豪遊する

TVアニメ「ジョジョの奇妙な冒険 黄金の風」の放送が終了してしまいました。

 

 

5部の登場人物たちの生き様やその覚悟の強さにはいつも勇気付けられるばかりでした……素晴らしい作品を届けてくださった方たちには感謝しかありません。 

放送終了が悲しすぎるのでサイゼリヤへイタリア料理を食べに行きました(5部はイタリアが舞台です)。

 

f:id:hahaeatora:20190729230006j:plain

 キャベツとアンチョビのソテー199円、ミートソースボロニア風399円、パンチェッタのピザ399円、白グラスワイン100円で計1097円(税込)です。テラス席ならもっと雰囲気出たかも……

 

hahaeatora.hateblo.jp

hahaeatora.hateblo.jp

【Google Magenta】MIDIファイルをNoteSequenceに変換【機械学習】

Google Magentaを最近使い始めました。音楽や芸術分野の創造的プロセスにおいて機械学習の役割を探求するためのオープンソース研究プロジェクトだそうです。
magenta.tensorflow.org

そんなMagentaで楽曲データを扱うためにはMIDIをNoteSequenceという専用のデータ形式に変換する必要があります。そのためのAPIも用意されているのでやり方をメモ。

import magenta.music as mm
loaded_sequence = mm.midi_file_to_note_sequence(filepath)

# NoteSequenceを視覚化&演奏
mm.plot_sequence(loaded_sequence)
mm.play_sequence(loaded_sequence, synth=mm.fluidsynth)

これだけです(環境構築が済んでいる前提ですが)。こちらmidi_io.pyMIDIとNoteSequenceの相互変換に関するAPIが載っていますよ。

【こうなん星の公園】品川駅港南口付近にある微妙な公衆ベンチ

本日は品川駅港南口付近にある微妙な公衆ベンチをご紹介。

 

f:id:hahaeatora:20190723203602j:plain

港南口を出た辺り。左斜め前方へと進みます。

 

f:id:hahaeatora:20190723203834j:plain

空中歩道より東京湾方面を望む。左下にベンチ見えてます。

 

f:id:hahaeatora:20190723204028j:plain

降りてきました。何だか微妙なベンチ、配置も微妙。

 

f:id:hahaeatora:20190723204153j:plain

木の周囲にも微妙なベンチ。これベンチ?

地図でこの場所を見ると「こうなん星の公園」という名前らしいです(公園といってもただのコンクリート広場)。ただこのベンチたちが公園の敷地内に入るのかは微妙。この記事も微妙。

【音楽】AI(人工知能)に有名DJのミックステープを機械学習させてみた ~CNN編~

タイトルの通りDJのミックステープを機械学習させてみました。正確にはCNN(畳み込みニューラルネットワーク)を用いた深層学習です。

私はBBOY(ブレイクダンサー)なので、いわゆるブレイクビーツのミックステープを使います。ブレイク界でも有名なDJ Lean Rock、DJ Fleg、DJ Nobunagaを今回は学習対象としました。

Dj Lean Rock | Free Listening on SoundCloud
DJ FLEG | Free Listening on SoundCloud
Nobunaga 🎵 | Free Listening on SoundCloud


データの前処理・特徴抽出

音声解析系でよく見かける特徴抽出の手法として周波数解析が挙げられます。スペクトログラムで検索するとカラフルな画像がたくさん出てくると思います。つまり画像を学習させる要領で音楽の学習もできるわけです。今回はメル周波数スペクトログラムを学習に使います。これが何かというと専門外の私にはうまく説明できないのですが、以下URL等が参考になるかと思います(感謝)。

speechresearch.fiw-web.net


ではどうやってメル周波数スペクトログラムを得るのかというと、「LibROSA」という音楽解析用の便利なPython向けライブラリがあるのでそちらを利用させてもらいます、本当に便利。

librosa.github.io


以下のようなコードを書くことでmp3やwavといったオーディオファイルからメル周波数スペクトログラムを得ることができます。ちなみに"sr"がサンプリングレート、"offset"と"duration"で読み込むオーディオの長さを指定できます(何秒地点から何秒間)。durationにNoneを指定すると最後まで読み込みます。

import librosa.display
y, sr = librosa.load(filepath, sr=22050, offset=0.0, duration=None)
S = librosa.feature.melspectrogram(y=y, sr=sr)

librosa.feature.melspectrogramからは2次元のNumPy配列が返ってきます。これを2次元の畳み込みによるCNNに学習させましょう(モデル構造の紹介は省略しますがそんなに複雑ではありません)。
hahaeatora.hateblo.jp


また、今回の学習対象はミックステープとデータ長が長いので(1つにつき約40分程度はあります)、スライディングウィンドウ方式によりデータを分割します。イメージは以下のような感じです(図は適当です)。

f:id:hahaeatora:20190721163859j:plain:w500
切り取り枠をずらしていき、1つのデータから複数のデータを抽出する感じです。スライド幅を短くするとデータ数も増えます。ただし、この手法ではDJのミックステープを学習する上で欠点もあるのでそれは後述します。

ちなみにオーディオファイルの読み込みやデータ抽出にけっこう時間がかかるので、生成したNumPy配列はバイナリファイル(npz)として保存しておきます。以下はその例です(学習&テスト用にデータを分割しているものとする)。

import numpy as np
dataset = (x_train, x_test, y_train, y_test) # すべてNumPy配列にしておく
np.savez("dataset.npz", dataset)



データの学習・モデルの評価

やっとこさ学習データが準備できましたので、3人のDJ名をラベルとしてCNNモデルに学習させます(クラス分類)。その結果、テスト用に分割したデータに対する学習済みモデルの正解率は約50%となりました(ただし時間が取れずパラメーター調整はほとんどしてません)。この数字だけ見ると微妙です。

ただ、テスト用データもスライディングウィンドウ方式で抽出したデータなので一つ一つが短いです。これら各々に対して正解or不正解というのもしっくりこないので、以下のような評価の仕方を考えます。

f:id:hahaeatora:20190721174031j:plain:w500
モデルの出力層からはソフトマックス関数による各クラスの予測確率が算出されます。これらの平均値を求めることで、「このデータはDJ〇〇成分が○%、DJ〇〇が……」といったアウトプットの方法にすることにしました。
せっかくなので、学習に使ったミックステープに含まれない各DJのオリジナル楽曲を学習済みモデルに読み込ませてみましょう。以下にアウトプット例のスクショを載せてみます。


f:id:hahaeatora:20190722002728p:plain:w500
DJ Lean Rockの「Madafaka」ですがLean Rock成分が約57%となりました。


f:id:hahaeatora:20190722003335p:plain:w500
DJ Nobunagaの「Machine Guns」ですがNobunaga成分が約64%となりました。


f:id:hahaeatora:20190722003125p:plain:w500
DJ Flegの「Clive's Chords」ですがFleg成分が約15%となりました。

Lean RockとNobunagaについてはその成分高めということで一応分類もできそうです。ただしFlegの楽曲については逆に一番成分が低めということになってしまいました。ただFlegの楽曲的にLean RockとNobunagaの間に位置しそうな感じもあるような無いような……正直よく分かりません。
とはいえ、この三人以外の楽曲で試して確かにこれはDJ〇〇っぽいみたいなのもありました。例えばDJ Jebelのある楽曲だとNobunaga→Flegの順に成分高めと、個人的にこれはしっくりくる印象です。

Dj Jebel | Free Listening on SoundCloud


課題

今回はスライディングウィンドウ方式によりミックステープを細切れにして学習させましたが、楽曲のつながりにも意味があります。いわゆるストーリー性というのもDJの特色が反映される要素です。その辺りを無視して学習してしまっているので、DJプレイの学習という意味では改善が必要です。DJがかける楽曲の特徴という意味ではある程度学習できているのかなという感じです。他の学習手法も時間あったら試してみようと思います。

参考

ブレインパッドさんの記事にてほとんど同じようなことをされています。導入も非常に丁寧に紹介されているので、この記事より普通に参考になるかと(爆)。
blog.brainpad.co.jp

こういうこともやってます

hahaeatora.hateblo.jp
hahaeatora.hateblo.jp

【X-CUBE-AI】STM32CubeMXでコード生成する際に気をつけること【組み込みAI】

「組み込みAIやりたい!」と思って、X-CUBE-AIを追加したSTM32CubeMXでGENERATE CODE(コード生成)しようとすると以下のような警告が出る場合があります。※この記事執筆時点でのX-CUBE-AIの最新バージョンは4.0.0ですが同様です。

 

f:id:hahaeatora:20190719204159p:plain

この警告はPinout & Configurationタブにて「Artificial Intelligence Application」のチェックを外すと出なくなります(多分)。

 

f:id:hahaeatora:20190719204627p:plain

「Artificial Intelligence Application」は変換・圧縮後のAI学習済みモデルの精度やマイコン上でのパフォーマンスを計測するための機能などが入っているみたいです(そのためコード生成時には必要ないはず)。

その辺りはゆっきぶろぐさんの記事が分かりやすいです(感謝)。

yukblog.net

 

公式ドキュメント(UM2526)にもこのような記載はあるのですが、けっこう見落としやすい気もしたので記事にしてみましたよ。

www.st.com

 

AIで可能になること

hahaeatora.hateblo.jp

hahaeatora.hateblo.jp

【SIGDance】Cypher Session vol. 1.5を開催します

去年の12月、Cypher Session vol.1を開催しました。

hahaeatora.hateblo.jp

hahaeatora.hateblo.jp

 

前回は非常に濃いメンツでアンダーグラウンドに盛り上がりました。

そんなCypher Sessionの第二回の開催が決定しました!といっても今回は小規模開催なのでVol 1.5ということになっています。ダンスやテックに興味のある方、ぜひお気軽にご参加ください。発表希望の方もお待ちしております!
※詳細はWEBを参照

f:id:hahaeatora:20190719015208j:plain


Cypher Session vol.1.5

日時: 2019年08月04日(日) 15:00~18:00
場所: 東京大学 教育学部棟 357号室、358号室
〒113-0033 東京都文京区本郷7-3-1
交通案内:東京メトロ 本郷三丁目駅(丸の内線)から 徒歩10分程度
https://www.u-tokyo.ac.jp/campusmap/cam01_09_01_j.html
内容: スライド発表及び議論
参加費: 無料
※全てのセッション終了後に懇親会を予定しております。

www.sigdance.site