2017-06-08 18 views
0

私は約300万の画像を持ち、それぞれにヒストグラムを計算する必要があります。今は、私はPythonを使用していますが、それは多くの時間を費やしています。バッチで画像を処理する方法はありますか?私はNVIDIA 1080 Ti GPUカードを持っているので、GPUで処理する方法があれば?画像の計算ヒストグラムをより速く

画像を並行処理するコードやライブラリが見つかりません。

+0

あなたはこれまでにしようとしているので、それは良いかもしれないものを言うのは難しいです何を言っていません。アプリケーションによっては、おそらくnp.histogramの代わりに 'np.bincount'を使うことができます。これは、任意の浮動小数点数や任意の範囲のビニングを実行しないため、はるかに高速です。また、実際のヒストグラム計算がボトルネックであり、I/Oなどではないことを確認しましたか? – user8153

+0

これまでのところ、私の質問で述べたようにforループを使用していました。各画像に対して 'numpy.histogram'を呼び出します。クエリの2番目の部分については、ヒストグラム計算がボトルネックです。私はヒストグラム計算と一緒にいくつかの他の処理をしています。ヒストグラムの部分をコメントアウトすると、コードは正常に実行されます。 –

+0

'np.histogram'はこの特定のタスクにとって不必要に遅いです。私のラップトップでは 'np.bincount'は約5倍高速です。 OpenCVにはヒストグラム機能もあります(私はそれを試していません)。 [Here](http://docs.opencv.org/trunk/d1/db7/tutorial_py_histogram_begins.html)は、3つの方法すべての例です。 – user8153

答えて

0

Pythonは、あなたが使用できる最も遅い生産準備言語の1つです。

コードを投稿していないので、私は一般的な提案しかできません。

  • など、ご希望の機能を持つpypyまたはCPythonの
  • 使用既存のソフトウェアとして、パイソンのコンパイルされたバージョンを使用してください:彼らは下に実用性の順に記載されています。フリーソフトウェアをオンラインで見つけることには何も問題ありません。
  • あなたは、このような重い計算タスクのためのパッケージをマルチプロセッシングしようとしたことがあり、そのような錆、C++、C#、またはJavaの
0

としてより高速な言語を使用して計算

  • をスキップし、より効率的な(またはおそらく非可逆)アルゴリズムを使用します?私はあなたがそれらの画像が処理される順序には気にしないと思いますので。

    サンプルの使用は次のようになります。

    from multiprocessing import Pool 
    
    pool = Pool() 
    results = pool.map(create_histogram, images) 
    
  • +0

    このアプローチは有望です。しかし、ヒストグラム計算以外の画像処理を行っています。私はボトルネックと思われるように上記の方法でヒストグラム部分だけを実行したい。実行が 'Pool'に入るとすぐに、さまざまなスレッドでコード全体が実行されるようです。 –

    関連する問題