動画コーデックの画質の比較

ffmpegを使用しPSNRの値を比較しました。

 

環境

Windows 10 / Core i7 9750H / Geforce GTX 1660 Ti

 

 エンコードオプションは以下のように設定しました。

ffmpeg -y -i input.mp4 -c:v libx264 -b:v 100k out_libx264.mp4
ffmpeg -y -i input.mp4 -c:v libx265 -b:v 100k out_libx265.mp4
ffmpeg -y -i input.mp4 -c:v vp9 -b:v 100k out_vp9.mp4
ffmpeg -y -i input.mp4 -c:v h264_nvenc -b:v 100k out_h264_nvenc.mp4
ffmpeg -y -i input.mp4 -c:v hevc_nvenc -b:v 100k out_hevc_nvenc.mp4

PSNRは以下の様にして計測しました。

ffmpeg -i input -i out_.mp4 -lavfi psnr="stats_file=psnr.log" -f null  -

元の動画は1920 x 1080 29.97Pで同一です。

コーデック FPS 100k 300k 500k 1m 3m 5m 10m
libx264 42~102 28.83 31.50 33.84 37.19 41.60 43.29 45.14
libx265 12~52 32.93 37.53 39.35 41.60 44.31 45.29 46.46
vp9 4.2~11 34.83 37.85 39.39 41.32 43.68 44.67 45.97
h264_nvenc 173~175 31.22 31.29 32.71 36.85 40.89 42.67 44.87
hevc_nvenc 124~126 34.93 35.07 37.67 39.91 42.95 44.21 45.80

f:id:taku-woohar:20190906002620p:plain

PSNR

PSNR上ではhevcはh.264の2倍ほどの圧縮率を誇る様です。

今回Geforceが使用できた為GPUエンコードを使用しましたが、速度は圧倒的です。

大きな問題さえなければ積極的に使っていきたいです。

 

oidn - ノイズ削除ライブラリを試す

ノイズを削除するライブラリを使用してみたので、さらっと紹介します。

Intel® Open Image Denoise

ビルドします。

git clone --recursive https://github.com/OpenImageDenoise/oidn.git
mkdir oidn/build
cd oidn/build
cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang ..
ccmake .. # cを押してgで完了
make

ビルドが完了したらサンプルを実行します。 レイトレーシングによって生成した画像を使用してみます。

f:id:taku-woohar:20190902211610j:plain
ノイズまみれの画像

この画像をpfm形式(リトルエンディアン)に変換します。 変換にはImageMagickを使用します。

convert image.png -endian lsb PFM:image.pfm

この画像に対して処理をかけてみます。

./denoise -ldr image.pfm  -o output.pfm

f:id:taku-woohar:20190902211840j:plain
デノイズ後

目に見えるノイズは消えています。ただし解像度は落ちています。 色再現性もだいぶ良い感じです。

レイトレーシングとの相性がだいぶ良さそうなので、後処理に使えそうです。

Chainer 6.3.0 リリース

v6.3.0

https://github.com/chainer/chainer/releases/tag/v6.3.0

 

修正点

  • スナップショットの自動管理機能
  • FP16を使用したときにオーバーフローする問題を修正
  • F.average をバックエンド並みの精度に
  • 真偽値評価時のtype_checkのエラーメッセージの修正
  • type_checkメッセージ内のモジュール修正
  • NumPy1.17 F.clipの修正

Tensorflowのベンチマークを試してみる その2

新しくノートPCを購入したので、再度TensorFlowベンチマークを試してみようと思います。

環境

OS:Windows10

CPU: Core i7 9750H

GPU: Geforce GTX1660 Ti

こちらのページを参考にTensorflowをインストールしました。

CUDAのバージョンは10.1ではなく10.0を使用しています。

https://qiita.com/milkchocolate/items/cdedd61a64862a65b84a

 

Alexnet

python tf_cnn_benchmarks.py --batch_size=512 --model=alexnet --data_format=NHWC

2019-08-15 18:18:48.333229: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties:
name: GeForce GTX 1660 Ti major: 7 minor: 5 memoryClockRate(GHz): 1.59
pciBusID: 0000:01:00.0
2019-08-15 18:18:48.338750: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2019-08-15 18:18:48.344278: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0
2019-08-15 18:18:48.349214: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-08-15 18:18:48.353082: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187] 0
2019-08-15 18:18:48.357386: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0: N
2019-08-15 18:18:48.360002: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 4637 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1660 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
I0815 18:18:48.579124 18148 session_manager.py:500] Running local_init_op.
I0815 18:18:48.595082 18148 session_manager.py:502] Done running local_init_op.
Running warm up
2019-08-15 18:18:54.839782: W tensorflow/core/common_runtime/bfc_allocator.cc:237] Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.19GiB with freed_by_count=0. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available.
2019-08-15 18:18:54.847488: W tensorflow/core/common_runtime/bfc_allocator.cc:237] Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.19GiB with freed_by_count=0. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available.
Done warm up
Step Img/sec total_loss
1 images/sec: 1475.1 +/- 0.0 (jitter = 0.0) 7.397
10 images/sec: 1471.6 +/- 0.7 (jitter = 0.2) 7.396
20 images/sec: 1470.3 +/- 0.6 (jitter = 0.2) 7.397
30 images/sec: 1469.7 +/- 0.5 (jitter = 3.0) 7.397
40 images/sec: 1469.0 +/- 0.5 (jitter = 4.0) 7.397
50 images/sec: 1468.9 +/- 0.4 (jitter = 3.3) 7.397
60 images/sec: 1468.8 +/- 0.4 (jitter = 4.2) 7.397
70 images/sec: 1468.6 +/- 0.3 (jitter = 2.7) 7.397
80 images/sec: 1468.3 +/- 0.3 (jitter = 2.7) 7.397
90 images/sec: 1468.0 +/- 0.3 (jitter = 2.7) 7.397
100 images/sec: 1467.8 +/- 0.3 (jitter = 1.7) 7.397
----------------------------------------------------------------
total images/sec: 1467.68
----------------------------------------------------------------

前回計測した時の30倍ほどの速度です

 

ResNet50

ResNet50で試します。

python tf_cnn_benchmarks.py --batch_size=32 --model=resnet50 --data_format=NHWC

 

BatchSize 32 : total images/sec: 116.25

BatchSize 64 : Error

 

VGG16

VGG16で試します。

python tf_cnn_benchmarks.py --batch_size=32 --model=vgg16 --data_format=NHWC

 

BatchSize 32 : total images/sec: 71.01

BatchSize 64 : total images/sec: 46.59

BatchSize 128 : Error

 

ResNet152

ResNet152で試します。

python tf_cnn_benchmarks.py --batch_size=16 --model=resnet152 --data_format=NHWC

 

BatchSize 16 : total images/sec: 43.57

BatchSize 24 : total images/sec: 44.48

BatchSize 32 : Error

 

 

Inception4

Inception4で試します。

 

python tf_cnn_benchmarks.py --batch_size=16 --model=inception4 --data_format=NHWC

 

BatchSize 16 : total images/sec: 34.55

BatchSize 24 : total images/sec: 36.14

BatchSize 32 : Error

 

以上です。

確率的プログラミング言語をいくつか紹介

確率的プログラミング言語とは確率的決定モデルを言語上から扱いやすくしたものです。

Python系だと

bayesloop

PyMC4

pomegranate

PyLFPPL Compiler

Edward

TensorFlow Probability

Pyro

Julia系だと

MIT-Picture

Turing.jl

Gen

それ以外だと  

Anglican

Infer.NET

などがあります。