32

自己啓発の演習として、Dilbert 漫画の特定のセルが与えられたときに、漫画にどのキャラクター (Dilbert、PHB、Ratbert など) が存在するかを識別できる単純な分類アルゴリズムを開発したいと考えています。

これを行う最善の方法は、(1) 画像に何らかのアルゴリズムを適用して、それを特徴のセットに変換し、(2) トレーニング セットと多くの可能な機械学習アルゴリズムの 1 つを使用して存在/細胞内に存在する特定の特徴を伴う特定の特徴の欠如。

私の質問は、(a) これは正しいアプローチですか、(b) テストする分類アルゴリズムと ML アルゴリズムが多数あるため、正しいものを見つけるための優れた方法論は何か、(c) どのアルゴリズムを開始しますか?基本的に漫画の分類演習を行っていることを考えると.

4

4 に答える 4

25

したがって、ステップ1で正しい軌道に乗っていると思います(画像にアルゴリズムを適用して、画像を一連の機能に変換します)

このプロジェクトは、生データ (漫画を構成する個々のフレーム) から実際にトレーニング データ セットを作成する必要があるため、ほとんどの ML の問題よりも困難です。たとえば、フレームを取得し、そのフレーム内の 2 人のキャラクター、ディルバートと角のあるキャラクター (ディルバートのボスだと思いますが、彼の名前はわかりません) を特定し、そのフレームからこれら 2 つのキャラクターを抽出し、それぞれに適切なクラス ラベル (例: Dlibert の場合は「1」)。

ステップ1

ディルバートの漫画を構成する各フレームから個々のキャラクターを抽出するには、各フレームのスペクトル分解を提案します。この手法に慣れていない場合、その核心は、単なる固有ベクトル分解です。

python (またはRPyのような python-to-R バインディングを使用できる場合は R ) が好きな場合は、 sklearnを参照することを強くお勧めします。特に、この優れたライブラリ (元々はSciPy scikitsプロジェクトの傘下で開発されたため、NumPy + SciPy を行列計算に使用しています) には、画像セグメンテーション用のアルゴリズムがいくつかあり、そのうちの 1 つはスペクトル クラスタリングに基づいています。プロジェクトのこのステップでは、これら 2 つの scikits.learn モジュールを参照することをお勧めします。

  • sklearn.feature_extraction (特に画像サブモジュール)

  • sklearn.cluster.spectral_clustering

これらの 2 つのモジュールには、2 つの優れたサンプル スクリプトが含まれています。1 つはデジタル写真を分割し、もう1 つは、互いに最小限のコントラストで部分的に重ね合わされた 3 つの円で構成された画像を分割し、背景も含めます。どちらも、実行する必要がある分解よりも難しい問題だと思います。言い換えれば、sklearnにはソース配布物に含まれる 2 つの完全で十分に文書化されたサンプル スクリプトがあり、どちらもあなたと同様のデータを処理します。いずれかまたは両方が、このステップの優れたテンプレートになります。

ステップ2

これが最初のステップです。2 つ目:分解されたイメージのすべてのコンポーネントをグループに並べ替えます。ディルバート文字ごとに 1 つのグループです。次に、各グループにクラス ラベルを割り当てます。たとえば、分解ステップで 4 文字の場合、適切なクラス ラベルの選択は「0」、「1」、「2」、および「3」です。これらのクラス ラベルをコンポーネント マトリックス (手順 1 の分解生成物) に追加して、各文字マトリックスが対応するクラス (ディルバート文字) にマップされるようにします。

ステップ 3

適切な ML 手法を選択します。このステップには多くの選択肢があります。唯一の基準は、手法が教師付きカテゴリに属していること (データにクラス ラベルを割り当てているため) と、それが分類器として機能すること(つまり、数値を出力するリグレッサーではなく、クラス ラベルを返すこと) です。これは個人的なプロジェクトなので、あなたにとって最も興味深いものを選びました。今述べた基準を満たすものは、多層パーセプトロン(ニューラル ネットワーク)、サポート ベクター マシン(SVM)、およびk 最近傍(kNN) です。

ステップ 4

分類器のトレーニング、検証、およびテスト

代替手法:テンプレート マッチング

ステップ 1 が完了すると (各画像が一連のオブジェクトに分解され、その中には間違いなくキャラクターを表すものもあります)、これらの分解生成物を手動でふるいにかけ、漫画の各キャラクターの手本を収集できます。これらはテンプレートです。

次に、画像からセグメント化されたオブジェクトを、この一意のテンプレートのセットと比較します。別の scipy scikit であるscikit-imageでは、テンプレート画像と候補画像を渡すメソッドmatch_templateを使用できます。このメソッドは、ピクセルごとの相関 (-1 と 1 の間) を示す 2D 配列を返します。 )。

于 2011-11-13T15:51:32.113 に答える
2

一般的に、これは正しいアプローチであり、2つのテクニックを見ることができると思います。

  • Eigenfaces、顔認識に固有ベクトルを使用するすべてのアルゴリズムの名前。
  • Bag-of-Wordsまたはビジュアルワードアプローチ。
于 2011-11-13T10:47:06.443 に答える
1

トレーニング データ (漫画の画像) をdemo.nanonets.ai (無料で使用できます)にアップロードして、モデルの構築を試すことができます。

次に、次の (Python コード) を使用して API をクエリします。

import requests
import json
import urllib
model_name = "Enter-Your-Model-Name-Here"
url = "http://static5.businessinsider.com/image/525464f969bedd0b0422cfb6/dilbert-creator-scott-adams-presents-his-10-favorite-comics-of-all-time.jpg"
files = {'uploadfile': urllib.urlopen(url).read()}
url = "http://demo.nanonets.ai/classify/?appId="+model_name
r = requests.post(url, files=files)
print json.loads(r.content)

応答は次のようになります。

{
  "message": "Model trained",
  "result": [
    {
      "label": "Dilbert",
      "probability": 0.97
    },
    {
      "label": "PHB",
      "probability": 0.025
    },
    {
      "label": "Ratbert",
      "probability": 0.005
    }
  ]
}
于 2016-12-13T11:08:24.150 に答える
0

この質問は 5 年前に尋ねられたものであり、ディープ ラーニングが過去 3 ~ 4 年間でコンピューター ビジョンの様相を変えたという事実を考えると、上記の回答は時代遅れです。深層学習ベースのソリューションには、エンドツーエンドの学習フレームワークで特徴を学習し、分類を実行する畳み込みニューラル ネットワークのトレーニングが含まれます。ただし、複数の漫画が同じ画像に存在する可能性があるため、画像分類で使用される標準のソフトマックス クロス エントロピー損失は適切でない場合があります。したがって、独立したロジスティック回帰を損失関数として使用する必要があります。各クラスのしきい値は、保留された検証セットで得られた精度に基づいて取得できます。漫画の場合でも、ゼロからトレーニングするのではなく、imagenet を使用して初期化された事前トレーニング済みのモデルを使用することをお勧めします (https://arxiv.org/pdf/1611.05118v1.pdf、この論文の最終タスクは異なりますが、それでも漫画の処理を行っています)。豊富なデータがある場合、事前トレーニングはそれほど重要ではないかもしれません。このタスクは、 caffe / torchなどの標準ライブラリを使用して実行できます。

于 2016-12-27T20:11:10.660 に答える