2019年7月7日日曜日

AIとIoTの社内説明用

坂田さんに言われたので、中々短時間でAIを説明する事は難しいですが、あえて社内の状況に合わせて説明を作ってみました。

AIは以前Fuzzy(ファジー)と言っていた時があります。考え方は今と同じですが、ハードとソフトの処理能力が遅かったので閾値を超えて何かを入切りするといった制御からどちらかと言えばAもしくはBといった判断をさせていました。

さて社内でお馴染みの計測装置は温度が何度になったら入り切り、シーケンサーを使って何かの閾値を超えてある時間が経過したら動作するといった制御です。

例えばダイヤル温度計の様なアナログの入出力は特にノイズを取除く制御も必要無いです。

問題はデジタル機器はセンサーの測定やCPUの演算の際に熱等のノイズで出力にバラつきが出ます。
デジタル機器は測定のインターバル(サンプリング)が高速で(毎秒数十回以上)で上記の様にばらついてしまいます。
そこでサンプリングを例えば1秒毎にしてバラつきをとるのですが、例えば26度でONとすると25.9度と26度を行ったり来たりする時の事を考慮します。チャタリング防止。

ここまでは昭和の制御…
実際の温度自体(実際の温度)はそうなる事(25.9-26-26-25.9-25.8が数秒間隔)は稀です。現代制御はそもそも、実際の温度をセンサーからノイズを除いて極力正確に抽出します。
26度の1分後に60度になる確率は低い(0%ではない事は確か)その可能性の高い温度を予測値(期待値)として扱います。
出力値を確率的な処理をするとこうなります。(正規分布図)
実際には急峻なカーブやなだらかなカーブだったりしますが、正規分布図の頂点の値が出力結果になります。
1秒後の期待値(予測値)、1分後の期待値、1時間後の期待値…
他の要素を加味するとより正確に実際の数値に近くなります。

なぜ期待値もしくは予測値かと言うと人間お風呂を沸かして入る時に100度になっているとは思いませんね。それは湯沸かし器を理解してそうならないであろうと予測(期待はしていないと思いますが…)している訳です。人工知能も同じ様に経験(学習)から予測します。

データが実際の値に近い若しくはその値であればその数値を使った次の予測は良い結果が得られます。ちゃんと学習すればテストに合格するようなものです。

AIの値はこれらの確率に基づいた数値によって成り立っています。

現在の計測装置のセンサー出力にこの予測値がなくても問題がある訳ではありませんが、予測値があれば機器の寿命や関連機器の調子が分かったりとサービスは向上します。
詳細の説明は長くなるので…

具体的な例でスマホでのグーグルマップの自己位置推定があります。
GPSで位置を取得するのですが、建物の中はGPSの信号は届きません。次に携帯電話の基地局はWiFiステーションの位置データから現在の位置を割り出す。移動していれば携帯の中の加速度センサー、ジャイロセンサーでも補助します。
それらのデータから一番妥当な位置を表示します。

GPSのデータがノイズの影響で違う距離の位置を拾ったとしてもそれまでの位置データだセンサーデータからの移動距離を加味して導きだします。

またAI技術でわかりやすいのは迷惑メールのsort機能でしょう。
@迷惑メール.ドメインや3829isk2ji@nantoka.comは迷惑メールルールで迷惑メール.ドメインは受信しない、数字と記号のメールアドレスは受信しないとルールをつくれますが、ルールを作るとキリがないので迷惑メールのルールをサーバー側でその特徴をどんどん学習させます。未知の迷惑メールもその学習結果で回避出来ます。

株価のトレンド情報もAIとは言いませんが(AIと言う会社もありますが違うと思います。)ベイズ理論で成り立っています。どれだけ業績が良くても無制限に株価は上がりません。為替レートも日本列島が消滅しない限り$=1円や200円はありません。
保険会社の料率と配当もベイズ理論=確率論的予測値に基づいています。

でこれがみんなの給料や現在の仕事に役に立つのか?
これを確率論的な答えをすると、
①知らないで徳をする事はありません。
②より多くこれらを理解する事で損をする事はありません。

そんな事がAIやIoTになります。それを実践しています。

くどい説明はしてはいけないと何度も注意されていますが、長くなってすみません。

2019年7月1日月曜日

現在の状況

今小野さんでやっている事は実験的な試行錯誤です。

C言語を操り、ハードの構造を理解しているので一般的な1+1の様な事はしていません。
理論的にYOLO(AI画像認識)、マシンビジョン(画像の特徴を捉える)、他の処理を平行して進める。これらを組み合わせて結果をスムーズにする事。(1+1)x2見たいな事をしています。

CPUとGPUの処理がデスクトップ並でメモリが潤沢にあれば、特に難しい技術ではありません。電力も問題で何百Watts使えません。
ソフトをどれだけ効率良く組むかが問題になっています。
昭和の初期のマイコンの経験が生きています。アッセンブラーまでは扱いませんが、機械がどの様に動いているかをイメージしながらの試行錯誤です。
ここをkB節約してここに持ってきてみたいな事です。

AI画像認識はそれを判断するデータが何GB、それを処理するのでどうしても時間と電力がかかってしまいます。なのでデスクトップパソコンで1秒間に60フレームの処理をするところを今回のシステム2、3フレームが精一杯。(それでも数年前のパソコン並の処理をしています。)今の会社のパソコンとあの小さいGPUが今回の処理に関しては互角の情報を処理しています。

そこで今回の重要なポイントはそれにマシンビジョン(オブジェクトトラッカー=画像の中の特定のものを追いかける処理)を組み合わせてなおかつ処理を早くしようと試行錯誤中。これ結構最先端の技術でそれを個人でやっているのでみんなが注目しています。
小野さんによれば結構地味な作業とトライアンドエラーの繰り返しです。

話を戻して、AI画像認識がGPUの負荷が10とするとオブジェクトトラッカーは2か3で済みます。なのでまず一度画像認識の処理をしてその後オブジェクトトラッカーで追いかけて、また画像認識をしてまたオブジェクトトラッカーを繰り返しています。
初期はこんな感じ。画像認識の瞬間は画像が止まります。

それをプログラムを色々組み替えて、
処理を適正化してスムーズにしています。

今はJetson TX2(今回使う予定のnanoの上位機種でテスト中)と言うのもNanoはまだまだ未完成な部分が多く安定していないので動かない理由がハードかソフトがの切り分けが難しく無駄な時間が多く掛かる為。
それとDEEPSTEREAMと言われるライブラリーでnanoも使える様になるはず。
なぜかと言うとメモリを最適化する技術を開発しているようなので。
左から右へデータを受け渡す過程でメモリーを共用したししながら処理して行きます。

これらはハードメーカーがアドレスやメモリをどう処理するか(出来るか)なのでメーカーでないと出来ません。
これが今月中にリリースされる予定ですが、まだまだ掛かりそうな気配…

あとサーモグラフィーのアノテーションをするデータを頂いたのでそれでモデルを作るのに数ヶ月?
今回そのデータの中身は凄いもので無料で頂きましたが数百万の価値はありそうです。専門の会社で作らせたようですが、一枚幾らの世界でかなりの枚数に丁寧にメタデータ(画像の中の目的の物体の座標データとラベルをJSONファイル=CSVの様なもの)を作って検証しています。
上の画像と下のJSONファイルがセットになります。
で囲まれているバウンディングボックスの座標とその囲まれた中のガテゴリーがセット
8862セットこの作業を間違えなくするのは大変です。
coco 80というデータセットの規格になります。
カテゴリーは規格で決まっていて今回はその中から5つ
1. Person (28,151) 
2. Car (46,692) 
3. Bicycle (4,457) 
4. Dog (240) 
5. Other Vehicle (2,228)
全部のカテゴリーは
Coco80(マイクロソフトの形式)で
person, bicycle, car, motorbike, aeroplane, bus, train, truck, boat, traffic light,
fire hydrant, stop sign, parking meter, bench, bird, cat, dog, horse, sheep, cow,
elephant, bear, zebra, giraffe, backpack, umbrella, handbag, tie, suitcase, frisbee,
skis, snowboard, sports ball, kite, baseball bat, baseball glove, skateboard, surfboard, tennis racket, bottle, wine glass, cup, fork, knife, spoon, bowl, banana,
apple, sandwich, orange, broccoli, carrot, hot dog, pizza, donut, cake, chair, sofa,
pottedplant, bed, diningtable, toilet, tvmonitor, laptop, mouse, remote, keyboard,
cell phone, microwave, oven, toaster, sink, refrigerator, book, clock, vase, scissors,
teddy bear, hair drier, toothbrush

これらを組み合わせると可なりのものが出来るのではないかと期待しています。
ただデータの変換が大変で手間の掛かる作業と検証に時間が掛かるのでその作業前に少し休養が必要かもしれません。
結構色々な作業に二人とも疲れている感は否めません。次から次えと未知の作業が続いています。

大変有難い事にAIに掛かった機器の殆どの経費を会社に出して頂きました。今回の開発でどれが正しい機器(経費)か最初は分からず迷ったら買うと言う事を繰り返しました。今年の目標としている無駄な事を積極的に実践した結果かなり講座残高が減りました。
処理していただいた分は小野さんと半分、その中で今回Openframworksというオープンソースの団体に€815(10万円)寄付しました。今回作っているソフトウェアの中で非常に重要な部分を占めています。このオープンソースがなければ今回のソフトは出来なかったと言って良いです。(もっと払うべきなのですが、商品となった時の売り上げの何がしかは考えるのですが、今回はまだそこまでいけてないので。)

2019年6月30日日曜日

煮詰まってます。

元々ソフトウェアはどれ1つ習得していた訳では無く、概略だけで来たのでIoT、AIの深い所でつまずいています。
一気に参考書を読んだ所で習得出来るのでは無いですが、もう少し基礎的な部分に時間を割かないとだんだん難しくなって来ました。
講習では話しの内容は理解出来てついていけています。コードを読む癖をつけないとダメです。分かったつもりが一番いけない。

仕事中に読書が出来ないので何か方法を考えないと行けません。
もちろん自宅や移動中にと読むのですが、頭の切り替えが出来ません。電話や懸案事項を抱えると出来ない性格なので本当に難しいです。

何に一番時間を割きたいかと言うとC言語(C++やC#含む)はパソコンと参考書があれば出来ます。これが一番プログラムの原点でその他の言語にも応用が効きます。
配列やポインタの扱い方を一からやり直し。
結局は平行して色々する事になるのですが、読んで実行して理解するといった感じ。
読書するだけなら学生の時するべきだったのでしょうが…
年のせいか読んでも頭に入らない…

すでにPython、ruby、Linux、JavaScript、Matlab、Unity、Vim等使う言語が増えて基板の回路を調べたり設計の為にEagleやKicadも3Dソフトも慣れないといけないし
 

OpenCV,OpenMV, YoloやTensor Flowの機械学習のフレームワークやライブラリー、偏微分、線形代数(行列)、ベクトル、ベイズ理論と統計学、カルマンフィルター、クオータ二オン(四元数=位置推定の為の角度センサー、角速度の扱い)…


昨年9月から駆け足で斜め読みと必要な部分の実践をして来ましたが、もう少し深く理解しないといけないと感じています。今実践で失敗している部分は中途半端な理解のせいの様に思います。

流石に小野さんも疲れて来ています。7月、8月はスピードを今までの3分の一以下にします。それ以上出来ないといった方がわかりやすい状態です。
なかなか効率良くは行きません。

2019年6月26日水曜日

GitHub講習

ジットハブと言っていましたが、ギットハブなんですね。
プログラムを管理するクラウドサービス。オンプレ(自社サーバー内)でも管理する事の出来るサービス。
マイクロソフトが買収したサービスですが、トップ企業の半分は使っているサービスなのでセキュリティ的には問題はありません。

私自身アカウントを持ってはいますが、他の人の閲覧をするだけで使い方が分からなかったので講習に参加しています。

大体のイメージは運用中のプログラムを効率よく多数の開発者と一緒に開発修正するサービスかな?

具体的にはメインブランチ運用中のサービスをそれぞれの開発チームがコピーする(ブランチを作る=枝分かれのコピーを作る。)それに例えば新しい機能を追加する変更を加える。そしてそれに他の人にその変更に問題が無いかチェックして貰って再度変更といった具合に修正を繰り返します。その後元のメインブランチにマージする(結合する。)
といった事をシステマチックに進めるサービスです。
やはり効率的な印象です。
その中には自動的にコードをチェックしてバグがある若しくはコンパイルが通らない部分をバックでチェックしてくれる便利な機能付き。
変更を加えた所のコードも色分けしてくれるので見易く、エラーのある状態でマージ出来ない様に機能がついてします。
問題のあるプログラムがリリースされない仕組みになっています。

チームの中でコメントのやり取りもメールで自動的にリクエストする様になっています。

その後マイクロソフトでDevOps(=develop+operation)のお話。
今は開発と運用を分けるのではなく同時進行が主流。開発して運用してまた開発し直して改善するサイクル事が当たり前になっています。
アマゾンのAWSに対してマイクロソフトはAzureといったクラウドサービスの話し。
色々なサービスがあるのでどっちがどうかは分からないです…

説明はちんぷんかんぷん…まぁAWSのサービスと追っかけている感じ…
マイクロソフトも以前よりクラウドにシフトして持ち直している感じです。

マイクロソフトはwindowsに依存しなくなっている感じです。ただ過去の資産があるので今優秀な人材をどんどん入れているのでちょっと混乱している感じ。
サービスにはWindows,MacやLinuxでもサービスが使える様になって来ました。
もうGoogleのサービスとシームレスにできる様になっているので良くなっています。
マイクロソフトではある必要も無いですけど…
説明している担当者がMacを使っているのが象徴的でした。

もう過去の遺産に頼れないので新しい技術と共存する様になっている様です。どんどんオープンソース化してます。特許で独占して何かをする時代はIT業界では終わっています。
一部の会社が特許で儲けようとしてもそれに変わる技術が出てきてそもそもの技術が使われなくなります。ワード、エクセル、パワーポイントで食べていける訳でもなくWindowsはハードとソフトのバランスが悪いモデルが混在して使えないPCが多く今回殆どのエンジニアがMacBookを使っていました。



2019年6月25日火曜日

やはり出てきた。

赤外線機器を開発していると安く、小さく、扱いやすくなる様な形になって来ます。
現在使用しているブレイクアウトボード
一番ポピュラーな部品でこれで5000円で割高ですが、これを使っています。
このソケットにLEPTON3.5をセットしてケースを付けるとどうしても全面は5cm角は必要になってしまいます。
でこれが出てきました。
これを使うと約三分の一の大きさになり配線も楽になり、このソケットの裏にはARMコアが付いているのでUSBを直接機器に差し込んで画像の出力が出来ます。
ずっと開発を続けていると開発者の意図も見えて来ます。
つまりFLIR自体がナイトビジョンをLEPTONを使って作る可能性が可なり高いと思います。既に出来ている可能性があります。

無線接続はノイズで繋がらない可能性が排除出来ないのでこれを使って有線での接続も考えています。
ただ、その場合はFLIR自体も含めて競争が厳しくなるのは必至です。
当然色々なGPUに直接繋ぐアプリケーションはどこでも開発が出来るので...

あとサーモグラフィーを保護する窓も必要になるので調べていますが、日本では12.5MMで1ミリ厚が5万円…他を探しています。

因みに中国製





やっぱり旭化成の0.5mm…


2019年6月15日土曜日

続く試行錯誤とターゲット

色々探して飛行時間が少ない問題があるが、技適をクリア出来るドローンが生産中止の模様。Simtoo fairy droneもGPSの問題が致命的で使えない。
どうも200g以下のドローンで技適を取得するブラシレスドローンは出ない感じ。
電波法は重要な事は理解するが、世界標準の機器が日本では煩雑で費用の掛かるシステムの為(規制)日本国内では使えない。ゲームを含めたIT機器の業界では”おま国”と言われています。日本の悪習?
決まりは決まりで文句言ってても始まらないのでターゲットを見直し。
メーカーのZerotechは保守用部品のサポートのみで、早晩それも終了?

画像を安定させる為に必須なのは安定したホバリング機能とジンバル。
この改造も未完成のまま。いつかは完成させるつもりですが…
試行錯誤で色々な知見を得たので無駄では無かったと思います。
適当なドローンが販売されれば別ですが200g以下のドローンのソリューションは中止します。ある程度こんな事になるような予感はありなかなか進まなかった。

ベタですが、次はこれにジンバルを併用する。
風の影響は少ないので元々方法としては悪くないですが…
*金属の棒なので電柱や電線に注意して使う必要がある。

もう1つは200g以上になりますが。DJI Mavic Air(430g)に
サーボモータを使うとノイズで誤動作する問題が解決出来ない。

なのでブラシレスモーターで再挑戦!
途中経過…
これを減量して組み合わせる方法を考える。
あとは小野さんが作ったJetson Nanoを使ったAIシステムを応用して初心完徹出来るか?

最近のキーワードは、
”兎に角やってみる”と”無駄な事をする”。

2019年6月14日金曜日

第10回例会「AIビジネス実装事例セミナー2019」

改めて他社でもAI開発に関しては同じ様な悩みや問題がある事が分かった。
先ず第一に社内にAIとは何かを理解してもらう事が難しい。
日常の仕事と直接結びつけるにはまずAIで何が出来て何が役に立つかを理解する事が出来ない。何をするにもその目的を明確にして(目的変数)その為にどのデータが使えるか必要か(説明変数)を洗い出してそれからひたすらデータを集めてその目的を導き出せるかが問題。

例えば駅に近い人通りが多いお店の売り上げを予測する事は出来ますが、店員が何人帽子を被って清潔な服装していれば売り上げがどの位かは予測する事は出来ません。
一見分かりやすい例ですが、例えば服装が清潔で無く、厨房で帽子を被らないとお客は来ない事から売り上げが上がらない事は想像出来ますね。

目的変数が売り上げ、説明変数が駅からの距離、人通りが多い=○
目的変数が売り上げ、説明変数が清潔な服装かどうか=X
目的変数がお客の減少、説明変数が清潔な服装かどうか=○
目的変数が客数、説明変数は売上=X(これらの関係は単に相関関係で変数では無い)

これら目的変数、説明変数は客観では無く主観で想定してその関係が合理的に結びつくかは実際に導き出して数値化して統計学的に証明する=AIが役に立つ。

仮に目的変数と説明変数の想定が正しくても、データの取り方を間違えると結果が想定外になります。その時想定が悪いのかデータの選び方が悪いのかは経験が無いと分かりません。実際はもっと複雑な説明変数になるからです。

今回のセミナーではそれだけでは無くその次のステージの問題提起をされました。

ショップで検索される商品から売れ筋を導き出す事は既に出来ているのですが、いつだれがどこでといった要素を足す事でもっと複雑な売れ筋商品になっていきます。それは最初のステップから次のステップ、その商品をいつだれが買う事でその人は次にどの商品を買うかを予想して提案するその精度をどのように上げていくかはそれまでのステップで優良なデータを集めれば精度の高い結果が得られてそれらのデータはまた次のステップと循環して他社と差別化出来ます。
それを実践しているのがアマゾンです。それらの統計学的なデータから需要と供給を的確にする事で顧客を集めてサービスをどんどん向上します。その為にAIや数学者やプログラマを雇って更に他社と差別化します。

つまり正しい目的変数をもって正しい説明変数を探し出しその結果集まった優良なデータからさらに詳細な目的変数や説明変数を循環させるとそれは他社が容易に真似の出来ない差別化が出来ます。
グーグル、アマゾン、フェイスブックがそれを実践しているのでイメージは出来ると思います。
個々の生産現場、サービスのAIもこの優良のデータを集める循環が出来ると最強の会社(グーグルやアマゾンの様になれるという事を説明していました。)流石研究員。

ただ単に駅から近く人通りで売り上げ予測で終わってしまうようなAIは直ぐに終わってしまい商品にならない。その試行錯誤から上記の循環に持って行くことで初めて商品になりそれがAIの成否の鍵になります。

何となく理解出来て実践できるかはわからなかったのですが、研究員曰く先ずはデータを集めてこのサイクルを実践する事が重要。
どれが正しいかは最初からは分からない。これがAIの現状です。
一見それすらAIで導き出せばと思うかもしれませんが、それはもっと先です。

結論は何かを始める。千里の道も一歩からといった事です。AIと故事は相性が良いようです。急がば回れです。

具体的な話で業務を改善する例で、責任者の決裁の判子を押す事が問題で判子を押すロボットを作ってしまうと本末転倒。
老人ホームで洗髪の補助にロボットも、介護者が洗髪をしながら要介護者とコミュニケーション出来なくなると本末転倒といった話がありました。
まさに目的と手段を正しく理解する事は一見簡単な様で実際にやってみないと分かりません。