18
18

More than 5 years have passed since last update.

【三菱電機】の特許技術を「推理」する

Last updated at Posted at 2019-06-03

先日、驚くべきニュースが飛び込んできました。

これは正に自分がやろうとしていたことで、「先を越された!」という
のが正直なところです。自分でも、実験的にこんなことをしていました。

三菱電機では、特許出願中とのことで、特許公開がいつになるのか
分かりませんが、ここでは、その技術を「推理」してみようと思います。

ダウンロード (2).png

特許技術の凄いところ

<この技術の概要>

  • 作業者の手に色付きのバンドを付けて、ステレオカメラでその座標を取得する。
  • その座標から、組立作業などの異常検知が可能となる。
  • さらに、異常検知だけではなく、作業効率向上のアドバイスもくれる。

<この技術の凄いところ>

  • 「教師なし学習」であるため、面倒なラベル付けの作業が不要。
  • 作業と作業の継ぎ目を指定する必要はない。

凄すぎて言葉が出ません。

というのも、自分がやろうとしていたことは「教師あり学習」で
かつ、作業の継ぎ目が存在しない「単一の作業」を題材にする予定でした。

ちなみに、畳み込みニューラルネットワークを使った作業工程の分類を
やっている論文もあるので、興味ある方はご覧ください。
https://www.mdpi.com/2227-9709/5/2/26

結論から

結論からいうと、ベイズ最適化を使えば、教師なし学習で異常検知はできそうです。
しかも、作業の継ぎ目を指定する必要はありません。

ただ、アドバイスの提示はどういうアルゴリズムなのか、実際に見てみないと
推理することは難しいです。

問題設定

三菱電機の資料によると、手の座標を監視することで異常検知しています。

今回は、簡易的に右手のx座標(1次元の波形)があったとして、それを
監視することで異常検知します。

以下に「学習データ」、1工程だけの時間が長い「正常データ」、
工程が一つ多い「異常データ」を示します。

ダウンロード.png

これだけだと、何が異常が分からないので、意味ある形で4分割してみます。

ダウンロード (1).png

色別で比較すると、分かりやすくなります。
明らかに、青で囲った部分が異常です。

異常検知手法

時系列データの異常検知は、K近傍法を使う手法や特異スペクトル変換法等、
色々ありますが、今回の異常検知は波形に切れ目を入れ、分割する手法を使います。

分割する理由として、各工程では作業者によって作業時間にばらつきが生じるため、
各工程で波形が伸縮します。従って、切れ目を入れ各工程に分割し、そこで伸縮を
考慮した異常検知が必要になってきます。

具体的に、さきほどの図で説明します。

ダウンロード (1).png

正常データの赤の部分は、学習データの赤と比べて長くなっていますが、
問題なく作業が行われているように思えます。

一方、異常データの青の部分は、明らかに余計な工程が入っており、
異常と認識してほしいところです。

上図のようにうまく分割できれば、波形を伸縮させ同じ長さにした上で
異常度を計算すれば異常検知できそうです。

ダウンロード (3).png

波形の類似度を見る場合、DTWが良く用いられますが、今回は
コサイン類似度を使います。

そして、OpenCVの機能で波形を同じ長さにして、異常度を計算します。

import cv2
import numpy as np

def cos_sim(train, test):
    test = cv2.resize(test, (1,len(train)))
    return np.dot(train, test) / (np.linalg.norm(train) * np.linalg.norm(test))

ベイズ最適化

ここまでは、三菱電機の資料を見れば何となく推理できます。
問題は、「どうやって切れ目を入れるのか?」ということです。

畳み込みニューラルネットワークを使えれば良いなぁと思ったのですが、
私の脳みそでは力不足でした。代わりにベイズ最適化を使います

ベイズ最適化はこちらを見ていただければ、イメージは分かるかと思います。

ベイズ最適化とは、ある関数でパラメータがあったとして、パラメータをいじると
出力が変化するとします。そして、出力が最小(もしくは最大)になるように
パラメータを良い感じに探してくれるものです。

movie (2).gif

上の動画はパラメータ(x)に対し、yの出力値が最小(y=0)となる点を探す様子です。
青い点は事前に与えられた情報、赤い点は実際に探索した点を示しています。
わずか5回探索するだけで、最小値を見つけることができました。

今回の問題では、切れ目を入れる場所をベイズ最適化で見つけます。
そして、コサイン類似度で分割した波形同士を比較し、その類似度の
平均値が高くなるように分割する位置を探索します。

実験

コード全体はgithubに置きました。
Colaboratoryで実行可能です。

さきほどのデータを使ってベイズ最適化で切れ目を探索させました。
そして、コサイン類似度で計算した結果を以下に示します。

ダウンロード (2).png

正常データでは、コサイン類似度が0.98以上となり正常と認識することができました。
一方、異常データでは異常部分のコサイン類似度が0.35と低くなっており、異常を
検出することができそうです。

最後に

今回の推理は当たっていれば、そして、三菱電機の特許が認可されれば
特許でカバーされてしまうため、無断で使うことはできません。

しかし、外れていれば、本稿で紹介した内容は特許を気にすることなく
使える可能性があります。今後も特許に注目していきたいと思います。

次回はhandtrackingを使って、実際に本技術を使ってみます。

18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18