【技術者ブログ】機械学習のライブラリ、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

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

■最後に

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

技術者ブログ(4)-WEBサイトとBootstrap

技術者ブログと題して社員が日ごろ取り組んでいる学習内容を紹介します。
第4回はレスポンシブデザインをテーマにしている第0ユニットです。

レスポンシブデザインとはWEBサイトの構築手法です。
レスポンシブデザインの説明の前に、まずはWEBサイトの仕組みについて簡単に説明します。

皆さんが良く見るWEBサイトですが、主に2種類の言語で作成されています。
1つ目は「HTML」です。
HTMLとはWEBサイトの土台となるファイルを作成する言語で、表示したい文章や画像などを書いていきます。

例として、Internet ExplorerやGoogle Chromeなどのブラウザで見た場合以下のように表示されるWEBサイトがあります。

このページを表示するために、下の画像のようなHTMLを書く必要があります。

2つめは「CSS」です。
CSSとは見た目などの装飾をするための言語で、文字色や背景色、大きさなどの指定を書いていきます。

例として、HTMLで紹介したタンポポのWEBサイトに文字色やフォントのサイズを大きくする装飾をつけると以下のようになります。

これを実現するためには、以下の<style>から</style>まで書かれている内容をHTMLに追加する必要があります。

HTMLとCSSを使用して作成したファイルを皆さんがインターネットで見るためには、WEBサーバー上にアップロードする必要があります。
この辺りは、割愛させていただきます。

さて、最近ではWEBサイトをパソコンで見る人やスマートフォン・タブレットで見る人など手段が多様化してきています。
Webサイトを見た時にPCだと綺麗だったのにスマートフォンやタブレットで見たらイマイチ…
そんなことはありませんか?
そこで私たちがテーマにしているレスポンシブデザインの登場です。

レスポンシブデザインとは…
閲覧者の画面サイズまたはブラウザに応じてデスクトップWebページが閲覧できることを目指したWebデザインの手法です。

引用 Wikipedia

弊社のWEBサイトもレスポンシブデザイン対応をしております。

パソコンで見た場合
スマートフォンで見た場合

PCで見たとき背景にあった画像が、スマートフォンで見たときは見出しの上に来ていたり、地図がPCで見たときは長方形だったのがスマートフォンで見たときは正方形になっていたりしています。
このようにバラバラのサイズで見ても、キレイに見ることができる手法がレスポンシブデザインです。

第0ユニットではBootstrapを使ってレスポンシブデザインを実現しています。

Bootstrapとは…
BootstrapはウェブサイトやWebアプリケーションを作成するフロントエンドWebアプリケーションフレームワークである。
タイポグラフィ、フォーム、ボタン、ナビゲーション、その他構成要素やJavaScript用拡張などが、HTMLおよびCSSベースのデザインテンプレートとして用意されている。

引用 Wikipedia

BootstrapにはすでにCSSが用意されているため、HTMLと簡単な設定でWEBサイトがパソコンでもスマートフォンでも綺麗に見ることができます。

次回の第0ユニット技術者ブログではBootstrapの導入について紹介したいと思います。

技術者ブログ(3) – AWS のご紹介(Amazon Web Services)

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

今回のテーマ
『 AWS について』

AWSとは、 Amazon Web Servicesの略称で、Amazon.comから提供されているクラウドコンピューティングサービスです。クラウドの分野では世界1位のシェアを誇ります。


Amazon 社内のビジネス課題を解決するために生まれた IT インフラストラクチャのノウハウをもとに、2006 年、アマゾン ウェブ サービス(AWS)はウェブサービスという形態で、企業を対象に IT インフラストラクチャサービスの提供を開始しました。

引用
https://aws.amazon.com/jp/about-aws/

AWSでできること

AWSでは、インターネット経由でコンソール画面にアクセスすることで様々な機能を利用することができます。

AWSコンソール画面(サービス一覧)

代表的な機能を以下に挙げます。

  • Elastic Compute Cloud(EC2):AWSが提供する仮想サーバ です。
    LinuxやWindows 等様々なOSの仮想サーバ実行環境を利用することができます。
  • Simple Storage Service (S3):インターネット経由で利用できるストレージサービスです。高い堅牢性を実現しています。
  • Relational Database Service(RDS):リレーショナルデータベース構築サービスです。Oracle、MySQL、PostgreSQL等のデータベースを利用することができます。

AWSの料金について

AWSはサービス利用に応じて料金がかかる従量課金制となっています。
例えば、EC2では使用するインスタンス(仮想サーバ環境)とインスタンスの起動時間により料金が決まります。時間課金(オンデマンド)の他に、リザーブドという長期契約割引といったオプションもあります。
また、AWSでは「簡易見積ツール」を利用することで、月額金額を見積もることができます。

今後は、AWSの様々な機能について掘り下げてご紹介していきたいと思います。

技術者ブログ(2) – ローコード開発のご紹介(Oracle APEX)

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

今回のテーマ
『ローコード開発について』

そもそも、ローコード開発とは、その名の通りLow-Code、つまり手作業によるコーディングを最小限に抑えた開発のことです。
そういった意味では、フルスクラッチのコーディングから、フレームワークを採用しコーディングを省略することも、一種のローコード開発と言えるのかもしれませんね。

ですが、ここで言うローコード開発とは、そこから更に一歩踏み込み、ほぼコーディングが不要となる開発を指します。
たとえば、いくつかのローコード開発プラットフォームでは、GUIベースの開発ツールを用いることにより、部品を配置するだけで画面およびそこから呼び出されるロジックを自動生成してくれるため、一部のプロパティ設定を除いてコーディングがほぼ不要となります。

弊社では、このローコード開発プラットフォームとして
Oracle Application Express(APEX)を使用しています。

Oracle Application Express (APEX)は、最高レベルの機能を備え、どこにでもデプロイできる洗練されたスケーラブルでセキュアなエンタープライズ・アプリケーションを構築できる
ロー・コード開発プラットフォームです。

引用
https://apex.oracle.com/ja/

本製品の特徴として、Oracle Detabaseで完全にサポートされる無償機能であることが挙げられます。
つまり、Oracle APEXをダウンロードし、既存のOracle Databaseにインストールすることで、特に複雑な設定をすることなく利用できます。

また、Oracle APEXにはWeb上で最新バージョンを試用できる無償サービスも用意されており、実際の動作感を確かめることもできるようになっています。

Oracle APEX(無償サービス版)の管理画面。
クラウド上に配置されたOracle Databaseとの間でデータを読み書きするようなWebアプリケーションをGUIベースで作成することができる。

上記無償環境では、予め用意されているテンプレートを利用することで、Webアプリケーションの高速開発を実現しています。
また、デザインや機能のカスタマイズについても、GUIベースの開発ツールから必要な部品をドラッグ&ドロップすることで、開発経験が浅いプログラマでも複雑なコードを書くことなく直感的に開発できるようになっています。


Oracle APEX(無償サービス版)の開発画面。
リージョンと呼ばれる領域にフォーム部品などのアイテムを配置し、プロパティを設定するだけで、画面およびロジックを自動的に生成してくれる。

この他にも、いくつかのプラットフォームにてローコード開発を行っていますので、今後も紹介していきたいと思います。

技術者ブログ(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のインストールなどの環境構築のほうが苦戦したかもしれません。
みなさんも興味があれば挑戦してみてください。

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