• 代码解读 Aittala_ECCV18_Burst Image Deblurring Using Permutation Invariant Convolutional Neural Networks


    此文档用于记录Aittala_ECCV18 的代码学习过程,Tensorflow implement:http://people.csail.mit.edu/miika/eccv18_deblur/ Pytorch implement:https://github.com/FrederikWarburg/Burst-Image-Deblurring

    1. Pytorch下作者没有提供训练的参数,因此需要我们重新训练,其中涉及数据集下载,合成模糊和配准。这个留给以后做
    2. Tensorflow 下作者训练了网络,提供了配准的数据,因此先学习tensorflow下的代码
    3. 学习路径:先将代码的环境配置好,配置好数据路径等
    4. 环境介绍:pychram3, python 3.7.4(python -V), Tensorflow 2.0.0(python→import tensorflow as tf→ tf.__version__), No GPU,i5-3470 CPU,8GB内存
    5. train.py
      1. parser = argparse.ArgumentParser() 使用argparse之前要使用ArgumentParser对象创建解析器;而argparse可以让人轻松编写用户友好的命令行接口
      2. parser.add_argument('--bs', metavar='bs', type=int, default=8) 调用add_argument方法给parser添加程序参数,这个代码用来指定ArgumentParser对象如何获取命令行字符串并将其转换成对象,这些信息在parse_args()调用时被使用和存储
      3.  Bugs:
        • bug1: 提示没有tensoflow。已经安装了tensorflow却在pycharm中输入import tensorflow as tf时显示没有tensorflow。
        • 解决:首先安装tensoflow,网上有手把手教程。其次,在pycharm下更改解释器:文件→设置→项目→project interpreter选择Anaconda下安装的python:D:Anaconda3Installpython.exe。安装1.13.1转至bug5
        • bug2:找不到已经定义的函数。路径设置问题
        • 解决:文件→设置→项目→Project Structure,将源码所在的文件夹“network”选成蓝色源码
        • bug3:  from scipy.misc import imsave 找不到 imsave 方法。
        • 解决:imsave已经在SciPy 1.2.0中移除了,而是采用imageio.imwrite。所以需要安装老版SciPy, "pip install -U scipy==1.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple"
        • bug4:运行 'train_multi' 出错: 无法启动进程,工作目录 'E:ppcdpydeblur_source_coarsesource etwork' 不存在
        • 解决:修改工作目录:run(运行)→configuration(编辑配置)→script path修改到源码所在的文件夹
        • bug5:tensoflow.contrib没有定义
        • 解决:tensorflow 2.x没有tensoflow.contrib模块了,可以使用tf_upgrade_v2工具对1.x的tensoflow升级到2.x,但是会出现不兼容的问题(没有尝试)。决定卸载tensorflow 2.x并安装tensorflow1.13.1:
        • pip uninstall tensorflow   如果已经安装了tensorflow要先卸载)
        • CPU版本:pip install tensorflow==1.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple(安装tensorflow1.13.1)
        • GPU版本:pip install tensorflow-gpu==1.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple(安装tensorflow1.13.1)
        • 安装了ensorflow以后,出现numpy一些列问题,考虑到是版本不兼容的问题,于是:
        • 卸载原来的numpy: pip uninstall numpy
        • 安装1.16版本的numpy pip install numpy==1.16
        • bug6:  Pycharm代码自动补全和Pycharm调试程序使用debug功能:
        • 自动补全:首先关闭省电模式,一般默认打开;然后使用热键:tab 键可以实现main函数的补全,Alt+/ 可以实现函数和变量的补全;
        • 先在期望加入断点的地方加上断点:在目标代码行左侧单击,出现红色圆点,然后选择运行的脚本并点击甲壳虫(debug),再Debug→console→show python promote,这个选项卡可能因为空间不足被隐藏,所以选择选择>>并单击中间的按钮最后就可以输入在debug过程中输入代码开始调试。
        • bug7: No module named "datasets" 
        • 将cifar-10dataset转换成TFRecord格式。这份tensorflow的源码,训练好的网络在测试时仍需要原始训练集(这一点令我很迷惑,已经发邮件给作者了,还没回2020-1-6)。所以试图自己将cifar-10数据集转换成TFRecord格式。
        • 转换方法Windows下:这里下载model:https://codeload.github.com/tensorflow/models/zip/master,解压以后,在 models-master esearchslim目录下找到“download_and_convert_data.py”文件运行。另外因为该程序用到了dataset模块的方法。应该先将该目录下的“datasets”文件夹放入python的安装目录的第三方包目录下。方法:cmd进入python:其中site-packages就是第三方包目录,将slim下的datasets复制进site-packages下即可
          • import sys
          • sys.path
          • 有人建议说使用pip3 install datasets 或者 pip install datasets,这个我没有尝试
        • bug8: 完成上述格式转换以后,复制TFRecord格式的路径,赋值给“--data_dir”(line 31 in 'train_multi.py')。如果忽略这一步会导致data_dir返回none,造成后面的路径错误:
    parser.add_argument('-i', '--data_dir', type=str,default=os.environ.get('ML_DATA_PATH', 'E:/ppcdpy/Aittala/cifar-10-batches-py'(TFRecord格式文件所在位置)), help='Location for the dataset')

    注意:Windows下的文件分割符“”与python下的转义字符""相同,有3种方法解决:http://withwsf.github.io/2015/12/30/Python%E5%9C%A8Windows%E7%8E%AF%E5%A2%83%E4%B8%8B%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E9%97%AE%E9%A2%98%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/

    以上调试结束,基本就可以运行了.

    6. Numpy广播:

    问题:3维数组怎么和4维数值运算呢?这时候便用到了广播:它用来处理不同维度数组之间的运算。运算规则:

    • 数组维度的尾部对齐
    • 没有维度的位置忽略
    • 当前维度的值相等或者有一个1
    • 从后向前比较维度大小,选其最大值作为输出

    下面用例子介绍:

    import numpy as np
    a = np.random.randn(1,2,3,4)    # 1 x 2 x 3 x 4        
    b = np.random.randn(1,3,4)      #     1 x 3 x 4
    c = a+b                         #  1 x 2 x 3 x 4
    
    但是
    
    a = np. random.randn(1,2,3,4)    # 1 x 2 x 3 x 4
    b = np.random.randn(2,3,3)       #     2 x 3 x 3
    c = a+b                          # ValueError
    

    7. 完成了上面的调试后,tensorflow基本可以完成在train.py下正常运行,使用合适的相机设置可以完成很好的重构。

      验证算法实用性:

    相机运动的真实拍摄场景:

    手持相机

    ISO=100(追求成像噪点少)

    f/10(光圈适中,增大进光量,背景不虚化)

    曝光时间0.8s(提高亮度,时间较长,导致手抖模糊)

    焦距55mm, 拍摄远距离物体(期望呈现细节)

    分辨率:2087 x 1633

    下图中蓝色序号的图片表示连续拍摄的第 张图像,红色序号的图片表示使用前 i 张所有的图像去模糊得到的结果。


    ECCV18:Burst image deblurring using permutation invariant convolutional neural network : Pytorch implement:https://github.com/FrederikWarburg/Burst-Image-Deblurring

    1.  下载ImageNet2012数据集,https://www.52cv.net/?p=878
    2.  解析ImageNet2012数据集成图片格式:https://xungejiang.com/2019/07/26/pytorch-imagenet/
    3. 由于上述代码是在Linux环境下运行的,而我是windows系统,所以下载CygWin: https://www.cygwin.com/,这是一款在windows下能够运行Linux命令的软件
    4. 由于第2行的代码使用了wget命令,所以在安装CygWin时,依据教程安装wget : https://www.cnblogs.com/ae6623/p/5157625.html

     

     

     

     

     

     

            

  • 相关阅读:
    samba中的pdbedit用法
    服务器批量管理工具【转载】
    Linux网卡bounding详解
    Windows下为MySQL做定时备份
    对于新安装的MySQL如何提升MySQL的安全级别
    为Apache动态增加模块
    DSO动态加载PHP模块到Apache服务器
    系统网页打不开,排查故障步骤
    Low overhead memory space management
    pip 升级 Appium-Python-Client
  • 原文地址:https://www.cnblogs.com/LuckBelongsToStrugglingMan/p/12148071.html
Copyright © 2020-2023  润新知