1

「ムード検出」のプロジェクトに取り組んでいます。

完全な製品を作るための最初のステップとして、画像処理から始めました。Convolution-Neural-Network が最良のアプローチであることをインターネットから学びました。

import cv2
import numpy as np
def sum_cnn(image,x,y):
    x1,y1=np.shape(image)
    temp=image

    for i in range(0,x1-x):
        for j in range(0,y1-y):
            temp1=np.sum(image[i:i+x,j:j+y])/(x*y)
            if temp1 in range(850000,1100000):
                cv2.rectangle(temp, (i, j), (i+20, j+20), (0, 255, 0), 2)
                print "\n"


    return temp


image =cv2.imread('test.jpg')
image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image=np.matrix(image)

temp=sum_cnn(image,95,95)

cv2.imshow('Processed Video', temp)
cv2.imwrite('1.jpg',temp)

print "Done"

上記は私が書いたコードです - 値 (850000,1100000) は、行列の畳み込み範囲の合計の値です (コードが非常に粗雑で申し訳ありません。今朝書き始めました)。

私が求めている質問は、重みを格納するマトリックスを設計または取得する方法です。

1) あらゆる種類のオブジェクト検出 (つまり、「車」と「顔」に異なる値を与える大まかな単層 CNN) に対して 1 つのマトリックスだけで間に合わせることができますか、または "車」と「顔」?

2) 同じオブジェクトの異なるサイズを処理する方法は? インターネットで見つけた解決策の 1 つは、元の画像のサイズを変更し続けることです。より速いアプローチがあるかどうか知りたいですか?

3) 逆伝播において、最適化された重み行列を取得するために与える大まかな条件は何ですか?

4

1 に答える 1

1

まず、ニューラル ネットワークの使用を真剣に計画している場合は、基本から始めることをお勧めします。そのページは、私が言うニューラルネットワークを始めるのに本当に良いです. ニューラル ネットワークの基本を理解したら、フレームワークまたはTheanoのようなものを使用して、CNN の構築を試みることができます。

正直なところ、あなたのコードが何についてのものなのかよくわかりませんが、できる限りあなたの質問に答えようとします.

  1. ここで重み行列について話していると思います。畳み込み層で CNN が行うことは、「特徴の抽出」です。誰もがそう呼んでいます。しかし、それは簡単に定量化できる値ではありません。そのため、必要なフィルター マップ (重み行列は CNN ではフィルター マップと呼ばれます) の数は、ユース ケースによって異なります。そのため、フィルター マップの数または一般的なハイパー パラメーターを調整するために、テスト セットと検証セットを使用して試行錯誤を続ける必要があります。

  2. これは、 Krizhevsky、Sutskever、および Hinton によるクールな論文で、GPU を使用してクレイジーなことを行い、画像を特定のサイズに修正しています。この制限を回避する良い方法を見つけたら教えてください。

  3. 通常やりたいことは、オーバーフィッティングを防ぐことです。これを実現するために研究者が考えた方法や方法は複数あります。いくつか例を挙げると、ドロップアウト、ウェイトを低く保つ、事前トレーニングなどです。

繰り返しますが、指定されたソースから始めることをお勧めします。私自身が完全に理解していないかもしれないいくつかの専門用語について、とりとめなく私が話しているのを聞いている場合よりも、はるかに理解しやすくなります。

敬具、

PS: お気軽に訂正してください

于 2016-02-11T12:35:22.987 に答える