第14回 AIをどのように作るのか?

「「ダイスmusic」の開発 -画像認識技術と音楽生成AIを使ったマシンの製作-」の探究活動

皆さん、こんにちは。テラオカ電子です。今回は、「ダイスmusic」というAIの電子工作の探究活動を紹介します。ここでは、AIの工程(作り方)を学びます。

昨年、2023年は、ChatGPTをはじめとする生成AIが話題でした。今年、2024年も進化が続きそうです。なので、高校生がAIを学ぶこと、すなわちAIリテラシーを高めることは重要です。

ところで、私が生徒にAIを教えようと思い、AIの勉強を始めたのは5、6年前からになります。この時の状況を少し述べたいと思います。新しことを始める時の参考になればと思います。

2018年以前、工業高校にいたとき、プログラミングの授業では、C言語を教えていました(今でもC言語ですが)。当時、C言語は古いのでこれからはJavaに変わる思い、Javaの勉強をコツコツしていました。ところが、メディアでAIの報道をよく目にするようになり、影響を受けてAIに意識が向きました(私は単純なので、簡単に洗脳されます)。また、AIの技術の入門書が多数出版された時期でもありました。個人でもAIを学べる環境になりました。そのような訳で、AIを始めるなら今だと確信して、2018年の冬休みから本格的にAIの勉強を始めました。当時、私は、AIの技術的知識を持っていませんでしたが(今でも大してないのですが)、幸いなことに、出会った書籍が分かり易かったので、AIの勉強は楽しかったです。

当時、読んで良かった書籍をいくつか紹介します。参考にしてください。ただし、これは当時の私が読んで良かったものですので、今、全ての人に当てはまるかどうかは分かりません。

  • 斎藤康毅:『ゼロから作る Deep Learning Python』,2018,オライリー・ジャパン
  • 我妻幸長:『はじめてのディープラーニング』,2019,SBクリエーティブ
  • 涌井良幸,涌井貞美:『Excelでわかるディープラーニング超入門』,2018,技術評論社
  • 涌井良幸,涌井貞美:『Excelでわかる機械学習超入門』,2019,技術評論社
  • 金丸隆志:『RaspberryPiではじめる機械学習』,2018,講談社

など。

これ以降も、色々楽しみながら読んでいます。併せて、2020年以降、YouTubeの動画も観るようになりました。分かり易く、役に立つ動画がたくさんアップされました。

そして、満を持して2019年から生徒とAIの探究活動を始めました。記念すべき最初のAIの教材は、以下のYouTubeで見ることができます。

【テラオカ電子:『文字認識:ニューラルネットワーク』はこちらから】

このように、自身でAIを勉強しながら、生徒と探究活動を行ってきました。では、どのようにすれば、生徒のAIリテラシーを高めることができるか? いろいろ試行錯誤したのですが、現在では、以下の3つの軸で整理できると考えています。

AIリテラシーを高める方法:

  • AIの仕組みを理解する
  • AI の活用を提案する
  • AIの工程(作り方)を体験する

第9回で紹介した「AIとじゃんけん」は、AIの仕組みを学ぶ探究活動でした。第3回、4回で紹介した「いじめ」と、第8回の「高齢者施設訪問」は、AIの活用を学ぶ探究活動でした。そして、第6回で紹介した「AIとハト」と今回、第14回で紹介する「ダイスmusic」は、AIの工程を体験する探究活動です。ぜひバックナンバーも読んでいただけると嬉しいです。

今回の探究活動も前前回の「アニマルMINT」、前回の「マイコン時計」と同様、本校2年生の3名の生徒と取組みました。彼ら彼女らは、工業クラスの生徒です。来年度、3年次に『生産技術』という科目が設定されているのですが、その3学期に行う予定の教材になります。この探究活動は、その準備です。この3名は、教材準備を快く手伝ってくれたMission(使命感)とPassion(情熱)を持った生徒たちです。

では、「「ダイスmusic」の開発 -画像認識技術と音楽生成AIを使ったマシンの製作-」の探究活動を生徒の研究論文を引用しながら紹介します。

なお、生徒たちが、サイエンスコンテストで研究発表した内容を私が代読した形ですが、YouTubeで一般公開しています。以下のリンクから動画を視聴できます。見て頂けると後の話が良く分かると思います。

【テラオカ電子:「「ダイスmusic」の開発」(2023)を公開します。」はこちらから】

研究の背景と目的

21世紀におけるテクノロジーの進化は、私たちの生活を根本的に変革している。特にディープラーニング技術の急速な進歩は、画像認識技術を一般の個人にも手軽に利用可能なものへと変えた。これまで高度な専門知識を必要としていた画像認識技術は、日曜大工のように、誰もが気軽に取り組むことのできる領域となった。同様に、生成AIの台頭により、音楽制作も従来に比べて簡単にアクセス可能になった。素晴らしい旋律やハーモニーを持つ楽曲を作成することは、もはや専門的な技能を持つ者に限られるものではなくなりつつある。

本研究では、このような技術の進化の中で、特に画像認識技術の中核であるCNN(Convolutional Neural Network:畳み込みニューラルネットワーク)を用いた画像分類技術と、音楽生成AIに焦点を当てる。CNNは、その構造と学習能力により、画像の特徴を抽出して分類する優れた手段である。また、音楽生成AIも、既存の音楽パターンを学習し、新たな音楽を生成する能力において驚異的な進歩を遂げている。私たちは、これらの技術をレゴ部品を組み立てるようにプロダクトを製作できることを示す。

本研究の問いは、これらの技術を融合したプロダクト、具体的には、CNNを用いてサイコロの目を分類し、生成AIによって作ったオリジナルな音楽をサイコロの目に応じて切り替えるマシンを実際に実現できるかである。

本研究では、この問いに対し、大掛かりな機材や高価なソフトウエアを購入することなく、しかも短時間で、画像分類と音楽生成の技術を使って、サイコロの目で音楽を切り替えるマシンが開発できたことを報告する。

また、本研究の最終的な目的は、サイコロの目によって希望する音楽が流れ、鑑賞できる仕組みのプロトタイプ製作を通して、身体的な活動を入力スイッチとする未来の音楽装置の可能性を探究することである。加えて、個人の創造性と技術の力が新たな領域を切り開くことを示すことにある。

本稿では、まず、開発した「ダイスmusic」のハードウエアの構成を述べる。次にサイコロの画像を分類するCNNモデルを説明する。次に、生成AIを使って音楽を生成した過程を述べる。次に、「ダイスmusic」の全体プログラムのアルゴリズムを説明する。次に、研究の考察を行い、最後にまとめと今後の課題を述べる。

ハードウエアの構成

図1に開発した「ダイスmusic」の全体構成を示す。

ハードウエアは、ラズベリーパイ、Webカメラ、ディスプレイおよびスピーカーから構成される。

Webカメラでサイコロを撮影すると、プログラムにより、サイコロの輪郭を抽出する。次に、抽出されたサイコロの画像をCNNのモデルを使ってサイコロが何の目なのかを推論する。ここで、CNNのモデルは事前に学習してある(次項で説明)。次に、サイコロの目に対応した音楽を読み込む。次に、ディスプレイには、サイコロの目の分類結果を表示し、スピーカーからは読み込んだ音楽を再生する。音楽が終わると、Webカメラでサイコロの目の画像を読み込みにいく。以後、この動作を繰り返す。

サイコロの画像分類モデルの制作

図2に今回のCNNのモデルの構成を示す。このモデルは書籍を参考に構築したVGG16 Likeモデルである。図3にkerasを使ったモデルの定義プログラムを示す。

入力は、輪郭抽出されたサイコロの目の画像である。輪郭抽出することで、サイコロの場所に依存せずに推論できる点、また、画像のサイズを小さく(32×32ピクセル)できるので、モデルの学習時間を短縮できる利点がある。

サイコロの画像は、サイコロの向きを変えて各目10枚(合計60枚)の写真を撮影して準備した。モデルの学習は、まず、1つのサイコロの画像を-25度から+25度、1度ずつ傾けて、画像を水増しする。次に水増しされた画像(60枚×50倍)で学習を行う。学習は、図4で示すコードで行った。

# CNNのモデルを定義する
def def_model(in_shape, nb_classes):
    model = Sequential()
    model.add(Conv2D(32,
              kernel_size=(3, 3),
              activation='relu',
              input_shape=in_shape))
    model.add(Conv2D(32, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))

    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(512, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes, activation='softmax'))
    return model
hist = model.fit(x_train, y_train,
          batch_size=64,
          epochs=15,
          verbose=1,
          validation_data=(x_test, y_test))

【音楽生成AIによる音楽の制作】

音楽生成は、CREEVOを使った。図5にCREEVOのWebサイトを示す。

CREEVOは、京都大学が文化進化の研究のために、一般参加協力型の科学実験の場として運営している音楽生成AIである。色々な方々が本サイトで音楽を生成し、出来上がった音楽を評価することで、AIを学習させていく仕組みになっている。

本研究では、私たちが、簡単な歌詞を6曲作り、それをCREEVOで作曲させた。生成された楽曲の例をそれぞれ図6および図7に示す。

[メタデータ]

  • 作成時刻: 2023/07/27-12:29:08
  • タイトル: 私は魚です。広い海を自由に泳ぎます。
  • 歌詞: 私は魚です。広い海を自由に泳ぎます。
    [コード]
  • コード進行: 5小節16325: C|Am7|Em7|Dm7|G7
  • 調: (♭6つ)G♭メジャー/E♭マイナー
    [メロディーのスタイル]
  • メインモデル: [実験] A
  • Bpm: 95.0
  • メロディー楽器: サックス
  • 最高音: G4
  • 最低音: C3
  • 遊び度: 1.3
  • 和音の当てはまり度: 1.5
    [伴奏のスタイル]
  • 伴奏パターン 1: ストローク 4分8分ミックス 2
  • 伴奏楽器 1: ピアノ
  • 伴奏パターン 2: ベース:8ビート 付点
  • 伴奏楽器 2: シンセストリングス
  • ドラムパターン: ファンク 型5(BSHSp)

[メタデータ]

  • 作成時刻: 2023/07/27-12:47:46
  • タイトル: 一人旅。友達は太陽と雲。世界は自分の中にある。
  • 歌詞: 一人旅。友達は太陽と雲。世界は自分の中にある。
    [コード]
  • コード進行: [5小節] ヒーロー アウトロ: G/B|Am|C/G|F|C/E
  • 調: Cメジャー/Aマイナー(♯・♭なし)
    [メロディーのスタイル]
  • メインモデル: Mr.Children 風
  • Bpm: 108.0
  • メロディー楽器: アコースティックギター
  • 最高音: G4
  • 最低音: C3
  • 遊び度: 1.3
  • 和音の当てはまり度: 1.5
    [伴奏のスタイル]
  • 伴奏パターン 1: ストローク 4分8分ミックス 3
  • 伴奏楽器 1: アコースティックギター
  • 伴奏パターン 2: ベース:単純4ビート
  • 伴奏楽器 2: フィンガーベース
  • ドラムパターン: 8ビート 型15(BSHSp)
図7 CREEVOによる音楽生成の例2
上:歌詞と設定データ:下生成された音楽の楽譜

生成された音楽は、mp3でダウンロードでき、また歌声も入っている。本「ダイスmusic」では、サイコロの目に対応した音楽ファイルを呼び出して再生させている。

動作プログラムのアルゴリズム

図8 推論プログラム-初期設定-

プログラムはpythonで記述した。ラズベリーパイは標準でpythonが使える。まず、図8に示すように、必要なライブラリーのインポート、入出力の指定、CNNモデルおよび学習パラメータの読み込み、カメラの準備を行う。

次に、図9に示すように、画像を2値化したのち輪郭抽出を行う。輪郭抽出した候補の内、小さすぎたり大きすぎたりするものや、さらに輪郭が近すぎるものを除去する。

次に、輪郭内の画像をRGBからBGRにし、さらに32×32のサイズへ変換する(x1)。

最後に図10に示すように、x1の推論を行い、元のWebカメラの画像(frame)に輪郭枠と推論したサイコロの目の値を重ね合わせて表示する。

音楽の再生は、まず、図11に示すようにpygameをインポートしたのち関数を定義する。この関数では、25秒間音楽を再生させている。次に、図12に示すように推論で得たindexの最大値の値で分岐を行うことで、対応する音楽ファイルを再生させている。

【考察】

本研究では、サイコロを振るという身体的活動を使って、音楽の曲を切り替えるマシンを製作した。今回製作にあたり使用した部材は、ラズベリーパイとWebカメラ、スピーカー程度である。どれも簡単に比較的低価格で手に入る。また、プログラムも書籍やWebサイトを参考に簡単に構築することができた。音楽に関しても、生成AIを使って、オリジナルな曲を作ることができた。何度も動作させると時々、音楽再生の後、プログラムがフリーズすることがあった。今回、多くのライブラリーを組合わせてプログラムを作っているが、OSとの整合性に問題があるのかもしれない。もちろん、商品として売り出す場合には問題となるが、個人でも簡単にこのようなマシンを構築できることを示した。

加えて、一般に、世の中は効率を向上させる方向に向かって進んでいくと考えられている。したがって、究極的には遠い将来、頭でイメージしただけで音楽を切り替えられるようになるかもしれない(SF的ではあるが)。しかしながら、本「ダイスmusic」は、あえてサイコロを振るという手間のかかる方法で、音楽の切り替えを行った。私たちは、議論するなかで、人間は、このような究極的な効率は望まないのではないかと考えている。実際に身体を使って難儀をすることで、自身の意図を肯定感をもって感じるのではないか。また、サイコロを振るということは、ある意味、偶然(神の意志)に任せる行為であるが、コンピュータが乱数で決めるのではなく、自身の主体的で身体的行為である点に意味があるのではないかと考えた。世の中は、このような人間中心的な方向でも進むと考えている。

【まとめと今後の課題】

本研究の問いは、CNNモデルを用いてサイコロの目を分類し、生成AIによって作ったオリジナルな音楽をサイコロの目に応じて切り替えるマシンを実際に実現できるかであった。そして、この問いに対して、大掛かりな機材や高価なソフトウエアを購入することなく、しかも短時間で、画像分類と音楽生成の技術を使って、サイコロの目で音楽を切り替えるマシンが開発できることを報告した。

本稿では、まず、開発した「ダイスmusic」のハードウエアの構成を述べた。次に、サイコロの画像を分類するCNNモデルをそのコードを示して説明した。次に、生成AIを使って音楽を生成した過程を述べた。次に、「ダイスmusic」の全体プログラムのアルゴリズムもそのコードを示して説明した。次に、研究の考察では、人間は効率向上を求める方向だけでなく、実際に身体を使って難儀をすることで、自身の主体的で身体的行為を重視した人間中心的な方向にも進むのではないかと述べた。

顧問の先生は、60年代、小学生だった頃、「ラジオ少年」の友人がいたそうである。その友人が電子部品をはんだ付けしてラジオを組み立てる様子を、憧れをもって友人の話を聞いていたそうだ(残念ながら顧問の先生は電子部品を購入することができなかったらしい)。時は流れ80年代、ホリエモン(堀江貴文氏)に代表される「パソコン(マイコン)少年」がいた。そして、さらに時は流れ、現代は「AI少年」の時代になった。本研究で示したように、インターネットを使って様々なライブラリーを組合わせて、自分のオリジナルなAIマシンを作れる時代になった。今回は、CNNと音楽生成AIの技術を使って「ダイスmusic」というマシンを作ったが、今後、様々なAIモデルを活用して、自身のこだわりを具現化していく。

参考・引用文献

[1]クジラ飛行机、杉山陽一、遠藤俊輔:『PythonによるAI・機械学習・深層学習アプリのつくり方』、2020、ソシム株式会社

【本探究活動のまとめ】

この探究活動では、生徒にAIの工程(作り方)を学んでもらう教材として、「サイコロの分類」を扱いました。生徒は、実際にサイコロの写真を撮り、その画像を加工し、それをCNNモデルで学習させ、そのモデルを使って実際にサイコロの目を判定(推論)させるという体験をしました。

もっとも、この体験だけで、AIの作り方をマスターできるわけではありません。AIのモデルには、多くのものがありますし、その開発手法も様々です。ですが、この体験を通して、この規模のAIであれば、これぐらいのデータで、この程度の精度がでるという規模感やイメージを持つことはできたのではないかと思います。

また、今回の教材として、「サイコロ」を選びました。AIに画像の分類をさせるのに、いろいろなものを考えましたが、サイコロの目の「単純さ」と「6分類」という、少なくもなく、多くもないという手頃感から選びました。

このサイコロの目の画像分類は、私のオリジナルだと思っていましたが、調べてみると、サイコロの画像のデータセットがありました。

【「Dice Datasets for Machine Learning / サイコロの目認識のための教師用画像データセット」はこちらから】

そこでは、ディープラーニングを用いたサイコロ認識のモデルを世界で初めて作った人物として、「うえぽん」さんが紹介されています。でも、

のように、2020年時点で70%となっています。私の場合、2021年4月にですが、特定のサイコロですが、リアルタイムでほぼ100%分類できます。この分野の技術の進歩は、早いと言えます。

【「DiceRecognitionDatasetForML」はこちらから】

【テラオカ電子:『「サイコロの分類」を作りました。』はこちらから】

サイコロの分類に関しては、いろいろなバージョンを作くっています。「サイコロのゾロ目検出器」や、「サイコロの分類のメイキング動画」、「サイコロの画像をCNN回帰を使ってその目の値を予測」、「サイコロの画像をCNN(VGG16)モデルを使って次元変換したものをLightGBMを使って回帰」です。以下に動画のURLを置きましたので、参考にしてください。

今後も、生徒がAIの工程を学べる教材(サイコロとは違うコンセプトで)を開発していく予定です。ご期待ください。

【テラオカ電子:『「サイコロのゾロ目検出器」をつくりました。』はこちらから】

【テラオカ電子:『「サイコロの目の分類」のメイキング授業』はこちらから】

【テラオカ電子:『「CNN回帰 サイコロ編」をつくりました。』はこちらから】

【テラオカ電子:『CNN回帰(VGG16+LightGBM)を作りました。』はこちらから】

今回は、「ダイスmusic」の開発 -画像認識技術と音楽生成AIを使ったマシンの製作-」の探究活動を紹介しました。

ここまで読んでくれて、ありがとうございます。

ご質問・ご意見・ご感想等がありましたらコメントください。

テラオカ電子 

【イチオシのYouTube動画】

このコーナでは、記事に関連する(関連しないかもしれません)気になるYouTube動画を紹介しています。前回13回「マイコン時計」でコロナのことを書きましたが、今回は、「この星のウィルスも少し壊れ始めて 無機質な恋愛グラフも上がり始める♪」で始まるポケットビスケッツ(ポケビ)の『Red Angel』(1997)を紹介します。まさに今の歌でしょう。ウッチャンの小室さんの真似が面白いです。ちなみに、ポケビはブラビと共に2023年の紅白歌合戦に出たらしい。

「ポケビ「Red Angel」 PV .flv」

【余談】

コロナの時代、以下のような動画もYouTubeにアップしていました。その当時のことを思い出すきっかけになればと思います。

【テラオカ電子:『「ビジネス実践課題 コロナ編」を実施しました。』はこちらから】

【テラオカ電子:『ビジネス実践課題 答え合わせ編』はこちらから】

【2024/01/07投稿】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次