TensorFlowやCaffeだけじゃない、C言語で書かれたニューラルネットフレームワーク「darknet」ではじめる軽やかな人工知能開発
これからディープラーニングを用いたプロダクトを開発するあなたは、どのようにしてプロダクトを開発するのでしょうか。フルスクラッチ?あるいはフレームワーク?おそらく多くの人はフレームワークを使うことになるでしょう。
GoogleのTensorFlow、Preferred NetworksのChainer、BVLCのCaffe、多くはいづれかの有名なフレームワークを採用することと思います。
さて、そんな中、今回ご紹介したい"すごい"フレームワークは「darknet」という名前です。
darknetはCで書かれたニューラルネットワークのフレームワークで、最大の特徴は学習済みのデータとニューラルネットワークのアルゴリズムがセットになっている点です。
つまり、簡単な人工知能の実験を行うためにわざわざデータセットを探してきて、学習させて・・・ということがいらないため、とても簡単に機能を試すことができるのです。
それに加えてCで書かれているため、高速に動作し、デフォルトCPUに対応しています。つまり、ハード的な課題もいったんおいておいていろいろと検証ができるわけです。もちろんGPUでの動作も可能です。GPUの場合はMakefieに「GPU=1」と記述するだけの簡単仕様であることも魅力的です。
Cで書いてあるというだけで一見ミニマリストのためのニッチなフレームワークにも見えますが、必要十分な機能がつまっていて、コードを読めば、何が行われているのかわかりやすいとてもシンプルな構成なので、入門用のフレームワークとして使用しても良いと思います。
darknetで動作させるニューラルネットワークのアルゴリズムはYOLOというアルゴリズムで、darknetの作者であるJoseph Redmonが作ったアルゴリズムでもあります。
何ができる?
このフレームワークは他のフレームワークと同様にニューラルネットワークという人間の脳を模したプロセス構造を提供するものなので、さまざまな用途に応用できます。
画像認識
例えば、画像に写っている物体が何であるのかを認識することができます。そこに写っているのが猫なのか、コーヒーなのか、そういった具合です。Facebookなどで馴染み深い顔認識なんかもこの技術が応用されています。
画像生成
たとえば、自分で書いた落書きを「ピカソ風にして」とすれば、ピカソ風の落書きが完成する。要するに、元の作品の特徴をあぶり出し、その特徴をフィルターとして画像加工したりすることができる。例えば、Instagramのフィルター機能などをイメージしてもらえるとわかりやすいのではないだろうか。
文章生成
人間で言えば思考回路に当たるフレームワークなので、画像だけにとどまりません。たとえば、文章を自動で生成することだって可能です。例えば、夏休みの作文を「村上春樹みたいにして」とすれば、情景が鮮明に浮かぶドキッとする展開の作文にしてくれるかもしれません。
ゲーム学習
ゲームの学習だってできます。スーパーマリオのようなゲームから、リアルなところでいえばAlphaGoでおなじみの囲碁などの学習だって可能です。
以上のような用途から、プロダクトを想像してもおもしろいですね。つまり、既存のアイディアにさらなる機能を追加し、自動化したり便利にしたりといった用途で、幅広い応用がききます。これはディープラーニング含むニューラルネットワークのフレームワークに共通して言えることですが、あらためてその可能性を感じてみていただきたいところです。
おそらく、世の中に出回っている「人工知能搭載」は幅広く、実際に人工知能と言える機能が搭載されているものはまだまだ少ないと思いますが、こうしたシンプルなフレームワークが普及していくことで、人工知能はより一般化していくことでしょう。
たとえば、Wordpressユーザーの増加のような現象で、シンプルに応用できるオープンソースフレームワークが普及することで、日常の中に溶け込んでいくといったイメージです。
darknetがそうなるかは別として、これからも様々なフレームワークが出てくることが予想できます。あるいはディープラーニングを超えるアルゴリズムがポっと出てくることだってありえます。
とは言え、まずはすべてのフレームワークを軽く触ってみるというフットワークの軽さがエンジニアには求められるのかもしれません。新しい技術だからこそネットの情報に惑わされず、アルゴリズムを理解した上で活用していくことがより正確なフレームワーク選択の判断となりそうです。
今日は密かに注目されている「darknet」をご紹介しました。