0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

機械学習全般のできる画像認識屋になる方法

Last updated at Posted at 2024-09-03

画像認識屋がキャリアを広げていくうえでおすすめなのが、機械学習全般もできるエンジニアになることだ。

そのためにおすすめする技術分野

  • 主成分分析
  • サポートベクターマシン
  • クラスタリング

分野が違う人向けの説明

主成分分析とは:

やたら変数の数が多すぎる状況から、データにありがちな傾向を少ない数で表現し直すこと。
変数がやたらありまくっても、うまく特徴をつかんで分析ができるということです

サポートベクトルマシンとは:

変数の数がありすぎて、グラフで分布を見ることなんてできないデータに対して、
いいようにデータの分類や回帰計算をしてくれる方法。
できるだけ、誤分類が生じにくいようにマージンを考えてくれるという優れもの。

それぞれを勧める理由

  • 主成分分析
     主成分分析は、多数の変数がある分野で、線形の関係性から何らかの規則性を発見するためのものだ。
    人は、多次元の空間で物事を考えることが苦手だ。
    少ない次元で少ない変数で考えたほうが圧倒的に理解しやすい。
    多次元の変数の分布の多くは、少ない数の主成分の累積寄与率で説明がつく。

そうすることで、物事を単純化することができる。
多くのパラメータのままモデルを作ると、学習データに対して過学習したモデルができやすい。
Scikit-learn の主成分分析

  • サポートベクターマシン
     2値判定、他値分類などの分類問題に対して、有効な手法だ。
     サポートベクトルマシンでは、分類のマージンを十分に広くとろうとする性質があることも好まれる点だ。
    主成分分析で、入力データの次元を減らしておいてから、それをサポートベクターマシンにで学習・推論するのは機械学習の常套手段だ。
    分類の際に、その分類の確からしさの値を出力させることもできる。
    サポートベクターマシンの利点:
    分類問題で、少ない数の学習データでも良好な結果を得やすい。
    ポジティブサンプル・ネガティブサンプルの境界付近のデータが学習に寄与するので、簡単すぎるデータを学習に加えすぎて、逆に性能がでなくなるという生じにくい。そのため、分類問題には使いやすい。
    さらに、サポートベクターマシンには、回帰推定を行うバージョンもある。
    Support Vector Machines
    1.4.2. Regression
  • クラスタリング
    サポートベクターマシンでは正解データを予め人が与えていた。教師あり学習ですね。
    それに対して、クラスタリングでは、データそれ自体の中にある関係性によってクラスターを作る。そのため予め人が正解データを与えることがありません。教師なし学習

2.3. Clustering

付記:対象とする分野が違えば、分析のしかたも変わる

ナイーブベイズ(単純ベイズ)
決定木
random forest
などがのぞましい場合もある。

付記:対象とする分野が違えば、分析のしかたも変わる(時系列データ)

時系列データには、時系列データに特徴的なアプローチがある。

  • リカレントニューラルネットワーク
  • 時系列データの季節変動・曜日による変動の除去をするよく使われるノウハウもあるだろう。

物理現象であって、線形の遅れ系を仮定できることがわかっているのならば、
なにも機械学習というアプローチをとらずに、通常の計測分野でのモデル化の手法をとればいい。

古い時代の画像認識の開発(サポートベクターマシン)

深層学習以前の機械学習で活躍していたのは、サポートベクターマシン(SVM)だった。
多次元空間のデータを分類するのに、サポートベクターマシンを用いていた。
非線形な事例でも分類できるうえに、汎化性が高いことが理由だった。
前段の特徴量にHOGを用いた用いたものが使われ、HOG-SVMの検出器として利用された。

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
found = hog.detectMultiScale(img, winStride=(8, 8), padding=(32, 32), scale=1.05)

などのコードが書かれた。
画像の縮小倍率を変えて、ラスタースキャンすることで、検出するものだった。

そのため、この時代の画像認識エンジニアは、サポートベクターマシンを使うことが多かった。

  • libSVM も典型的なライブラリの一つだった。

古い時代の画像認識の開発(主成分分析)

古い時代の画像認識は線形代数を前提としていた。
画像はグレースケールにしても、画素数が多くなるので、高次元での分類問題となった。
そのため、高次元で問題を解くよりは、より低次元の空間で問題を解くように前処理を行なっていた。
それが主成分分析です。
主成分分析では、
入力ベクトルの基底を、直交なベクトルで取り直します。
しかも、寄与率の高い順に取り扱います。
32x32 の画素数グレースケール画像は32x32 = 1024 次元になります。
しかし、累積寄与率が98 % に達する次元は格段に小さくなります。

この直交なベクトルは、固有値ベクトルと呼ばれます。

入力として、顔照合用の正規化された顔画像を用いたときに、
その固有値ベクトルを画像として表示したものを
固有顔(Eigenface) と呼びます。

このような事例もあって、古い時代の画像認識エンジニアは、主成分分析をも使っていることがある。

自動顔登録とクラスタリング

顔照合は、教師なし学習としても定式化できるはずである。
あの顔とこの顔は、同一人物であるかどうかという判断である。
同一人物に属する顔データの一群を作っていく処理である。
クラスタリングには、様々なロジックがある。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?