2016-07-01 9 views
1

は現在、私はいくつかのMLアルゴリズムで遊ぶと私はnp.ndarrayにで保存した画像(電車と検証セット)の2セットを持っています。画像はグレースケールで、サイズは28x28です。私は約200000の列車イメージと20000の検証イメージのようなスムーズを持っています。私は私のデータセットが理想的ではないことを知っている: - 各データセットでは、私は同じまたはほぼ同じ画像 を持つことができます -フィルタリング類似イメージ

直感が私に語ったセットの検証と電車の間の重複があるかもしれない電車の中で同一または類似の画像と検証セットは私のMLアルゴリズムのパフォーマンスを損なう可能性があるので、私は自分のデータセットをサニタイズしようと決めました。

md5ハッシュの辞書をインクリメンタルに構築し、md5ハッシュが辞書に存在しない画像だけを新しいndarrayにコピーするなど、ハッシュを使用して同じ画像をハッシュして、簡単にデータセットをサニタイズできます。ハッシュはまだありません。

しかし!私は、他の画像とほぼ同じある別の画像がある場合に、イメージの1つを殺すために方法がわかりません。たとえば、28x28ピクセルのうちの1つだけが異なる値を持つ場合。任意のアイデアどのように画像間の距離の有効なメトリックを思い付く?効果的であれば、ピクセル単位での比較が良いアイデアになるかどうかわからないので、比較的速く動作することが望ましいということも意味します。同様の画像を削除してデータセットを消毒することに本当に良いことがあるかどうかについて誰かが洞察してくれれば便利でしょうか?

+1

あなたは* *知覚的ハッシュをターゲットとするアルゴリズムを使用することができます。それはあなたのケース(非常に小さな画像)には最適ではないかもしれませんが、私は一度[こちら]このようなものをコード化(https://github.com/sschnug/pyVideoHash/blob/master/frame_hash.pyx)は(もあります統計に基づくアプローチは簡単に実装することができます。私はエキスパートではありませんが、私はあなたの考えを好きです(しかし、これは生産性の低いユースケースかもしれませんが、これらの小さな差分は実際にインポートされます)。清掃は私が考える一般化を助けるべきです。 – sascha

+0

@サスカおかげさまで、このアイデアは興味深いようですが、私はそれが少し残酷だと思います。私は本当に似ているものと大きな数の画像をフィルタリングする必要があるので、もっと簡単なアプローチを探したいと思っています。しかし、私はあなたの提案を心に留めておきます:) –

答えて

1

あなたは、あなたが実際にある二つの画像間の大きな違いを取得するように非常に注意する必要がありますしかし

(((a - b)**2).sum(axis=2)**0.5).sum() 

ような何かを行うことによって、二つの画像間のRGB空間での距離の合計を見つけることができます非常によく似た(つまり、どこ

b = numpy.roll(a, 1, axis=0) 

ニューラルネットは、画像間の類似性を決定するための効果的な方法かもしれません!しかし、あなたは、生の画像を使用してシステムを訓練している?@ごとにいくつかの認知スタイルの前処理を行うために、通常は良いですサシャの示唆(これを見たところ、輝度 - >エッジ - > H.O.Gとなった。そして、scikit-画像https://github.com/paddywwoof/Machine-Learning/blob/master/image_processor.py)よりも純粋なnumpyのを使用することが速かったと明らかにあなたが前処理後結果の間の距離のためにテストする必要がありました。

+0

実際には前処理のことは実際にニューラルネットワークの訓練を行うために行われるので...他のニューラルネットワークを訓練するためには、あるニューラルネットワークを訓練してデータを浄化するのは奇妙です:)私が原因あなたが –

+0

@MaximHaytovichを言及したポイントに少し懐疑的ものの、距離測定のアイデアをお寄せいただきありがとうございますが、それを試してみるだろう、私は[((すなわち、あなたが同様に各方向にオフセット一つの画素を行うことができたと:, -1] -b [1:])** 2)などであるが、明らかにそれは(少なくとも)5倍かかるだろう。そして、それは2つのピクセルのオフセット、または同じ画像ではなく、小さな角度で回転されます。 – paddyg