再配布 > NL-Means filter


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

NL-Means filter




以下、このページにあるのは古いデータだけです。最新版は本家サイトよりダウンロードしてください。

    • 要 d3dx9_39.dll(ver0.12) d3dx9_39.zip
      勝手に置いといていいのかな…。 削除しました


  • 解凍に関して
+...
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)
名前:
コメント:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。