ストリーム分析:SAS ESPのクイックスタート

現在、データストリームでの分析アルゴリズムの使用は、分析システム構築の分野で最も緊急の課題の1つです。 たとえば、産業プラントのセンサーからの読み取り値に基づいて開発された多くの高精度予測モデルは、重大な産業事故を防ぐ準備ができていますが、そのためには、センサーからの読み取り値がリアルタイムで取得されるエンドデバイス(「エッジデバイス」)で実行する必要があります。 SAS Event Stream Processing製品は、この問題を解決し、分析を「オンライン」に転送するために呼び出されます。 この出版物では、適用された問題の例を使用して構成の経験を共有したいと思います-ビデオカメラからのイメージの分析。







テクノロジー



SASはSAS製品ラインに長年にわたって存在し、独自のストリーム処理ソリューションであるSAS Event Stream Processing(以降ESP)を開発しています。 開発者の主なタスクは、市場の既存のソリューションよりも桁違いに高いパフォーマンスを達成することでした。 これを行うために、ESPの開発中に、彼らはディスク上の中間計算とインデックスのストレージを完全に放棄しました。 すべてのストリーム変換はRAMで実行され、イベント固有の再カウントは保持されます。





SAS ESPでメモリを操作します。 RAMのイベントリポジトリは中間結果を保存し、追加のインデックスのために内部または外部プロセスの並列アクセスの場合にブロックされません。



エンジンは、1秒あたり数百万のイベントで大きなデータストリームを処理できます。 同時に、低レイテンシを維持しながら、彼はすぐに銀行でのオンラインマーケティングと不正防止のソリューションに代わりました。 そこでは、顧客操作のインテリジェントなフィルターであり、アカウント上の非標準のアクティビティを即座に検出し、不正な操作をデータストリームから分離します。



しかし、これはESPの二次機能です。 このエンジンは、データストリーム上で分析モデル(SAS、C、Pythonなど)を継続的に使用するためのメカニズムとして設計されています。





ストリーミングイベント処理の原理。



SAS Viya Business Breakfastフォーラムの良い例として、 SASでデモ分析スタンドを設置することを決定しました。これは、画像分析のタスクをベースにしています。 そして、これは私たちがそれをどのように設定し、プロセスで遭遇したものです。



ストリームビデオ分析



SAS Viyaプラットフォームの詳細な分析部門の同僚が作成した分析モデルを自由に使用できました。 その本質は、車内でドライバーの入力画像を受け取ると、アルゴリズム(この場合は訓練された畳み込みニューラルネットワーク)がクラスに従ってドライバーの行動を分類することでした:「通常の運転」、「乗客との会話に気を取られる」、電話「」、「SMSの書き込み」など。

モデルの例:入力画像は、電話の手が当たった画像の部分に基づいて、「SMSを書き込む」として分類されます。



望ましくない動作に対応できるようにするために、このアルゴリズムをリアルタイムで実行する方法に関する疑問が生じました。 シナリオによると、オンラインモードのカメラからの画像は、すでにファイルの形でディスク上のネットワークディレクトリに格納されていました。



残ったのは、データに接続し、画像を目的の形式に変換し、モデルを適用し、動作のクラスに属する可能性がある場合は、オンラインダッシュボードにリアルタイムの警告を表示することだけでした。 そして、これはすべて、SAS ESP GUIで、1行のプログラムコード(!)なしで構成できることが判明しました。



SASイベントストリーム処理



SAS ESP Studioグラフィカルインターフェイスのハザード検出プロジェクト。
ESPグラフィカルエディターで、次のデータフロー変換を追加しました。



  1. 入力として、sourceタイプの2つのノード、model_sourceおよびinput_imageがあります。 model_sourceで、分類モデルを公開します。 これを行うには、3つのパラメーター(操作の名前、モデル形式のタイプ、バイナリファイルへの物理パス)を含むテキストファイルからコマンドを読み取るファイルコネクターを構成します。 ESPは各データソースに対して静的とストリーミングの両方の機能に遅れをとるので、いつでもこのノードにモデルをダウンロードするための新しいコマンドを発行できます。これは産業運用に便利です。アルゴリズムのバージョンを更新するためにプロジェクトを停止する必要はありません。





    model_sourceへの発行コマンドの設定



    入力モデルファイルの内容:



    I,N,1,action,load

    I,N,2,type,astore

    I,N,3,reference,/opt/sas/demo/image_processing/d.astore




  2. 2番目のソースinput_imageは、カメラからの写真です。 データを公開するには、標準アダプターを使用します。これは、ESPのソースからデータを公開するプログラムです。 この場合、ファイルアダプターを使用しましたが、たとえばソリューションに付属のUVCアダプターを介して、カメラに直接接続することもできます。





    一般的なタイプのカムコーダー用のUVCコネクターの構成。
  3. 画像は、モデルがトレーニングされた形式とは異なる形式になる場合があり、これは分類の品質に影響する場合があります。 したがって、input_imageの後、すぐにresize_imageノードを追加し、その設定で目的の形式を規定します。 この場合、100/100ピクセルの正方形に絞ります。



    画像処理のセットアップ
  4. モデルの実行は、CNN_score_codeで構成されます。 インターフェースは、モデルのメタ記述(P__label_c0、P__label_c1、P__label_c2、およびP__label_c9)から出力属性を自動的に抽出します-動作の各クラスの確率。 次に、max_classノードで、最大の確率でクラスを選択する新しい計算フィールドを定義します。
  5. これで、プロジェクトを起動することで、各入力画像のリアルタイム分類を取得できるようになります。 私たちの歴史では、悪徳ドライバーは定期的に道路から注意をそらされています。 しかし、彼が少しの間気を散らされたとき、それらのケースを長期にわたる危険な運転のケースから分離することが重要です。 これを行うには、直前のイベントストレージ(copy_1_min)、動作クラスによる集約(aggr_for_alert)、および「危険運転」ファクトフィルター(filter_alert)の3つのノードを追加します。



    イベントストレージ設定の構成-最後の1分で。


    各動作クラスのイベントカウントを設定します。


    フィルタリングルールの設定。



指数



ESPの各変換には「状態」という設定があることに注意することが重要です。 データ変換がストリーミングであるかどうか、つまり 入力イベントを処理すると、結果はすぐにダイアグラムに沿ってさらに送信され、このノードのメモリから削除されます。 または、各イベントの処理結果を保存し、インデックスを作成していつでもアクセスできるようにすることができます。 たとえば、集計ウィンドウは常に状態を保存し、入力ストリームに基づいて継続的にイベントを再計算します。



打ち上げ



プロジェクトに戻ります。 実行するだけです

データストリームを簡単に表示するために、オンラインレポートデザイナーのSAS ESP Stream ViewerがESPに付属しています。 セットアップモードでは、サーバー上で実行中のすべてのプロジェクトが表示され、それらに接続して、便利な視覚化を選択できます。





SAS ESP Stream Viewerのオンラインダッシュボード



以上です。 ビデオ信号に対する反応をリアルタイムで自動化する機会を得ました。 この場合、オンライン監視を設定しますが、同じアダプター/コネクターを使用して、検出された違反の各ケースにメッセージを送信したり、外部システムに制御アクションを形成したりできます。



それともPython?



技術的には、ケースは完了しましたが、フォーラムでデモを行うためには、十分にインタラクティブではなかったようです。 それは不便で、非常に安全ではありませんでした(!)



SAS ESPは、Pythonで作成されたモデルのストリーミング実行をサポートしています。 確認のために、OpenCVライブラリを使用して、画像の分析、つまり画像内のオブジェクトの検索を設定します。



画像入力ストリームでハード帽子を見つけるためのESPモデル
ESPダイアグラムには、2つのデータソースがあります。ラップトップのオンラインカメラからのフレームと、探しているオブジェクトの写真です。 この場合、建設現場の潜在的な労働者が安全規則を忘れているかどうかを判断します。彼にヘルメットがありますか。 proc_detectionノードで、次のPythonコードを実行します。



 def compute_total(Image,image_template): "Output: score_point" import sys import cv2 import numpy as np import os import base64 import io from imageio import imread MIN_MATCH_COUNT = 10 #       DIST_COEFF = 0.55 img_big = imread(io.BytesIO(base64.b64decode(image_template))) sift = cv2.xfeatures2d.SIFT_create() # Initiate SIFT detector matcher = cv2.BFMatcher() # BFMatcher with default params kp_big, des_big = sift.detectAndCompute(img_big,None) img_tpl = imread(io.BytesIO(base64.b64decode(Image))) kp_tpl, des_tpl = sift.detectAndCompute(img_tpl,None) matches = matcher.knnMatch(des_tpl,des_big,k=2) good = [] for m,n in matches: if m.distance < n.distance * DIST_COEFF: good.append(m) score_point = len(good) return score_point
      
      







SAS Viya Business Breakfastフォーラムのウェブカメラからの画像にヘルメットが存在することの識別(同僚、 maxxtsはスタンドをテストしています)



機械学習



ストリーム処理のさらなる開発について話す場合、おそらくストリーム上の分析モデルのトレーニングに重点が移ります。 つまり 前の例とは異なり、モデルは実行されるだけでなく、SAS ESP内でトレーニングを行います。 これには、イベントによって選択されたアルゴリズムのトレイン操作を実行するための追加のデータストリームが必要になります(たとえば、スターターの場合、単純なk-meansクラスタリング)。 その後、ESPを搭載した自動車は、接続されたばかりの新しいセンサーを使用して状況を分析する機会があります。 これにより、Industry 4.0のコンセプトで新しいデバイスを迅速に有効化および自動化できます。



ストリーミング分析でどのような課題に直面したかをコメントに書いてください。もちろん、 SASイベントストリーム処理に関する質問にお答えします。




All Articles