COLUMN

コラム

やらずに死ねないプログラミング【6】
いきなりディープラーニング!?
本格的なのに初心者にもやさしいAIプログラミングとは
山辺 真幸

2020/05/12

山辺 真幸

「AIプログラミング」という言葉を聞くと、どうしても難しいイメージがつきまといますが、Processingとモデルを使うと、簡単に実現できます。ここではその方法とそれによって広がる世界について紹介します。

「AIを使うプログラミング=難しい」は過去のもの

ロボット、ゲーム、アプリなど、プログラミングを学ぶ目的は人それぞれですが、学びたいけれどちょっとハードルが高そうと感じてしまう方も少なくないでしょう。本連載では、そのような方へのひとつのきっかけとして、「プログラムで絵を描く」という話題を取り上げてきました。絵、すなわち視覚的な表現は単純に見えて、数式や手続きなど他のプログラミングでも有用なプログラミング的思考を必要とする要素がたくさん含まれているからです。

連載第3回で紹介した「Processing(プロセッシング)」は、まさにこのような目的にぴったりの学習ツールです。マサチューセッツ工科大学のメディアラボで開発されたこの無償のツールは、2001年の登場以来、世界各地の大学でプログラミングの入門的なプログラミング環境として広く学ばれています。筆者も2008年から現在まで、東京芸術大学、多摩美術大学、慶應義塾大学での授業を通じて多くの学生に教えてきました。

Processingはそれ自体がツールとして優れているだけでなく、多くの利用者が作品のコードを共有したり、世界の第一線のクリエーター達が、教材、サンプルコード、関連書籍、機能拡張ライブライを提供するなど、コミュニティの広さと質が他の学習環境よりも優れていると言えます。

さて、AIやディープラーニングと聞くとどんな印象をもちますか? 自動運転など革新的なサービスには、必須の技術でありながらもその応用範囲は広く、アートやエンターテインメントなどクリエイティブな領域にも広く取り入れられています。

たとえば最近では、カメラに映った物体の自動認識技術で演出されたミュージックビデオ、画家のタッチや画風を真似た動画、驚くほどの歌唱力の楽曲などが挙げられます。これらの多くは、写真や絵や音声からなる膨大なデータをディープラーニングという方法で学習させた「モデル」利用して作られています。モデルを自分で開発するのは非常に難しいですが、実は、既存のモデルを使っておもしろい表現をプログラミングすることはそれほど難しくなく、初心者でも「絵を描くプログラミング」のコツを掴めばこうした表現へのステップも見えてきます。

少し前置きが長くなりましたが、今回は、Processingと「モデル」を使ってどのようなことができるかを紹介したいと思います。

ProcessingでAIを使ってプログラミングしてみよう

ディープラーニングのアーミーナイフ「RunwayML」
RunwayMLはさまざまなタイプの学習済みモデルと、自分のプログラミング環境を仲介してくれるソフトウェアです。現在100以上のモデルが利用可能です。RumwayMLのサイトではこれらのモデルを使用して作られたアイデアが多数公開されています。

ダウンロードして使用すること自体は無償ですが、モデルの中には無償で使えるものとそうでないものがあります(理由は後述します)。今回は、RumwayMLを起動し、Processingで行うクリエイティブなAIプログラミングのサンプル紹介します。

image

image

RunwayMLの準備
Processingがインストール済みであれば、今回必要となる準備の大まかな手順は次のとおりです。

・RunwayMLをインストールしサインアップ
・ProcessingにRunwayMLライブラリを追加

image

image

カメラからの映像をリアルタイムに「葛飾北斎」のタッチに変換
準備が整ったら、いよいよモデルを使ってプログラミングしてみましょう。とはいえ、各モデルに対応したProcessingのサンプルコードが充実しているので、今回はすべてこのサンプルを使っています。流れは下記のように、いたってシンプルです。

・RunwayMLで使用したいモデルを選んで実行
・Processingでサンプルプログラムを実行

ただし、注意してほしいことがあります。モデルにはサーバのGPUを使用するものと、PCのCPU使用するものがあるということ。前者の場合は、なるべく安定したネットワークに接続した状況で実行することをオススメします。またその際、1分あたり$0.05のクレジットを消費するので、プログラムを実行していないときはモデルも停止させることも忘れないようにしましょう。

執筆時点では、サインアップすると$10分の無料クレジットが提供されていました。単純計算ですが、実質200分は無料で使えるため、お試しには十分な長さです。

それではさっそく、画像を著名な画家のタッチに変換する「Fast-Style-Transfer」というモデルをRunwayMLのブラウズ画面で検索し、自分のワークスペースに追加します。

image

次にModel Setupのメニューで「Hokusai.Pth」を選択し「Run Remotely」をクリックするとモデルが起動します。

image

続いてProcessingを起動しサンプルから、RunwayML用のサンプルコードを開きます。「Contributed Library」>「RunwayML Processing Library」>「HTTP」>「FastStyleTransfer」を開き、実行します。

image

実行すると、このようにカメラからの映像がリアルタイムに北斎タッチの映像に変換されました。

image

Model Setupメニューで他の画家を選択してモデルを実行すると、絵のタッチを変えることもできます。ピカソやキュビズム風の映像にするには「Cubist.Pth」を選びます。

image

充実した学習モデルを試すだけでも十分楽しめる

上記の要領で、モデルとProcessingのサンプルコードを差し替えていくだけで十分楽しく、また、モデルについて深く知ることができます。以下では、筆者が半日ほど遊んでおもしろかったいくつかのモデルを紹介します。とても全部のモデルは試せなかったので、まだまだおもしろいものがあると思います。

ちなみに、以下ではモデル名とサンプルコードの名前が一致しないものについては、( )内に対応するサンプルコードのファイル名を記述します。

PhotoSketch

image

映像のエッジを抽出して、手書き風のタッチに変更します。

SPADE_Landscapes(SPADE_Landscapes_Paint)

image

左側は筆者がマウスで30秒くらいで描いた雑な絵ですが、このモデルに入力すると右側のような写実的でリアルな風景に変換されます。

DeepLabV3(DeepLab)

image

セグメンテーションという画像解析手法で、画面上にある物体を認識しその領域を特定します。このスクリーンショットでは、person(紫色)とbottle(薄桃色)が認識されています。人の領域だけを切り取って画像と合成できそうです。(このサンプルコードは一箇所修正が必要でした。詳しくは記事末尾をご覧ください。)

PoseNet(PoseNetWebcam)

image

人間の姿勢を推定するモデルです。骨格や顔の主要なパーツの位置を画像から特定できます。このスクリーンショットでは著者の目と鼻、肩の位置が正確に特定されていることがわかります。(このモデルはローカルで使用でき、クレジットを消費しません。)

COCO_SSD

image

カメラに写っている物体を認識し矩形と物体のラベルを返します。上で紹介したDeepLabのセグメンテーションとは異なり、映っているものの画面上の位置情報が扱いやすく、また、ローカルで使用できクレジットを消費しないため、応用の幅も広そうです。

AIプログラミングは難しくない

クリエイティブなAIプログラミングを加速させる
多くの人にとってAIやディープラーニングと聞くと非常に取り扱いが難しく、プログラミングをちょっと練習しただけではまったく手の届かない存在のようなイメージではないかと思います。たしかにRunwayMLのようなツールの登場以前は、多くのプログラミングビギナーにとってはその道のりは果てしなく遠いものでしたが、筆者が体験した率直な感想では、RunwayMLそのものの使い勝手やサンプルコードはとても扱いやすく考慮されており、ビギナーにとっても軽い気持ちではじめられます。

またビギナーだけでなく、AIについて本格的に取り組んでみたいエンジニアにも、どのようなモデルがあり使い勝手はどうなのかについて試したい場合に多くの恩恵をもたらしてくれるでしょう。

遊びから芽生える「探究心」
本文ではあまり触れませんでしたが、RumwayMLが安易にモデルを使いやすく提供するだけでなく、モデルの生成過程や学習したデータを示す重要な論文や、研究者のウェブサイトへダイレクトなリンクを提供していることも特筆に値します。その理由は、ディープラーニングによるAI技術は応用範囲が広い一方で、学習データの偏りによるバイアスが生みだす差別や偏見、「ブラックボックス化」というセンシティブな問題と表裏一体の関係にあるからです。

モデルを使ったプログラミングで遊ぶことは、こうした問題にも敏感になる貴重な入口になり得ます。そして、疑問を感じたらオリジナルの論文にアクセスしてみるなど、より深い探求への道も開かれているのです。

やらずに死ねないプログラミング【6】いきなりディープラーニング!?本格的なのに初心者にもやさしいAIプログラミングとは
山辺 真幸

2020/05/12

山辺 真幸

関連記事

image
image
人気の記事
タグ一覧
バレッドキッズ新規生徒募集
バレッドアカデミー
バレッドキッズ先生募集