Artifact Reduction Project

本文档简单介绍AR项目及C++ API。

ENCD Project

介绍

ENCD项目主要是用于去除图像或视频由于压缩导致的块效应和振铃效应,项目有python实现部分和C++实现部分,Python主要用于训练生成模型,C++主要是实现Python生成模型的前匮网络和一些数据处理,用于部署。
项目地址:ftp /liulizhou/ENCD
opencv源码地址:ftp /liulizhou/opencv
libtorch库地址:ftp /liulizhou/libtorch
目录结构:

.
├── CMakeLists.txt
├── dataprocess.cpp
├── dataprocess.h
├── encd.cpp
├── encd.h
├── img
│   ├── blockresult.png
│   ├── m_01702.png
│   ├── plant_1000.yuv_90.yuv
│   ├── plant_500.yuv_375.yuv
│   ├── plant_500.yuv_405.yuv
│   ├── plant_500.yuv_45.yuv
│   ├── plant_500.yuv_540.yuv
│   ├── plant_500.yuv_570.yuv
│   ├── plant_500.yuv_690.yuv
│   ├── plant_500.yuv_90.yuv
│   ├── ringingtest.jpg
│   └── ringingtestresult.png
├── latest_scriptnet_G.pth
├── model.pt
├── model.pth
├── netG_trace_final.pth
├── pycvt.cpp
├── README.md
├── real_a_s.bin
├── resnet18.pth
├── test_train.pth
├── test_utils.cpp
├── test_utils.h
├── utils.cpp
├── utils.h
├── v_tensor.bin
├── yuv.cpp
└── yuv.h

目录中使用测试模型:latest_scriptnet_G.pth
目录中yuv文件图像大小:width 1920 height 1080

块效应

block


unblock
unblock

振铃效应

ringing

unringging
unringging

ringingtest


unringingtest
unringingtest

伴随着轻微的模糊效应,原因在于模型使用旧的模型,样本中没有加入高斯模糊对抗样本

工程依赖

  • libtorch
  • opencv

libtorch

libtorch,用于实现python训练生成模型的前匮网络计算,支持CPU和GPU,libtorch库下载,提供动态和静态链接库和头文件,可直接链接到工程中。

opencv

  • opencv source下载如上
  • install
mkdir build && cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_GTK2=ON -D WITH_OPENGL=ON ..

make -j7

make install

编译ENCD工程

工程使用C++11标准,主要依赖opencv和libtorch库,opencv在cmakelist文件中通过find_package自动寻找库安装路径,需要指定libtorch库路径进行编译,命令如下:

cmake -DCMAKE-PREFIX-PATH=/path-to-libtorch ..

命令行使用

编译完成后,生成pycvt可执行文件,可运行程序进行图像或视频质量增强。

  • 处理yuv文件:
./pycvt --model path-to-model --yuvfi path-to-yuv-file --width w --height h
  • 处理图像文件:
./pycvt --model path-to-model --image path-to-image-file
  • 处理bin文件:
./pycvt --model path-to-model --bin path-to-bin-file --width w --height h
  • 处理视频文件:
./pycvt --model path-to-model --video path-to-vide-file

静态库文件使用

编译完成后,会生成动态shencd.so和静态库文件stencd.a,可集成到项目中,主要使用其中对yuv数据进行增强函数,函数定义如下:

@param src: source yuv420 data
@param dst: enhanced output yuv420 data
@param width: src yuv420 data width
@param height: src yuv420 data height
@param model_path: model path for image enhancd
void encd_image_fix(uint8_t* src, uint8_t* dst, int width, int height, string model_path)

性能测试

测试图像例子:

width: 1024
height: 576
model size: 6.2M
model init: 19.71ms
data preprocess: 84.16ms
forward: 16.21ms
vim-using-skill Libtorch中的bug

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×