Dilbert漫画の画像分類アルゴリズムを開発するための一般的なアプローチ

自己開発の練習として、私はDilbertの漫画の特定のセルを与えられた漫画(Dilbert、PHB、Ratbertなど)に存在する文字を識別できる単純な分類アルゴリズムを開発したいと考えています。

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

だから私の質問は - (a)これは正しいアプローチか、(b)いくつかの分類アルゴリズムとテストするMLアルゴリズムがあるため、正しいものを見つけるための良い方法は何か、(c)どのアルゴリズムを始めるか私たちが基本的に漫画の分類練習を行っていることを考えると、

30
面白い、私はMによってこの論文を見つけました。星座(視覚的な言葉の)モデルを取り扱うWeber、そして最後にDilbertの漫画を扱う実験も含まれています。
追加された 著者 Michal Kottman,

4 答え

だから私はあなたのステップ1(画像にアルゴリズムを適用し、それを一連の機能に変換する)の正しい軌道に乗っていると思います。

This project is more challenging that most ML problems because here you will actually have to create your training data set from the raw data (the individual frames comprising the cartoons). For instance, grab a frame, identify two characters in that frame, Dilbert and the character with horns (Dilbert's boss i believe, don't know his name), extract those two characters from that frame and append to each the appropriate class label (e.g., "1" for Dlibert).

Step 1

Dilbertの漫画を構成する各フレームから個々の文字を抽出するには、各フレームの スペクトル分解 を提案します。あなたがこのテクニックに精通していない場合、そのコアでは、それは単なる固有ベクトル分解です。

Python(またはR、Python-to-Rバインディング( RPy など)を使用することができれば)を好きなら、 sklearn を参照してください。特に、この優れたライブラリ(もともと SciPy scikits プロジェクトの傘の下で開発され、行列計算にNumPy + SciPyを使用していました)は、画像分割のアルゴリズムがいくつかあります。 href = "http://scikit-learn.org/stable/auto_examples/cluster/plot_segmentation_toy.html" rel = "noreferrer">スペクトルクラスタリングを参照してください。あなたのプロジェクトのこのステップでは、これらの2つのscikitsを見たいでしょう。

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

  • sklearn.cluster.spectral_clustering

Included with these two modules are two good example scripts, one segmenting a digital photograph and the other segmenting an image comprised of three partially super-imposed circles with minimal contrast w/r/t each other and w/r/t the background--both, i suspect are more difficult problems that the decompositions you will need to perform. In other words, sklearn has two complete, well-documented example scripts included in the source distribution, both of which process data similar to yours. Either or both would be an excellent template for this step.

ステップ2

So that's the first step; here's the second: sort all of the components of the decomposed images into groups, one group for each Dilbert character. Next, assign a class label to each Group, e.g., if there are four characters from your decomposition step, then a decent choice for class labels is "0", "1", "2", and "3." Append those class labels to the component matrices (the decomposition products from step 1) so each character matrix is mapped to its corresponding class (Dilbert character).

ステップ3

Select a suitable ML technique. You have many choices for this step; the only criteria are that the technique is in the supervised category (because you have assigned class labels to your data) and that it function as a classifier (i.e., it returns a class label, versus a regressor which outputs a numerical value). Given this is a personal project, i would chose the one that seems most interesting to you. A few that satisfy the criteria i just mentioned are: multi-layer perceptron (neural network), support vector machine (SVM), and k-nearest neighbors (kNN).

ステップ4

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

Alternative Technique: Template Matching

ステップ1が完了すると(各画像はオブジェクトのセットに分解されますが、その一部は文字を表すことは間違いありません)、これらの分解製品を手作業で選別し、漫画の各キャラクターの標本を収集することができます。 テンプレート です。

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

25
追加された
こんにちは、私は似たようなことをしています。あなたは結果をどこにでも書いたことがありますか?
追加された 著者 Declan Cook,
私もあなたが作ったものに興味があるでしょう
追加された 著者 tarrasch,
詳細な答えをありがとう!私はパイソンの男ですから、スカリーナンは素晴らしい場所のように見えます。私は私が学んだことをフォローアップします。
追加された 著者 Andrew J,

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

  • Eigenfaces, the name for all algorithms that use eigenvectors for facial recognition.
  • The Bag-of-Words or visual words approach.
2
追加された

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

0
追加された

You can try building a model by uploading your training data (images of comics) to demo.nanonets.ai (free to use)

次に、次のコード(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
    }
  ]
}
0
追加された