这篇文章本身比较简单但是是用CNN训练出来的LUT的开山之作所以还是很有意义。1. 优缺点优点1第一篇用结合CNN转成LUT的方式来SR2运行速度和传统的Bi-Cubic同一个level但是PSNR高了1db缺点1结果会有些artifact尤其是边缘区域2感受野不够大, 3x3 RF3 Table的size还是偏大4x的SR size17*17*17*17*4*4/1024/10241.27MB4 model训练好后直接转成Table这个table可能不是最优的2.训练1 6层网络1stlayer 2x2卷积后面都是1x1卷积最后一层是pixel shuffle2 激活函数RELU3每层filter个数为644训练集DIV2K dataset --- including 800 2K size images5训练次数20w6Learning Rate: 0.000017测试集Set5Set14BSDS100Brban100Manga1093. 网络架构4. 转成Table1 8 bits间隔为16一共有17个节点0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 2552 4D意思就是4个方向的节点都遍历一遍即遍历(0,0,0,0), (0, 0, 0, 16), (0,0,0,32) …… (255,255,255,255)共17*17*17*1783521种可能性将每种组合送到训练好的网络得到输出值如果是4x SR那么应该有16个值组合成4x4输出5. Apply LUT1 根据当前点和周围16个点的位置关系选择其中5个点加权平均这个跟3DLUT理解上是一样的3DLUT是三维的在周围8个点找四个点做加权平均权重由当前点和周围点的距离计算出来。以3DLUT为例2其实这里还有另外一种插值方式以3DLUT来说三线性插值即用8个点在各发各个方向上分别插值4D的话就是用16个点在四个方向上插值这种方式cost比较大实际效果其实也没什么优势3 3DLUT用四个点插值其实就是四面体插值四面体插值是通过把正方形网格进行分割分割为6个四面体输入坐标处于哪个四面体之内就使用这个四面体的4个顶点进行插值计算得出输出结果。图6是一个正方体被分割为6个四面体的示意图。在一个立立方网格上x0表示在x下方一个方格点x1表示在x上方的一个方格点对于y0、y1、z0、z1是同样的意思。xd、yd、zd表示x、y、z在较小相关坐标的差值。根据xd, yd,zd三者之间的大小关系分为6种情况4对于4D来说共有四个距离xd, yd,zd, wd,这四个值比较大小共有24种情况也就是说要分成24种可能性进行插值整个过程和3D的插值本质上是一样的有兴趣的可以自己推导下。6. 客观结果SR-LUT相比传统的Bicubic方法各测试数据集上基本都高1db7. 视觉效果SR-LUT结果虽然边缘比较锐利但是会有些artifacts参考文献Practical Single-Image Super-Resolution Using Look-UpTable, 2021 CVPR