【技術者ブログ】機械学習のライブラリ、TensorFlow

技術者ブログと題して社員が日ごろ取り組んでいる学習内容を紹介します。
今回は、AIをテーマにしている第1ユニットです。

今回のテーマ
『TensorFlow』について(概要)

前回の第1ユニットの技術者ブログではOpenCVを使って顔を切り出すプログラムを作りました。

ここから顔を機械に判別させるためには、切り出した画像を誰の顔なのか、機械に学習させる必要があります。
ここからやるべきことはたくさんありますが、まずは大きな流れをつかんでいただくために、今回は機械学習ライブラリの1つであるTensorFlowについて簡単に説明します。

TensorFlowとは…

機械学習モデルの開発およびトレーニングに役立つオープンソースのコア ライブラリです。ブラウザで直接実行できる Colab ノートブックを使って、すぐに作業を開始できます。

https://www.tensorflow.org/?hl=ja


TensorFlowはGoogleが開発し、公開している機械学習ライブラリです。

ニューラルネットワーク(人間の脳のしくみを基にしたアルゴリズム)
を構築、訓練することができる

少し前に 人間の対局データを使っていないことで話題になった囲碁AIの「 AlphaGo Zero」の開発でも使われています。

※詳しくは公式サイトをご覧ください。

■TensorFlowなどの機械学習ライブラリを利用する流れ

① TensorFlowを動かす環境のセットアップ
② 画像データの用意
③ 学習アルゴリズムの作成
④ ③のアルゴリズムで①の画像データを学習させてモデルデータを生成

4つができれば、モデルデータ(学習させた結果 )を生成できます。

今回は概要ということで、それぞれについて詳しいお話はまたの機会にしますが、
①②はネットで調べればたくさんの情報が出てくるので、そこまで大変ではないと思います。

上の中で1番難しいのは③学習モデルの作成です。
機械学習にはたくさんの手法があり、それぞれについて学ぶ必要があります。
自分たちで新しいものを作り出すためにはたくさんの勉強が必要でしょう。

■機械学習ライブラリはTensorFlowしかないのか?

そんなことは全くありません。
・scikit-learn
・Chainer
・Theano
・Keras

調べればたくさんの単語が見つかると思います。興味があればご自身で調べてみてください。

■最後に

以上、ざっくりとした説明をしましたが、少しでも読んでくださった皆さんが機械学習に興味を持っていただけたら幸いです。

『Hello World 』大会!

 先日、このブログで予告しておりました、「Hello World」の大会を行いました。


『Hello World』はトランプやUNOのように複数人でテーブルを囲んで遊ぶカードゲームです。大会は社員全員参加となり、大いに盛り上がりました。

参加者の中には初プレイの社員もいて少々不安もあったのですが、すぐにルールを覚えてスムーズにプレイできていたようで、一安心。ε-(´∀`*)ホッ 

大会ルール

大会は全5戦、1試合ごとに上位は加点、下位は減点の点数制で勝負し結果を競い合うルール。全5戦を行った結果の得点で順位を決定します。

5戦上位に残り続けた者もいれば、負け続けた者もおり、カードゲームの実力(?)が発揮されたのではないでしょうか。

結果は…

1位はなんと、毎試合平均2位と全試合高順位!
他を寄せ付けない安定したプレイで得点を積み上げての優勝でした。

私自身の順位は惜しくも2位で、1位には届きませんでした(T ^ T)
第2回大会があれば、次は優勝を狙いますよ!

『Hello World』(ハローワールド) とは…

弊社で現在開発中のカードゲームです。
プログラム要素をヒントに、プログラミング学習を始める前のお子様からでも学んで遊べるゲームとして開発しています。
※具体的なゲーム内容はまだナイショです。製品版をお待ちください!

ダンデライオンズでは今回のような社内でのイベントを定期的に開催予定です。
次回の内容はまだ未定ですが、開催する際はまたブログで取り上げる予定です。
ではでは!( ^_^)/

花見に行ってきました

記事を投稿するタイミングの問題で少し季節外れになってしまいましたが、弊社のメンバーの有志で4月に花見に行ってきました。

場所は鶴舞公園。
4月に入ってからということで桜が散ってしまっていないか心配していたのですが、今年は開花が遅かったのもあってちょうど満開!ライトアップされて一番いい時期でした!

屋台で飲み食いしながら写真を撮り、だれが一番いい写真を撮れるか競争!

結果、一番に選ばれたのはこの写真です!↓↓↓

…はい、花見前の待ち合わせ中の噴水の写真です。
「花見関係ないじゃん!」と思ったそこのあなた!私もそう思います。
(桜が写っている写真限定とか条件を設定すべきでした…ヤラレタ…)

弊社では、定期的に社内の有志でこんなレクリエーションを行っております。
また次のレクリエーションも記事にするつもりなので、お楽しみに!

技術者ブログ(1) – PythonとOpenCVで顔を認識する

技術者ブログと題して社員が日ごろ取り組んでいる学習内容を紹介します。
第1回は、AIをテーマにしている第1ユニットです。

今回のテーマ
『画像の中から顔を判別する』

使用する言語 – Python

機械学習向けのライブラリなど環境が充実しており情報も集めやすいです。

使ったもの – OpenCV

OpenCV(正式名称: Open Source Computer Vision Library)は、オープンソースのコンピューター・ビジョン・ライブラリです。コンピューターで画像や動画を処理するのに必要な、さまざま機能が実装されており、BSDライセンスで配布されていることから学術用途だけでなく商用目的でも利用できます。加えて、マルチプラットフォーム対応されているため、幅広い場面で利用されていることが特徴です。

引用
https://www.buildinsider.net/small/opencv/001


OpenCVには画像の特徴から判断するためのライブラリがあらかじめ用意されています。(カスケード型分類器とか言ったりするらしい)

今回はそれを利用し、用意した画像から顔を認識させ、顔の部分だけ切り出した画像を出力するプログラムを作成します。

ソースコード(抜粋)

トライ&エラーの過程は省略させていただき、実際に作った内容をざっくりと書きます。

openCVのインポート

import cv2

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込み

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込みます。
今回は顔と目検出を行いたいため、上記2つのファイルを指定します。

カスケード型分類器を使用して画像ファイルから顔部分を検出する

faces = face_cascade.detectMultiScale(img, 1.02, 5)

顔検出を行います。検出に成功した場合は画像のサイズが出力されます。

検出部分を切り出して画像保存

x,y,w,h = item['frame']
face = rotated[y:y+h, x:x+w]
face = cv2.resize(face, (IMAGE_SIZE, IMAGE_SIZE))
web_path = '%s/%s_%s.jpg' % (out_dir, fn, item['face_id'])
out_file = '%s/%s' % (base_dir, web_path)
cv2.imwrite(out_file, face)


実際にやってみた

  

この画像を指定してプログラムを実行すると…

   ↓

顔だけ認識された画像が生成されました!

  作ってみた感想

検索すると沢山の情報がでてきて、案外簡単につくることができました。
実際にソースを書く部分より、PythonやOpenCVのインストールなどの環境構築のほうが苦戦したかもしれません。
みなさんも興味があれば挑戦してみてください。

ここから切り出した画像を使い、誰の顔か判定する仕組みを作ってみたりしましたが、この先の話はまた次の機会に書きたいと思います。

5月社内コンテスト告知!

弊社で開発中のカードゲーム『Hello World』のテストプレイを兼ねて、5月某日に社内で大会を開催します。

大会は実力勝負の個人戦です。
参加者特典もあるので、社員は奮って参加してください。

社外の方には、大会終了後に、このブログにて大会の様子や結果をお届けする予定です。

Hello World ※画像は開発中のものです


『Hello World』(ハローワールド) とは…

弊社で現在開発中のカードゲームです。
プログラム要素をヒントに、プログラミング学習を始める前のお子様からでも学んで遊べるゲームとして開発しています。
※具体的なゲーム内容はまだナイショです。製品版をお待ちください!