機械学習/画像処理

Optical Flowを使用して物体の移動軌跡を描画してみた話

はじめまして。技術研究所の堀越と申します。

皆さんは動画から物体を検知し、その移動軌跡を取得する方法をご存じでしょうか?        今回は、Optical Flowを使用して物体の移動軌跡を描画するPythonプログラムを作成したので紹介します。

Optical Flowとは

オプティカルフロー(Optical Flow)とは、フレーム間の物体の物体の動きを検出して速度をベクトルで表示する手法のことをいいます。

オプティカルフローは次のような仮定に基づいて計算を行っています。

  • 連続フレーム間で物体の画像上の明るさは変わらない
  • 隣接する画素は似たような動きをする

オプティカルフローの推定法としては、勾配法とブロックマッチング法があります。

【 勾配法 】

画像の時空間微分の拘束方程式による条件からフローベクトルを推定する手法。          短い処理時間で検出できるが、検出の精度が低い。

【 ブロックマッチング法 】

画像をある大きさの領域で分割して次のフレームの画像中を検索し、前フレームの注目領域との類似度が最も高い領域を検出する手法。                               処理時間が長いが濃度値の変化やノイズに強く高い精度で検出を行うことが出来る。

今回のPythonプログラムでは、勾配法の一種であるLucas-Kanade法という方法を使用して実装を行いました。

続きを読む

機械学習をやろうとしたらデータクレンジングに明け暮れていた件(2) ~大量のファイルを分割アーカイブする~

技研のまつけんです。

前回の記事では、複数のアーカイブを展開してファイルやフォルダの名前の傾向を調べる過程を紹介しました。今回は、その逆の「多数のファイルを分活してアーカイブする」ためのシェルスクリプトを紹介したいと思います (前回の「まとめ」では違う予告をしましたが、その前に今回の作業をする機会があったので、先に記事にしました)。

自分がデータクレンジングしたものを誰かに渡すことがあります。その際、メールで送るにしてもサーバに置くにしても、再びアーカイブ (+圧縮) すると便利なのですが、数ギガバイトのzipやtgzだと色々と不便です。そこで、分割してアーカイブしたくなります。それを実現するのに、真っ先に思いつく方法は、a、b、cという3つのフォルダがあるのであれば (そして、3つのフォルダ内のデータ量に偏りが無いのであれば)、

のように

  • aで始まるものは、a.tgz
  • bで始まるものは、b.tgz
  • cで始まるものは、c.tgz

としてしまうことでしょう。

続きを読む

Python用ライブラリ用のwrapperを作って使っている話

技術研究所 (技研) のまつけんです。

Python用のライブラリには、cv2 (OpenCV)、numpy (NumPy)、pandas (Pandas)などがあります。大抵のことが出来るので大変便利なのですが、引数の与え方などで不便を感じることがあります。そこで、今回は、私が普段、それらのライブラリをwrapするのに使っているサブルーチンを紹介したいと思います。

OpenCV用 (wrap_cv2.py)

色の定義

頻繁に利用する色 (無彩色、原色、補色) を定義します。OpenCVはRGBではなくBGRが基本なので、その順番となっています。

続きを読む

機械学習をやろうとしたらデータクレンジングに明け暮れていた件(1) ~フォルダ・ファイル名の傾向と対策~

技術研究所のまつけんです。

今回はデータクレンジングの話です。データクレンジングというのは、データを機械学習に流し込む前に全体的に眺めて、必要なら整形する作業です。KaggleやSIGNATEなどのコンテストではクレンジングされた状態のデータが提供されますが、実際の業務では、必ずしもそうとは限りません。そして、それはデータの中身に限った話ではありません。フォルダやファイルの名前が一定の規則に従ってない場合、それを規則的な名前にするところから始まります (規則的な名前でないとループなどで処理したりするのに不便です)。

機械学習に使う大きなデータをよそから転送する際、たいてい、DVDやアップローダなどで受け取ります。後者の場合はzipなどでアーカイブ (および圧縮) されていることが多いのですが、zipファイルが数十個ある場合もあります。今回の記事では、転送したデータを確認し、フォルダ名、ファイル名などを扱いやすい形に変換する過程について、説明します。データ数が膨大な場合を想定していますので、多くはbashスクリプトにより自動化しています。といっても、UNIX/Linuxをインストールする必要があるわけではありません。今から紹介する手法はcygwin上で行うことを想定しています (スクリプトは全てcygwinのbashで動作確認しています)。

今回は、機械学習用のデータについて、フォルダ構成を確認し、必要に応じて整形する手順を紹介したいと思います。

続きを読む

OpenCVでレシートを適切なサイズに縮小する

技術研究所 (技研) のまつけんです。

リモートワークが増えたことで、会社に領収書やレシートの写真を提出することが多くなりました。紙のレシートを、スキャナやスマホで電子化する (画像ファイルにする) と、不必要に高精細な画像になってしまうことが多いように感じます。そこで、今回は、レシートの写真を自動で、文字が判読できる範囲内で縮小する (解像度を落とす) Pythonプログラムを作成してみました。機械学習などは使わず、OpenCVとNumPyだけで画像処理によって実現しています。

続きを読む

白黒はっきりしない判定の評価のしかた 〜ROC曲線と AUC〜

技研の (あ) です。

最近すっかり医療系の話に関わることが多くなってます。疾患の有無の判定などを行う際の性能指標について、これまで「感度とか特異度とか」「F値と平均的でない平均の話 〜あるいは調和平均の使いどころ」といった記事を書きました。

今回はその続きで、ROC曲線 (ROC Curve) と AUC について説明したいと思います。ROC曲線の話に行く前に、まずは判定の結果出てくる値に関しての話からです。

続きを読む

調和平均とハーモニー、と新たな謎

[前回までのあらすじ]
実は調和平均とは算術平均の裏返しであった。分母にあたるものが同じ場合の平均を考えるのに算術平均が適切であるなら、分子にあたるものが同じ場合の平均を考えるには調和平均が適切で、分子分母が逆転している以外は同じと言っても過言ではなかったのだ…。

技研の(あ)です。前回は F値と、その計算に使われる調和平均 (Harmonic Mean) ってどういうもの? という話を書きました。ところでなんでこれって「調和」平均って言うんでしょうね?

ということで今回は前回の補足的にそのあたりの話を書きます。
(が、そこから話は意外な展開に…?)

続きを読む

F値と平均的でない平均の話 ~あるいは調和平均の使いどころ

技術研究所の(あ)です。
機械学習を使った画像分類を用いた医療系の共同研究をいろいろやったりしてます。

画像分類などの分類問題の性能評価指標って、なんかいろいろ出てくるよねー、それって何がどう違うの? ということで以前、感度とか特異度とかの話を書きました。今回はその続編ということで「F値」の話を書きます。

そしてそこで出てくる、「調和平均」って何者? という話も書きます。
(この記事はCRESCO Advent Calendar 2019最終日の記事です)

続きを読む

fasttextとWatson Natural Language Classifierの文書分類比較

テクニカルエバンジェリストの井上(祐)です。

この記事は「CRESCO Advent Calendar 2019」24日目の記事です。

文章に書かれている内容から、どのカテゴリに分類するか判断を行う文書分類は、新聞記事のカテゴリ分類(政治、経済、スポーツなど)や、身近なところでは迷惑メールフィルタでの利用があります。また業務においては、大量に発生する文書、例えば契約書、提案書、日報、作業報告書などを効率よく分類することで業務効率化を図るなど様々な利用が考えれます。今回、文書分類器としてfasttext、Watson Natural Language Classifierを対象に分類精度、速度、費用について比較を行います。

続きを読む

AIマイコン MAiXDUiNOを試してみた

テクニカルエバンジェリストの井上(祐)です。

最近、気になっているエッジコンピューティング。クラウドのパワフルな環境ではなく、データの発生源に近いエッジ側でデータをリアルタイムに処理しその場で推論を行なったり、ある程度処理をしたらクラウドにデータを渡したり、このエッジで動かすAIに注目が集まっています。例えば、動画から何かを識別する際、ダラダラと動画データをクラウドに送り込んでAIに処理させるのは、通信の負荷を考えると現実的ではありません。やはりエッジ側のAIで認識し、結果をクラウドに送るのが良さそうです。ちなみに、このようなエッジコンピューティングはAIoTと呼ばれています。本記事では、そのひとつMAiXDUiNOを試したという内容となります。

続きを読む