NL-Means filter
以下、このページにあるのは古いデータだけです。最新版は本家サイトよりダウンロードしてください。
- 要 d3dx9_39.dll(ver0.12) d3dx9_39.zip
勝手に置いといていいのかな…。 削除しました
- 要 d3dx9_37.dll(スレ43>>626-628)
+
|
... |
664 :名無しさん@お腹いっぱい。:2008/04/01(火) 03:20:21 ID:qUj1rx1F0
IE7でDL→解凍→解凍した中身の拡張子をzipに変更→また解凍OK
666 :名無しさん@お腹いっぱい。:2008/04/01(火) 03:38:06 ID:l2d7LaKi0
①DLした「nlmeans-0.01.zip」を「nlmeans-0.01.lha」にリネーム
②「nlmeans-0.01.lha」を解凍
③できた「nlmeans-0.01」を「nlmeans-0.01.zip」にリネーム
④「nlmeans-0.01.zip」を解凍
668 :名無しさん@お腹いっぱい。:2008/04/01(火) 03:46:32 ID:l2d7LaKi0
すまん間違えた
×lha
○lzh
670 :名無しさん@お腹いっぱい。:2008/04/01(火) 03:51:22 ID:iwPbx9sf0
WinRARで何も考えずに解凍したんだが…
671 :名無しさん@お腹いっぱい。:2008/04/01(火) 04:04:00 ID:HGtYVCTI0
このサイト、zipファイルでもgzip圧縮して送る設定になってる
で、IEだとgzipを解かずにそのまま保存してしまうようだ
だからIEでDLした場合はまず"~.zip.gz"にリネームするのが正解
|
+
|
... |
649 :名無しさん@お腹いっぱい。:2008/04/01(火) 00:09:26 ID:3LeyuCw20
ATI系での問題だけど、浮動小数テクスチャの問題ではなくて、頂点データの問題みたい
とりあえず頂点を 3DDECLUSAGE_POSITION から D3DDECLUSAGE_POSITIONT にして
データもいじって、頂点シェーダをスルーするようにするとOKみたい
あと、ログに memory(11,88): error X6077: texld/texldb/texldp/dsx/dsy …(略)
みたいなエラーが出るので、tex2D()はtex2Dlod()に置き換える必要があるっぽい
これで手元のRadeon 2600pro(XPsp2 Cat8.3)でも動作するようになって、10倍ぐらい速くなってる
657 :名無しさん@お腹いっぱい。:2008/04/01(火) 02:27:08 ID:3LeyuCw20
>>649だけど、後半のtex2DでのエラーはこちらでコンパイルしたときのDirectX SDKが古かったからっぽい
最新版では、このエラーは出ないみたいなので無視してくれ
729 :名無しさん@お腹いっぱい。:2008/04/02(水) 15:21:15 ID:JsoIWc1p0
グラボ2枚刺の環境だとどーゆー動作になるんだろうな
俺1枚だから関係ないけど
a.複数枚うまく使い分けで爆速
b.どっちか優先
c.選べる
d.暴走
あ、オンボ+1枚と同じと考えれば b.かな?
730 : ◆avitl0QFUE :2008/04/02(水) 16:17:17 ID:wvpKC8ro0
>>729
グラボを複数枚使用した場合、NVIDIA製GPUとATI製GPUのいずれも
フレームを分割してレンダリングするそうですので、
"a"が正しいものと思われます。
自分も複数枚差しの環境を持っていないため実験することができません…。
748 :名無しさん@お腹いっぱい。:2008/04/02(水) 22:33:38 ID:Cr1VZqsj0
RADEON友の会で先ほど知って㌧できますた
>>725
重みを求める際にCPUだとループを分割、GPUだと重みを2回求めているようですが、
これってまとめてはいけないものなんでしょうか?
filterByCPUで言えば、sum += w;の後でvalue += r;しても問題ないように思えます。
751 : ◆avitl0QFUE :2008/04/02(水) 22:49:17 ID:wvpKC8ro0
>>748
鋭い御指摘ありがとうございます。全くもってその通りだと思います。
sum += w;value += r;でループの外でvalue /= sum;ですね。
すぐに修正させていただきます。
756 :名無しさん@お腹いっぱい。:2008/04/02(水) 23:41:36 ID:DdAeT2Er0
GPU使わなきゃこの速度が限界?
なんとか高速化できないもんですかね作者サソ
757 :名無しさん@お腹いっぱい。:2008/04/03(木) 00:04:22 ID:x72Ny7aW0
できないんじゃないかなぁ。
わざわざGPU利用なんて面倒くさいことしてるってことは
それだけCPUでの高速化が難しいってことだろうし。
758 :名無しさん@お腹いっぱい。:2008/04/03(木) 00:17:59 ID:mfAIaCq50
上でavitl0QFUE氏も言われてるけど
GPUの強みは超並列性だしね
CPUもICP向上とマルチコア化でがんばってるけど
尖った部位に対してはGPUに完敗なんだよね
1個のシェーダーユニットがPenIIIの1GHz相当らしいんだけど
今のCore2DuoとPenIIIを比較すると性能差は…10-15倍で
まぁそれだけでもかなりCore2Duoは速くなったと言えるんだけど
それでも128個のPenIIIには適わないと言うかなんと言うか
763 :名無しさん@お腹いっぱい。:2008/04/03(木) 01:01:46 ID:GnQB4GDk0
CPUは1個ないし小数の延々と続く長くて面倒くさい計算をこなすのが得意、
GPUは単純な計算を同時に大量にこなすのが得意。
GPUでよく言うシェーダーってのが一つ一つ独立したCPUみたいなもんで
それが最近のハイエンドグラボにはとか256とか320基くらいついてる。
だからノイズ除去やリサイズといったピクセル単位で行うようなフィルタは
GPUによって著しい高速化が望める。とはいえシェーダー1個だけでは
今のCPUに比べたら大した性能ではない(上でおっしゃってるPenIII1GHzとか)
だからフレーム単位で処理しなくてはいけないようなフィルタにはGPU処理は意味がない。
765 :名無しさん@お腹いっぱい。:2008/04/03(木) 01:21:44 ID:JL/uM6UO0
>>763
http://pc.watch.impress.co.jp/docs/2007/0326/kaigai346.htm
766 :名無しさん@お腹いっぱい。:2008/04/03(木) 01:57:19 ID:tlKLcxH30
>>751
合っててほっとしました。
見よう見まねでBrook+で実装してみましたが、範囲16 分散50 解像度1024x768、
HD3850 256MBで1フレーム1.4秒でした。
正確な計測が出来ないのでストップウォッチ計測ですが、GLSLと比べて相当長い(2倍から3倍程度)です。
どうやらピクセルシェーダで実装できないような複雑な処理以外ではいらない子のようですorz
生成されたコードを見るとBrook+のコンパイラがヘタレなんじゃないかとも思うので後で直接CALで書いてやってみます。
# GeForce9600GTならCUDAが使えるので気になるところ
767 :名無しさん@お腹いっぱい。:2008/04/03(木) 02:00:20 ID:uU/SEQKH0
CUDAならサンプルにそのまま同じのがあるようだが
768 :名無しさん@お腹いっぱい。:2008/04/03(木) 02:36:55 ID:tlKLcxH30
>>767
そのまま同じのというのはBrook+のNLM_DenoiseとCUDAのimageDenoising_nlm2_kernel.cuのことでしょうか?
NLM_DenoiseはNLM2を移植してるみたいですが、何故か2パスに分けて処理していて
別物に化けてしまってるような気がしてならないんですがどうなんでしょう。
NLM_Denoiseは◆avitl0QFUE氏のと実装が違ったのであまり見てません。
769 :名無しさん@お腹いっぱい。:2008/04/03(木) 02:57:28 ID:uU/SEQKH0
付属しているpdfを読む限り、NLM2はもとのNLMの処理をかなり省略して高速化したもの、らしい。
NLMの方が◆avitl0QFUE氏の実装に近いんだけど、近傍ピクセルの範囲が可変なのと、
ピクセルデータの距離をチャンネル個別か3チャンネルすべてから求めるか、が違っているように見える。
試しにBrook+もDLしてみたけど、サンプル内にNLM2がそのままあるようですね。
772 :名無しさん@お腹いっぱい。:2008/04/03(木) 10:48:34 ID:CLpm/YF10
>>769
そういうことでしたか。
CUDAの読み方が良くわからなかったのでソースをあまり理解できてませんでした。
しかもPDFがあることに気づかなかったorz
797 :名無しさん@お腹いっぱい。:2008/04/03(木) 23:31:57 ID:CLpm/YF10
filterByCPUをSSE2でベクトル化
範囲3 分散50 1024x786で34.157秒 -> 22.812秒
3倍はもとより2倍にも届かないorz
807 :名無しさん@お腹いっぱい。:2008/04/04(金) 05:23:21 ID:/cfJ/uKV0
ググって調べたのですが情報が少なかったので質問させてください。
NL-Meansは時間軸のフィルタでよろしいのでしょうか?
809 :名無しさん@お腹いっぱい。:2008/04/04(金) 09:29:31 ID:dJ09Z79w0
>>797
CPUによっても随分違うよ。
Pen4は凄い効いたけどCore2Duoは余り伸びないとか。
多分SSE2化してない状態での処理能力が高いってことだけど。
unsharpMTなんか2倍にもならなかったもの。
811 :名無しさん@お腹いっぱい。:2008/04/04(金) 10:23:01 ID:edq2yX560
>>807
時間軸は一切関係ないみたいです。
移動平均フィルタの重みの決め方が特殊な代物というかなんというか。
Wikipediaによるとそれは移動平均とは言わないらしいですが。
注目点とその周囲(設定ダイアログの「範囲」)の参照点の9近傍のSSD(Sum of Squared Difference)を取っ て、
exp(-SSD/h^2)を重みとして用いて平均を取るのが◆avitl0QFUEの実装です。( h = 10^(「分散」/22) )
NVIDIAの実装だと注目点と参照点の距離を範囲の面積で正規化したものをexpの引数に加えていたり、
9近傍ではなく49近傍だったりするようです。
>>809
コンパイラの吐いたコードを見てみたら毎回メモリに書き戻す酷いコードでしたorz
VC8では組み込み関数はあまりよろしくないようです。
インラインアセンブラでやってみます。
870 :名無しさん@お腹いっぱい。:2008/04/05(土) 00:06:48 ID:Bpvdt13/0
filterByCPUをSSE2でベクトル化続編
範囲3 分散50 1024x786で34.157秒 -> 22.812秒 -> 17.262秒
組み込み関数で書いた場合の注意点がわかったのでちょっと見直し。大体2倍達成。
インラインアセンブラ使ってカチカチに詰めれば13秒くらいまでいけるかな。
まぁみんなGPU使ってるよねorz
871 :名無しさん@お腹いっぱい。:2008/04/05(土) 00:09:40 ID:G6NOAvDG0
CPU側の処理を最適化できたなら
その成果は素晴らしいフィードバックになると思うぞ
872 :名無しさん@お腹いっぱい。:2008/04/05(土) 00:14:32 ID:yGreZDhq0
>>871
もうちょっと自慢できるくらい速くなったら◆avitl0QFUE氏に投げてみるつもりです。
そういや>>811で「氏」が抜けてしまってたorzごめんなさい
873 :名無しさん@お腹いっぱい。:2008/04/05(土) 00:18:05 ID:s5V3zdcn0
CPUルーチンが最適化してけばGPUと並列処理てのも出来そうだな。
876 :名無しさん@お腹いっぱい。:2008/04/05(土) 00:38:25 ID:yGreZDhq0
>>873
今のところ速度が違いすぎて足引っ張りますよ。
もっとCPU側に分があればこういうのみたいに出来るんでしょうけれども。
http://aaa.jspeed.jp/~ohshima/cgi-bin/fswiki/wiki.cgi?page=GPUPC%A5%D7%A5%ED%A5%B8%A5%A7%A5%AF%A5%C8FD%A4%CB%A4%C4%A4%A4%A4%C6
本家のGPUでの速度が気になって使ってみたらCPUでも11秒で終了したんで
首を捻りつつコンパイルオプション変えてみました。
CPU版 11.124秒
SSE2版 5.796秒
余計なオプション指定しなきゃよかったorz
いずれにせよ約2倍は変わらないのでインラインアセンブラに手を出します。
881 :名無しさん@お腹いっぱい。:2008/04/05(土) 03:45:07 ID:5I6j+jUt0
>>870
流石に吐き出した後のをきちんと見直してないから同じような問題あるかも。
良かったら注意点を教えてもらえると嬉しかったり。
(動的アセンブラなんぞに手を出す前にアセンブラ読み直せと怒られそうだ)
901 :名無しさん@お腹いっぱい。:2008/04/05(土) 13:34:13 ID:yGreZDhq0
よーしパパ日記レスしちゃうぞー
filterByCPUをSSE2でベクトル化続続編
範囲3 分散50 1024x786で11.124秒 -> 5.796秒 -> 4.563秒(4.515秒)
指数関数のベクトル化。精度を犠牲にすればカッコ内までいけました。
>>881
S式のごとくネストして書かないとメモリへの書き戻しだらけになりました。
const __m128等に代入しても最適化してくれないこともありました。
VC8は結果をXMMレジスタからすぐに追い出したがる傾向があるようです。
912 :名無しさん@お腹いっぱい。:2008/04/05(土) 19:30:15 ID:yGreZDhq0
また又filterByCPUをSSE2でベクトル化
範囲3 分散50 1024x786で11.124秒 -> 5.796秒 -> 4.563秒(4.515秒) -> 3.047秒(2.89秒)
インラインアセンブラ使ってないのにここまできちゃった・・・これ以上速くできる気がしないorz
コンパイラさん馬鹿にしてごめんなさい
>>881
>>901で書いたことはちょっと嘘でした。
時々ボケますがconstつければ基本的には綺麗なコードを吐いてくれます。
ttp://www.uploda.net/cgi/uploader4/index.php?dlpas_id=0000029447.udn
「AviUtl」
913 :名無しさん@お腹いっぱい。:2008/04/05(土) 19:36:38 ID:yGreZDhq0
連レススマソ。一部消し忘れ修正
ttp://ud.gs/40gwe
927 :名無しさん@お腹いっぱい。:2008/04/05(土) 23:08:46 ID:5I6j+jUt0
>>912
有難うございます。
昔の癖もあってコーディング方針に違いがありそうですが参考になりました。
一応ピンポイントで吐いたの読んでみた所大丈夫そうでした。
逆にxmmに格納する段が少々不可思議でしたけど。
◆avitl0QFUE 2008-04-06 (日) 00:42:05
>>912様
SSE2版の開発御疲れ様です。そしてありがとうございます。
filterBySSE2をこちらのコードに統合してもよろしいでしょうか?
また、その際に著作権表記はいかがいたしましょうか?
965 :912:2008/04/06(日) 11:41:42 ID:mJD0I+GO0
>>◆avitl0QFUE氏
統合は願ったり叶ったりなんですが、著作権表記が難しくてよくわかりません。
本当は煮るなり焼くなり好きにしてくださいと言いたい所なんですが、そもそも>>913が
Apache License 2.0の派生物なのに、ファイル先頭におまじないをコピペしてなかったり
LICENSE-2.0もNOTICEもいれずに配布しちゃったからライセンス違反になってますよね。
一度Apache License 2.0に添って体裁を整えてから再アップした方がいいんでしょうか?
985 :名無しさん@お腹いっぱい。:2008/04/06(日) 14:45:12 ID:b/RHz51y0
二番煎じながら、NLMフィルタのSSE2化に挑戦してみました
ttp://uproda.2ch-library.com/src/lib019482.zip.shtml
が、やっぱりGPUに勝てそうにないので、これ以上やる気は出ないです
ところで、Ver0.05での変更点
> GPU→CPUの転送方法を若干変更した
というのが気になります。これで速度は向上しました? >>◆avitl0QFUE氏
◆avitl0QFUE 2008-04-06 (日) 15:41:22
>>912様
確かにライセンスに違反していますね…。
体裁を整えてからのアップロードをお願いできますでしょうか?
再アップロードが完了次第統合させていただきます。
>>985様
ビデオメモリの節約を行いました。
速度は特に変化しませんでした。
(以下、スレ44)
20 :名無しさん@お腹いっぱい。:2008/04/06(日) 22:57:36 ID:mJD0I+GO0
>>◆avitl0QFUE氏
前スレ985氏のがとても速かったのでもうちょっと工夫した上でアップしようと思います。
35 :名無しさん@お腹いっぱい。:2008/04/07(月) 10:01:23 ID:Xq4utgrY0
新・filterByCPUをSSE2でベクトル化
範囲3 分散50 1024x786で11.124秒 -> 5.796秒 -> 4.563秒(4.515秒) -> 3.047秒(2.89秒) -> 0.922秒(0.735秒)
前スレ985氏の実装を参考にしてみました。
55 :名無しさん@お腹いっぱい。:2008/04/07(月) 17:35:31 ID:A5grIjQf0
>>35
そのフィルターをいただくことはできないでしょうか?
NL-Means filterだと範囲1 分散60とかできれいになるのですが、他のフィルタあわせて4時間とかのエンコになります。
時間がかかりすぎてもあれなので、できれば35さんのフィルターも試してみたいのです。
まぁVGA買い換えれば、NL-Means filterの方がいいんだろうけど・・・
61 :名無しさん@お腹いっぱい。:2008/04/07(月) 23:41:31 ID:Xq4utgrY0
ニュー・filterByCPUをSSE2でベクトル化
範囲3 分散50 1024x786で11.124秒 -> 5.796秒 -> 4.563秒(4.515秒) -> 3.047秒(2.89秒) -> 0.922秒(0.735秒) -> 0.797秒(0.672秒)
Brook+で実装した速度に追いつきそう・・・
一応次で最終版にして◆avitl0QFUE氏に渡します。多分明後日くらいまでに。
>>55
ということで、もう少し待ってください。
2点ほど改善点が思いついているので。
64 :名無しさん@お腹いっぱい。:2008/04/08(火) 09:34:06 ID:iX+gZ6XA0
NL使ってるときにGPUがどれぐらい動いてるのか知りたいんだけど
CPUメーターみたいなソフト知らない?
GPU用のさ。
65 :名無しさん@お腹いっぱい。:2008/04/08(火) 09:40:05 ID:bUqkhlI/0
Riva Tuner
66 :名無しさん@お腹いっぱい。:2008/04/08(火) 09:56:52 ID:68VaT2s/0
>65
温度くらいしかわからないんじゃ?
67 :名無しさん@お腹いっぱい。:2008/04/08(火) 10:08:00 ID:bUqkhlI/0
ttp://www.imgup.org/iup589623.png.html
167 :名無しさん@お腹いっぱい。:2008/04/11(金) 00:29:35 ID:gFXglMzr0
NL-Means使用でGPUがどれぐらい頑張ってるのかパーセント表示で
見てみたいんだけど、CPUメーターのようなGPUメーターソフトありませんか?
168 :名無しさん@お腹いっぱい。:2008/04/11(金) 00:31:55 ID:tIA3O29K0
RADEONのHDシリーズならCCCのGPU Activityから使用率が見れる
169 :名無しさん@お腹いっぱい。:2008/04/11(金) 01:56:35 ID:YUp/gufA0
>>65-
206 :名無しさん@お腹いっぱい。:2008/04/12(土) 00:44:44 ID:R+adG0GpO
filterByCpuをSSE2でベクトル化予告編
気がつけば期日を過ぎてましたorz
0.06に合わせてクラス作ったり時間範囲対応させたりしていたら
バグが出たり書き込み規制に巻き込まれたりと遅れております。
せばいいだろ
242 :名無しさん@お腹いっぱい。:2008/04/13(日) 00:40:40 ID:fm4mEKK8O
痛快・filterByCPUをSSE2でベクトル化
範囲3 分散50 1024x786で11.124秒 -> 5.796秒 -> 4.563秒(4.515秒) -> 3.047秒(2.89秒) -> 0.922秒(0.735秒) -> 0.797秒(0.672秒) -> 0.75秒(0.609秒)
get_ycp_filtering_cache_exの領域に7ピクセル以上の余裕が存在するのかわからなかったんですがまぁ気にせずに。
どこどこを読み込み中にアクセス違反が起きましたとか言われたら少し変えないといけません。
ttp://ud.gs/40h5r
243 :名無しさん@お腹いっぱい。:2008/04/13(日) 00:41:55 ID:fm4mEKK8O
パス書き忘れ
AviUtl
271 :名無しさん@お腹いっぱい。:2008/04/13(日) 17:09:19 ID:fm4mEKK8O
バグ直しました。ご迷惑をおかけしました。
ttp://ud.gs/40h6d
|
- グラボなんて意識したこと無いぜ!な自分は、CPUでの高速化にwktk -- 41991 (2008-04-06 19:34:35)
- d3dx9_??.dll は単体じゃ配布できません。MSのライセンス違反になります。ふつーに最新版のランタイムをインストールした方がいいと思う -- 名無しさん (2009-05-12 07:02:43)
- ご指摘ありがとうございます。ファイルは削除致しました。 -- 41991 (2009-06-26 03:50:00)
- 特定の環境では計算モード3で使用するとフリーズすることがわかりました。どなたか対処法を知っている方はいませんか? -- asdf (2010-06-07 00:10:23)
最終更新:2010年06月07日 00:10