数値解析系

2017年7月23日 (日)

Intelがディープラーニングに特化したUSBデバイスを発売

ディープラーニングといえば、学習も認識も高速演算が必要なためGPUなどがもてはやされておりますが。

IntelがCPU、GPUに次ぐ第3の選択肢といえるデバイスを発表しました。

Intelが激安1万円以下のUSB型ディープラーニング用端末「Movidius Neural Compute Stick」を発売 - GIGAZINE

このデバイス、どう見ても大きめのUSBメモリといった感じ。これが、かなり強力な”ディープラーニング用デバイス”なんだそうです。

クラウド前提ではなく、あくまでもエッジコンピューティングとして使うデバイスで、実際このチップを搭載したドローンなどがあるようです。

上の動画ではRaspberry Piっぽい小型コンピュータボードに接続している場面が見られますが、もしかしてRaspberry Pi自体の画像認識速度とかを上げられるんでしょうかね?

搭載されている”Myriad 2 Vision Processing Unit”というチップの演算速度は100GFLOPSとあります。演算桁数などが同じ条件ではないでしょうから直接比較にはなりませんが、Corei7 7700Kが大体200GFLOPSといわれてるので、結構な演算能力です。

使われているフレームワークはCaffe。TensorFlowではないんですね。まあ、老舗なフレームワークですし、妥当なところかも。

お値段はなんと79ドル。用途を考えるとかなり激安。

ちなみに複数個を接続して性能を上げることも可能だそうです。

認識だけでなく、訓練にも使えるでしょうかね?ハワイで22日から開かれる開発者会議CVPR2017で先行発売されてるそうです。

こういうのを見ちゃうと一つほしくなっちゃいますねぇ・・・一般向けはいつ発売されるんでしょう?気になります。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

2017年7月11日 (火)

AMD Radeonの実力は!?

最近アキバなどの電気街で、AMDのRadeon RX580/570あたりが売り切れ続出、その余波でGeForce GTX1060まで売り切れるという事態になっているようです。

数枚挿しじゃないと動かないゲームが出たわけでもなく、まさか急にディープラーニングが流行ったわけではなし、何故こんなに急にグラボが大人気になるのか?と思ったら、要するに”マイニング”需要だそうです。

マイニングで人気のRadeon RX 580に防塵ファン搭載のOCモデル、ASUS製 - AKIBA PC Hotline!

とくにRadeon RX580はコスパ最強なようで、百枚単位で購入されてるという話も。

ディープラーニングではNVIDIA製GPUがほぼ一強ですが、マイニングではいったいどれくらいすごいんでしょうか?Radeon。

そのRadeonの実力を垣間見る記事を発見。

仮想通貨 のマイニングにはRadeonがオススメ? GeForce GTX 1070とRadeon R9 390Xを比べてみた | しょぼんブログ

NVIDIA最新コアのGeForce GTX1070と、実質4世代前となるRadeon R9 390Xとを比較してますが、この両者、Bytecoinという仮想通貨のマイニングに関してはほぼ同性能だそうで。

ということは、最新版のRadeonだったらもっとすごいってことに。

RX 580は3万円台半ばらしいので、確かに安いですよね。GeForceならGTX 1060とほぼ同じ価格。

てことはこれを使ってディープラーニングをすれば・・・などと思うところですが、残念ながらいろんなディープラーニング用プラットフォームがRadeon対応したという話は聞きませんね。得手不得手があるようです。

それにしても、世の中ディープラーニングが大流行りですが、さすがに秋葉原のボード買い占めにつながるほどのブームとはいかず。なんだかちょっぴり、寂しいというか、なんというか。

HIS AMD RADEON RX580搭載ビデオカード HS-580R8LCBR オーバークロックモデル

2017年7月10日 (月)

Interface 2017年8月号は”ディープラーニング特集”

今月号の”Interface”は、みんな大好き(?)ディープラーニングに関する特集記事で満載です。

Img_1589

思わず本屋で見かけるや否や速攻で買いましたが、この雑誌は毎月25日発売。もうちょっと早く気づくべきでしたね。

Img_1604

Img_1590

目次だけでも気になる記事が満載です。

詳しくは雑誌を買っていただくとして、個人的に今月号のInterfaceの注目すべき内容は

・”ディープラーニング”の基礎

・ 画像認識以外の使い方

・ ”Chainer”の導入・使い方

の3点です。

”ディープラーニング”の基礎

Img_1591

まずディープラーニングに関する解説について。

実際の活用事例を紹介したこんなページから

Img_1598

「算数」でわかる簡単なディープラーニングの解説記事が載ってます。

Img_1599

もっとも「これが算数かよ!!」って突っ込みどころ満載な内容ですが、かなりわかりやすく書かれているのは間違いありません。

”ディープラーニング”最大の問題は、中身を理解するためのいい解説書籍・記事が少ないこと、いったい何ができるのかがわかりにくいこと、じゃないでしょうか。

このInterfaceは、その問題に十分こたえてくれる内容かと。

画像認識以外の使い方

Img_1595

ディープラーニングといえば、画像認識が最もメジャーな活用法。私もまさにこれに取り組んでいる真っ最中。

今月号のInterfaceでも、画像認識に関するコードが載せられてます。

なんと「きのこ」「たけのこ」を判別するという、あの紛争をさらに炎上することになりそうな内容。恐ろしい子・・・

そろそろ他のデータ処理方法も知りたいところと思っていたところですが

Img_1594

このInterfaceでは、音声データを教師データにする事例や

Img_1602

言語処理に関する記事まで出ております。もちろん、コード付きで。

いずれ画像以外の処理でも活用したいと思っていたので、これは役立ちますね。

”Chainer”の導入・使い方

Img_1596

今月号のInterfaceは”Chainer”を勧めてます。

日本発のこのディープラーニング用プラットフォーム、確かに日本国内では活用事例が豊富です。

ただ、Windows PCで使うにはインストール方法が煩雑そうでなかなか手が出せなかったんですが。

Img_1597

Windowsへのインストール方法も載ってますね、この記事。VirtualBoxを使うようです。

これからのAI技術として脚光を浴びているディープラーニングについてもっと勉強したい方や、会社で上司から「AIで何か作れ!」などと理不尽な要求をされているシステムエンジニアな方にはお勧めです。25日までしか売ってないので、早めの購入をお勧めします。

それにしても、Interfaceのディープラーニング系の記事はだんだんとレベル上がってきてますね。この分野に明るい編集者がいるんでしょうか?一方で日○Linux等は最近あまり進んでない様子。個人的にはInterfaceに注目してます。

Interface(インターフェース) 2017年 08 月号

2017年7月 9日 (日)

ディープラーニングで一般物体検出する手法”YOLO”のTensorFlow版で独自データセットを使えるようにしてみた

はじめに

”人工知能””AI”という言葉とともに聞かない日はないくらいに急速に広がりつつある”ディープラーニング”

ネット上には特に画像認識を中心にいろんなコードがあふれており、これらを活用したいと考えている人も多いかと思います。

が、やはりというか、巷のディープラーニング用コードを転用して業務や趣味で独自データセットを使いたいと思っている人にとってはまだまだ敷居が高いのが現状。

このほど、一般物体検出の手法の一つである”YOLO v1”を使ったコードを改良し、64ビット Windows版Anaconda 4.2.0 + TensorFlow 1.2 + OpenCV環境にて独自データセットを使えるようにしたので、ここで手順を紹介いたします。

コードはたくさん出てるんですが、この”独自データセット”を作成して実際にディープラーニングを実行するところまでをきちんと書いたものがほとんど見当たらないんですよね。

私自身かなり苦労したので、ここではなるべくちゃんと書きます。

まず、元コードは以下のものを使用してます。

https://github.com/hizhangp/yolo_tensorflow

”YOLO v1”という手法は2015年12月時点の技術ですが、対象オブジェクトがめちゃくちゃたくさん出てくる画像でなければ使える手法。

このコード自身は36層のニューラルネットワークからなる、わりと本格的なCNNコードです。

このままでもyolo_small.ckptを使った「test.py」での画像認識や、PASCAL VOC2007のデータを使ったディープラーニングは可能ですが、独自データセットを使おうとするとエラーが出て使用不能でした。

また、Python 2.7用に書かれているようで、Python 3.xでそのまま使うことができません。

なので、Python 3.5で使える、独自データセットが使えるようにすることを目的に元コードの修正を行い、かつ独自データセット作成ツールと作り方を紹介します。

準備

ここではWindowsでの動作を前提に書いてます。が、Linux版でも概ね同じかと思われます。

Windows版のAnaconda 4.2.0入れて、TensorFlowをインストールする手順は「TensorFlow(+Keras)がWindowsで簡単にインストールできた件 - Qiita」を参照ください。

OpenCVも使いますので「Windows Anaconda Python 3.5 への OpenCV 3.1 のインストール - にせねこメモ」を参考にOpenCVも入れておいてください。

さて、先の元コード(https://github.com/hizhangp/yolo_tensorflow)をダウンロード。Windowsなら「Clone or Download」をクリックして「Download Zip」というのをクリックすればZIPファイルが入手できます。Linuxの方なら「git clone ~」で入手可能でしょうか。

適当なフォルダに展開後、以下の3つのコードを修正しました。

util/pascal_voc.py

test.py

train.py

3つのコード名を右クリックして”名前を付けてリンク先を保存”としてもらうと、コードが入手できます。

これらのコードを、元コードと入れ替えておいてください。

さて、機械学習に必要な画像のデータセットを作る必要があります。

Linuxな方なら「物体検出用の画像アノテーション正解データ生成に便利なツール - verilog書く人」からツールをダウンロードすればいいんですが、Windows用というのはありませんでした・・・

てことでWindows版アノテーション用ツールをVisual Basic 2005で作ってみました。

AnnotationTool.exe

これをダウンロードしておいてください。使い方は後述。

画像データセットの作成

さて、ディープラーニング用教師データ作成編です。

例えば犬・猫を識別させたいときは大量の犬・猫の画像、社員とそれ以外の人を区別するAIを作りたいときはたくさんの社員の顔写真などが必要となります。

こればかりは自身でそろえていただくほかはありません。

やみくもにそろえろというのはなんですから、参考資料を載せておきます。

こちらの資料は、ディープラーニング向け教師データ作成に大変参考になります。ぜひご覧ください。

ここでは深層学習用画像ファイルを用意できているという前提で進めます。

さて、画像ファイルをそろえただけではディープラーニングさせることはできません。

画像内にある認識させたい物体の位置そのラベル名が必要です。

この位置とラベル名を記述したファイルが「アノテーションファイル」と呼ばれるものです。

ちなみにこのコードで使うデータセットの形式は「PASCAL VOC 2007形式」ってのを使ってます。ディープラーニング用コードでは一般的な形式のようです。

この形式のアノテーションをWindows上で作成するためのツールが、先の「AnnotationTool.exe」です。

Annotation00

上にこのツールの外観と手順の番号をざっくり載せました。

使い方を①~⑦の順に書きます。

① まずアノテーションファイル(*.xmlと”trainval.txt”)を保存するフォルダ(作業フォルダ)を作りドラッグ&ドロップ

② アノテーションを作成したい画像ファイルをドラッグ&ドロップ

③ 画像ファイルが出てくるので、物体をマウスで囲みます

④ ”ラベル名”のテキストボックスに物体の名前を書きます(半角英数) 

⑤ ”ラベル作成”をクリックすると登録

同一画像内で認識させたい物体の数だけ③~⑤を繰り返します。

⑥ 一通り終わったら「Annotation追加」をクリック

次の画像ファイルを読み込むため、再び②で別の画像を読み込み、⑥までを繰り返します。

すべての画像ファイルのアノテーション登録が終わったら

⑦ ”終了”をクリック

これで作業完了。

できたデータセットを以下の場所に登録。

「作業フォルダ」には以下のようなファイルができているはずです。

Annotation01

ここから”*.xml”のファイルを

(yolo_tensorflowのフォルダ)\data\pascal_voc\VOCdevkit\VOC2007\Annotations

の中へ移動。

ちなみに*.xmlの中身はこんな感じ。

Annotation03

”画像ファイル名.xml”という名前で、ラベル名(<name>)と位置(<bndbox>)が物体の数だけ記載されてます。

これが画像ファイルごとに必要となります。

また、”trainval.txt”というファイルは以下の場所に移動。

(yolo_tensorflowのフォルダ)\data\pascal_voc\VOCdevkit\VOC2007\ImageSets\Main

このフォルダ内で”trainval.txt”をコピーして、”test.txt”という名前のファイルを作成します。

つまり”Main”フォルダ内には”trainval.txt”、”test.txt”の2つのファイル(中身は同じ)が存在した状態にしておきます。

なぜかこうしないと動かないことがあるんですよね・・・プログラム上は”trainval.txt”だけでいいはずなんですが。

で、教師データとなる画像ファイルは以下のフォルダに入れておきます。

(yolo_tensorflowのフォルダ)\data\pascal_voc\VOCdevkit\VOC2007\JPEGImages

これでデータセットは準備完了。

設定

続いて”yolo”フォルダにある”config.py”の中身を記載します。

項目はたくさんありますが、書き換える必要のある項目は以下の

CLASSES

この後ろに、アノテーションファイル作成時に登録したラベル名をすべて書き込みます。

BATCH_SIZE

デフォルト値は”45”。そのままでもいいですが、ラベル当たりの画像ファイルが45枚より少ない場合は20などとしておいた方がよさそう。

MAX_ITER

最大サイクル数です。

いきなり”10000”でもいいですが、最初は10~100程度にして様子見するのがよさそう。

SUMMARY_ITER

学習での誤差(losses)のTensorBoard用データの書き込みタイミングです。10~100程度でもいいですが、MAX_ITERを100程度に刻む場合なら1~10としておいた方がいいでしょう。

SAVE_ITER

学習データ(save.ckpt-***という名前で保存)を書きだすサイクル数です。MAX_ITERの5~10分の一くらいにしておいた方がよさそうです。

ディープラーニング実行

いよいよディープラーニング実行です。

実行前に確認ですが、新たなデータを使って深層学習するときには、”(yolo_tensorflowのフォルダ)\data\pascal_voc\cache\”にファイルが入ってたら消してください。何もなければOKです。

以下のコマンドを実行します。

> python train.py

ところで、うちでは以前「GeForce GTX 1050Ti買ってディープラーニングを加速してみた: EeePCの軌跡」でも書いた通り、ディープラーニング用にGeForce GTX1050Tiを導入してます。

ところがこのコードをGeForce GTX1050TiのGPUで実行すると、1050Tiのメモリ(4GB)では全く足りなくて落ちてしまいます

GTX1080の8GBくらいは必要っぽい、できればGTX1080Tiの11GBくらいないと実行できないも・・・というくらいメモリ馬鹿食いコードです。

仕方がないので、うちではCPUオンリーで実行しました。

CPUのみで実行したい場合は、以下のようなコマンドを打ち込みます。

> python train.py --gpu None

これでCPUのみで動作。

もっとも、GPUの恩恵がなくなるので恐ろしく遅いですが。

また、以前に機械学習を実行して学習データ(save.ckpt-***)がある場合、これを初期値にして続きから機械学習を実行することができます。

その場合は、

(yolo_tensorflowのフォルダ)\data\pascal_voc\output\(実行日時のフォルダ)”にある学習データ(”save.ckpt-***.data-0000-of-0001”と”save.ckpt-***.index”の2つ)を

(yolo_tensorflowのフォルダ)\data\pascal_voc\weights\”に入れて

以下のコマンドを実行します。

> python train.py --weights save.ckpt-*** --gpu None

これで続きから実行できます。

実行中の画面は以下。

Yolo_windows02

実は、まだ最後までディープラーニングを流したことがありません。

このためどうやって終了したかをまだ確認したことがないのであれですけど。

この一覧で出てくる”Loss:”の値が小さくなっているならまだ過渡状態

十分小さくなって、頭打ちになってくれば学習終了状態じゃないかと思われます。

おそらく5000~10000サイクル流さないと収束しないと思われますが、うちの環境でCPUオンリーで実行すると5000~10000分かかることがわかってます。

仮に5000サイクルで終わるとしても、5000分っていうのは・・・要するに3.5日ってことです。

さすがにPCを4日間つけっぱなしで全開運転というのはちょっとできませんねぇ・・・

GTX1080Tiが欲しいと思う、今日この頃です。

一般物体検出・認識コードの実行

さてディープラーニングが終わったという前提で、画像認識の実行に移ります。

機械学習が終わってなくても”yolo_small.ckpt”という学習済みデータを入手すれば、この後の画像認識を実行できます(その場合は設定ファイル”config.py”を、元データの”config.py”に戻しておいてください)。

yolo_small.ckpt ダウンロード元:YOLO_small.ckpt - Google ドライブ

まず学習済みデータを

”(yolo_tensorflowのフォルダ)\data\weights\

に入れます。

また認識に使う画像ファイルを

”(yolo_tensorflowのフォルダ)\test\

に入れておきます。

続いて、以下のコマンドを実行。

> python test.py --weights save.ckpt-***

(--weights の後ろは学習済みデータのファイル名)

すると

Yolo_windows01

こんな感じの画像が出てきます。

(上の画像は、レゴランドの家族写真を”yolo_small.ckpt”で検出・認識させたもの)

うまく対象物をとらえていれば、枠とラベル、認識率の数値が表示されるはずです。

これで独自データを使った一般物体検出コード”YOLO_TensorFlow”の使い方の説明は終わりです。

教師データとなる画像データをそろえて、ディープラーニングして、実際にテストして・・・を繰り返し、必要な認識精度になるまで繰り返す。

あとは「test.py」をベースにコードを改良し、させたい”動作”をこのコードにつけ加えていくだけです。

しかし、その前にやはり”ハードウェアの強化”は必須ですね。

さすがにディープラーニングの実行に何日もかかるようでは、学習データの調整のための試行錯誤なんてできませんし。

これくらいの深層学習実行にはやはりGPUボードは必須、できればGTX1080Tiの2枚挿しくらいが必要ですね。

玄人志向 ビデオカード GEFORCE GTX 1080Ti搭載 GF-GTX1080Ti-E11GB/OC/DF

2017年6月23日 (金)

AMDのZenコアを使ったサーバー版CPU”EPYC 7000”は32コアで22コアXeonの47%増し!?

ついに出ちまいましたね、AMD Ryzenのサーバー版。”EPYC”(エピック)と呼ばれるようです。

Intelの22コアXeonを47%も上回る高性能32コアモデル&16コアで7万円強からという激安モデルなどサーバー向け「EPYC 7000」シリーズをAMDが正式に発表 - GIGAZINE

発表されたEPYCの概要ですが、最上位である”EPYC 7601”は32コア/64スレッドで、Xeonの現状の最上位版である”Xeon 2699A V4”(22コア/44スレッド)に対し47%も高速(整数演算)とのこと。浮動小数点なら75%高速という、ちょっと信じがたい速度。

なお、最上位のEPYC 7601の価格が4000ドル(約45万円)。Xeon 2699A V4が4115ドルといわれているので、ほぼ同額でこの性能。最も安い16コアのEPYC 7281に至っては650ドルとほぼコンシューマ向け並みです。

AMDが久々の反撃に出ましたね。しばらくはIntelは苦しい戦いを強いらせそうです。PC向けでもこんな話が出ているくらいですし。

これでHPCの価格が下がってくれると、設備担当の私としてはありがたい限りですね。最近はIntelのCPUは高値安定が続いていたため、サーバー/ワークステーションの価格が高くていろいろと苦労してるんです・・・どうせなら、業務でもAMD製のを導入してみたいですね。Intelコンパイラの効果が出ないなどの不利さはあるものの、どんなものなんでしょうね?気にはなります。

ASRock AMD X370チップセット搭載 ATXマザーボード X370 Gaming K4

2017年5月25日 (木)

エヌビディアは”nVIDIA”ではなく”NVIDIA”

どこかの新聞で”謎の企業”とされていたエヌビディアの正式名称は”NVIDIA”だそうです。

「nVIDIA」でなく「NVIDIA」―「アスース」でなく「エイスース」、謎の企業名が話題に [インターネットコム]

読みが”エヌビディア”というのは知ってましたけど、私はずーっと”nVIDIA”だと思ってました。そういうロゴをよく見かけますし。でもごらんのとおり、公式には”NVIDIA”だそうです。

なお、上の写真はカップケーキらしいですが・・・どう見ても”nVIDIA”って書いてありますよね。なんでこういうロゴなんでしょう?

上のリンク先ではASUSも引き合いに出されています。確かに昔は読みが謎企業でしたよね。

私もEeePCが出る前までは”エーサス”、EeePCが出たあたりには”アスース”(確か”公式”がこう読めと当時は言ってたような)、そして今では”エイスース”。

読みやロゴは”謎企業”ですが、どちらもそれぞれグラフィック、PC分野では超有名企業。どこかの新聞のエヌビディアの”謎企業”呼ばわりにはちょっと違和感を覚えます。

もっとも、PC界隈では有名でも一般的にはあまり知られていないかもしれませんが。

そんなエヌビディアですが、ついにトヨタ自動車も提携を結ぶことになりましたね。

ほぼディープラーニング分野では一強状態なエヌビディア。今後もこの強さを保つのか、はたまたIntelに対するAMDのような存在が現れるのか・・・個人的には、技術の発展のため後者のような状況を期待したいですね。

玄人志向 ビデオカードGEFORCE GTX 1050Ti搭載 GF-GTX1050Ti-4GB/OC/SF

2017年5月15日 (月)

HPC 夏・秋キャンペーンちらし!今回のキーワードはやはり”ディープラーニング”

年に3回ほどのSCSKキャンペーンちらし。夏を前にやってまいりました。

Scsk170503

今年のトレンドはやはり”ディープラーニング”。NVIDIA製GPU搭載のHPCが紹介されてます。

そして、隠れキーワードとして”AMD”も登場。

Scsk170501

とはいえ、まだワークステーション/HPC向けのAMD CPU”Naples”は発表前。同時期に発表予定のIntelの次世代コア”Skylake”と合わせて後日情報を送ってくれるとのことです。

AMDの新コアにIntelがどういう攻勢をかけてくるかが楽しみですよね。システム提案側としては、なによりも安くなってほしい・・・

Scsk170504

まずはワークステーションから。

最大22コア×2=44コア88スレッド、メモリは最大1TBまで搭載可能なHPのZ840というワークステーション。

64GBでこのお値段です。

その下に書かれてますが、Windows 7へのダウングレードが今年の10月で終了。それ以降は7をインストールすることが不可能になるそうで。

実はCAE界隈ではまだWindows 10がだめなところがあって、未だにWindows 7へのダウングレードが必要な環境が多いんです。てことで、今年の10月までにソフトウェアベンダーさんは10に対応しなきゃいけないはずですけど、間に合うんでしょうかね・・・

Scsk170502

さてこちらが最近力を入れているディープラーニング用マシン。

Tesla P100 16GB(GPUコア数3584)を一基搭載。これでお値段約300万円。

スターターキットといいますけど、結構な計算能力。

Scsk170505

これにNVIDIA CUDA Toolkit、cuDNNをプリインストールし、TensorFlowをつけてこのお値段だそうです。

Scsk170506

GPUボードはこの3年で60倍もの高速化。まだまだ伸びしろがあるようです。

NVIDIAもうまくこのディープラーニングブームに乗れたものです。果たしてIntelなど他社の入り込む余地はあるんでしょうか?

昨年まではCPUのコア数くらいしか見るべきところがありませんでしたが、今年はAMDのRyzenのHPC版とGPUが盛り上げてくれてます。再び科学技術計算の世界があわただしくなりそうですね。

玄人志向 ビデオカードGEFORCE GTX 1050Ti搭載 GF-GTX1050Ti-4GB/OC/SF

2017年5月 8日 (月)

誰でも人工知能なガジェットが作れる!?GoogleからAIのDIYを支援する”AIY Projects”始動!

第1弾はRaspberry Pi 3用のボイスキット”Voice Hardware Accessory Top”をリリースだそうです。

Google、誰でも人工知能プロダクトを制作できる「DIY AI」を目指すプロジェクト「AIY Project」を発表。第一弾はボイスキット | Seamless

公式サイト:AIY Projects

Googleが発表したこの”AIY Projects”とは、自身の問題解決にAIを使いたい人を支援し、だれでもAIプロダクトを作れるようにするプロジェクト。DIYとAIをひっかけて”AIY”のようです。

で、第1弾のこのボイスキット、マイク、スピーカー、ボタン・スイッチ類が付いたRaspberry Pi用HATに段ボール製のケースを組み合わせたキット。そして、これらを使うための専用のOSイメージをダウンロードして使います(専用イメージはこちら)。

製作手順・動作テスト方法はここ(Voice Kit | AIY Prjects)にあります。はんだごても不要で、1時間半くらいで作れるとか。楽ですね。

”誰でも”と謳われてますが、まず上のドキュメントが読める最低限の英語力、そして多少のLinux・プログラミング知識は必要かと思われます。

ところで、これってどうやって入手するんでしょうか?

下記記事を見る限り、Raspberry Piの公式雑誌「MagPi」の最新号を入手すると付録についてくるそうです。

このGoogle HomeのDIYキットはRaspberry Piとボール紙でできた魔法のボックス | TechCrunch Japan

Raspberry Pi 3は別途必要。

上の動画ではいきなり会話してますが、どうやらGoogle Assistant SDKやGoogle Cloud Speech APIあたりを使ってるようです。

人工知能ってやつを使って何かをさせたいという願望がある方なら、要注目です、AIY Projects。第2、第3弾は何が出てくるんでしょうか?ちょっと楽しみです。

Raspberry Pi 3 MODEL B

2017年4月15日 (土)

OpenCVでLBP特徴を使った”物体検出器”を作成してみた

TensorFlowによる”物体認識”と、ネット上に存在するアニメ顔検出器を組み合わせて「けものフレンズの動画からフレンズさんの顔を検出するやつ」を作ってみましたが。

自分の認識させたいものを検出するためには、この”物体検出器”ってやつを自作できないといけません。

てことで、物体検出器を作ってみることにしました。

参考にしたのはこちらのサイト。

OpenCVで物体検出器を作成する① ~基礎知識~ - 技術者ブログ

ここの⑤、⑥にある手順を参考にすれば完成・・・するはずですが、こちらに載ってるやり方そのままでは動かなかったので、ちょっと工夫してます。

なお、前提は

・たくさんの正解画像から検出器を作成(上のリンクは正解画像1枚で作成)

・LBP特徴を用いた検出器を作成

OpenCVだけでHaar-Like特徴、LBP特徴、HOG特徴を用いた検出器を作成できますが、Haar-Like特徴というのは検出率がいまいちらしい(と思ってるだけ?)という印象があるのと、HOG特徴を用いた検出器はそのままでは使えない模様なので、消去法でLBP特徴になりました。

■ 前準備

まず、検出器を作成する作業フォルダを作ります(英数字でスペースを入れてないフォルダ名)。

そのフォルダ内に”cascade”、”pos”、”neg”、”vec”の4つのフォルダを作成。

さらに”cascade”フォルダ内に”ooo”というフォルダを作っておきます。

不要かもしれませんが、以下のOpenCVの検出器作成に必要な実行ファイルを作業フォルダに入れておきます(私の場合はOpenCV 3)。

・ opencv_calib3d310.dll

・ opencv_core310.dll

・ opencv_createsamples.exe

・ opencv_features2d310.dll

・ opencv_flann310.dll

・ opencv_highgui310.dll

・ opencv_imgproc310.dll

・ opencv_ml310.dll

・ opencv_objdetect310.dll

・ opencv_traincascade.exe

私と同様、Anaconda for WindowsにTensorFlowをインストールしている環境なら、これらのファイルは「(Anaconda3インストールフォルダ)\envs\tensorenv\Library\bin」か「(Anaconda3インストールフォルダ)\Library\bin」のどちらかに入ってるはずです。

”pos”フォルダには正解画像を、”neg”フォルダには不正解の画像(正解でなければなんでもOK)を入れておきます。

参考までに、私は”pos”にけもフレ顔画像を1970枚、”neg”に全く違う画像(城やらクラウンやらの画像)を487枚入れました。

■ 正解画像のベクトル作成(opencv_createsamples.exe)

まず、正解画像を入れた”pos”フォルダ内のファイル一覧を作成します。

コマンドプロンプトを開き、”pos”フォルダに移動後、以下のコマンドを実行。

$ dir *.jpg /b /a-d /s > poslist.txt

これでファイル一覧ができます・・・が、そのままでは使えません。

このとき作成される”poslist.txt”は

C:\(作業フォルダ)\pos\358.jpg
C:\(作業フォルダ)\pos\359.jpg
C:\(作業フォルダ)\pos\360.jpg
C:\(作業フォルダ)\pos\361.jpg


みたいになってますが、各ファイル名の後ろに

C:\(作業フォルダ)\pos\358.jpg 1 0 0 64 64
C:\(作業フォルダ)\pos\359.jpg 1 0 0 64 64
C:\(作業フォルダ)\pos\360.jpg 1 0 0 64 64
C:\(作業フォルダ)\pos\361.jpg 1 0 0 64 64


てな感じの数字を入れる必要があります(スペース区切り)。

一つ目の1は不明、2、3つ目の”0 0”は多分画像切り出しの始点座標、”64 64”は終点座標の模様。

私の使った画像はすべて64×64で切り出し不要だったので、上のような表記になります。

ばらばらのサイズの画像だったり、入れた画像の中に認識させたい部分以外が入ってる場合は・・・下記のサイトにあるGUIツールなどを使うしかなさそうです。

OpenCVでの物体検出器作成 - kivantium活動日記

で、作成した”poslist.txt”を作業フォルダ直下(つまり一つ上のフォルダ)に移動し、以下のコマンドを実行します。

$ opencv_createsamples.exe -info poslist.txt -vec ./vec/ooo.vec -num 1970 -bgcolor 255

■ 検出器学習 (opencv_traincascade.exe)

いよいよ検出器の作成開始ですが、その前に不正解画像の一覧を作っておきます。

コマンドプロンプトで”neg”フォルダに移動し

$ dir *.jpg /b /a-d /s > nglist.txt

を実行。

こっちは”poslist.txt”のようにいちいち後ろに何かつけたり、一つ上のフォルダに移動しなくてOKです。

コマンドプロンプトで作業フォルダに移動し、以下のコマンドを実行します。

$ opencv_traincascade.exe -data ./cascade/ooo/ -vec ./vec/ooo.vec -bg ./neg/nglist.txt -numPos 1700 -numNeg 487 -featureType LBP

中身の詳しい説明は省きますが、”-numPos”の後ろには正解画像の数を、”-numNeg”の後ろは不正解画像の数を入れます。

が、正解画像はたしか1970枚のはずなのに”1700”なのはなぜ?

私もよくわかりませんが、ここは大体8割くらいの数字を入れておくものらしいです。

私の場合は1700くらいでようやく動いてくれました。これはケースバイケースかもしれません。

最後の”-featureType”の後ろに”LBP”と入れてます。省略するとHaar-Like特徴で学習されます。

で、学習開始ですが、私の環境で大体1時間くらいかかりました。

終わると”cascade\ooo\”のフォルダに”cascade.xml”というファイルができてます。

これが”物体検出器”本体。

あとはOpenCVによる”アニメ顔”検出の記事に載せているコードの”lbpcascade_animeface.xml”のところを”cascade.xml”に変えて動かすだけ。

----------------------------------------------------------------

さて、上の手順でけもフレ顔検出器を作りましたが、元のアニメ顔検出器に比べていいところ悪いところがそれぞれ。

・ 誤検出が増加(草むらや模様を”顔”と認識する確率が増加)

・ ハシビロコウちゃんなど従来のアニメ顔検出器では拾えなかった顔が検出可能に

画像データがもう少しあると、あるいはopencv_createsamples.exeのパラメータチューニングなどでもう少し検出率を上げることができるかもしれません。そのあたりは今後やっていこうかと。

もっとも、”けもフレ”の顔検出器を作るのが目的ではないので、これをベースに”本業”で試行錯誤していこうかと思ってます。というか、既にやってますが(会社で)。

そういえば今年初めにTensorFlowを使って”ゴキブリ”探知機を作ろうとしてみたという記事書きました。

撮影した画像を全部検索しようとしたので異様に時間がかかる仕組みになっちゃいましたが。

今ならこの「検出器」作って、高速化できますね。

なんならゴキだけでなくムカデなどの害虫をディープラーニングでより認識精度の高い害虫探知機も作れそう。

てことで、ネットで害虫の画像を集めてそういうのを作ろうかと考えたんですが。

Googleの画像検索した時点で

ヴォエ!!

となり、耐えられなくて断念。

ゴキぐらいならなんとかなりそうですが、私的は特に「ゲジゲジ」の画像検索がダメでしたね。あまり見つめると夢に出てきそう。

検出器作成には少なくとも1000枚は欲しいところ。並大抵の精神力では駄目だと悟りました。だれか害虫画像検出器、作ってくれないかなぁ・・・せめてデータセットだけでもいいので・・・

さらに進化した画像処理ライブラリの定番 OpenCV 3基本プログラミング

2017年4月 9日 (日)

今度のItaniumは最後のモデルか!?

”Itanium”といわれてなんのこっちゃかわからない人も多いかもしれません。

2000年前後に登場したIntelの次世代型64ビットCPUですが、x86と互換性がなくて、AMDが出してきたOpteronシリーズに追いやられて、結局Intelも従来のPentium 4に”EM64T”を組み合わせた64ビットCPUを出すことになり、時代の波にのまれて消えたCPU、Intel最大の大コケ・・・というのが私の認識。

私の職場でも一部サーバーとワークステーションに搭載されましたが、Windowsは動かないしLinux上でも動かせるソフトウェアが限られているしで、せっかくの性能を活かせなかった悲劇のCPUというイメージでしたね。

そんなItaniumですが、このほど最新版が出たそうです。

北川 賢一のIT業界乱反射 - 終焉に向かうItanium、コンピュータ業界にもたらしたもの:ITpro

まだ新型が出るというのにも驚きますが、この先のロードパップが全く示されていないため、これが最後じゃないかとのこと。

ついに終わりなんですねぇItaniumも・・・と感無量になるほどの思い入れもないのが悲しいところ。

ライバルのAMDからはRyzenという強力なCPUが出てきたし、そうでなくてもARM系におされ気味な昨今の情勢。

大コケしたCPUにかまっているほどの余裕はなさそうですし、Itaniumを終わらせるのは致し方ないかもしれません。

Intel CPU Broadwell-EP Xeon E5-2630v4 2.20GHz 10コア/20スレッド LGA2011-3 BX80660E52630V4 【BOX】

より以前の記事一覧

当ブログ内検索

  • カスタム検索

スポンサード リンク

ブログ村

無料ブログはココログ