复现Location-aware-SIRR

本文详细描述了如何复现《Location-awareSingleImageReflectionRemoval》论文中的图像去反光算法,包括所需库的安装、预训练权重的下载,以及在Windows环境下遇到的PIL和多进程错误的解决过程。
摘要由CSDN通过智能技术生成

一、论文与代码

最近想复现图像去反光问题,看了一篇文章,论文地址↓论文Location-Aware Single Image Reflection Removal (thecvf.com)icon-default.png?t=N7T8https://openaccess.thecvf.com/content/ICCV2021/papers/Dong_Location-Aware_Single_Image_Reflection_Removal_ICCV_2021_paper.pdf其中提供了相关代码,下载地址↓

GitHub - zdlarr/Location-aware-SIRR: Code for the paper "Location-aware Single Image Reflection Removal"icon-default.png?t=N7T8https://github.com/zdlarr/Location-aware-SIRR?tab=readme-ov-file

二、运行环境

官方提示运行环境:

其中,由于电脑配置有限,我配置的环境为:

Windows10python3.7.3pytorch1.2.0(CPU版)

三、操作步骤与问题解决

接下来就是按照步骤操作了:

1、相关库安装:numpy, tqdm, Pillow, dominate, scikit-image

2、下载预训练权重文件:新建model模型,下载model.pth并放入该文件夹下。

3、运行inference.py

4、解决报错

(1)报错问题:

原因分析:

        torchvision在运行时要调用PIL模块,调用PIL模块的PILLOW_VERSION函数。但是PILLOW_VERSION在Pillow 7.0.0之后的版本被移除了,Pillow 7.0.0之后的版本使用__version__函数代替PILLOW_VERSION函数。

解决方法:参考博客↓,

Python模块问题:ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘_importerror: cannot import name 'pillow_version' f-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_45687036/article/details/123749018?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-123749018-blog-103846358.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-123749018-blog-103846358.235%5Ev43%5Epc_blog_bottom_relevance_base4(2)报错问题:RuntimeError: DataLoader worker (pid(s) 82300) exited unexpectedly

原因分析:

       这个错误通常是由于在Windows系统上使用多进程时导致的问题。Python的multiprocessing库在Windows上使用spawnforkserver启动子进程,而不是像Unix系统上的fork那样简单。解决这个问题的方法是在主程序中添加特定的代码逻辑以确保在创建子进程前进行正确的启动配置。

if __name__ == '__main__':
    import multiprocessing
    multiprocessing.freeze_support()

    # 主程序部分
    # 包括你的所有代码逻辑

        通过在主程序中加入以上代码片段,可以避免在Windows系统上出现“An attempt has been made to start a new process before the current process has finished its bootstrapping phase”的错误。这样可以确保正确地启动子进程并避免潜在的问题。

(3)报错问题:NameError: name 'psnr' is not defined

原因分析:

         在代码中出现了NameError: name 'psnr' is not defined错误,这是因为在打印PSNR、SSIM和平均时间时,变量psnr没有被正确定义。可能的原因是在之前的部分代码中,由于某些条件未满足,导致psnrssimavg_time这些变量没有被赋值。

        因此在打印之前先对变量进行检查,确保它们已经被正确赋值。可以使用if语句来判断变量是否存在,避免未定义的情况下引用它们。

#修改代码
if gt_available:
    psnr, ssim = utils.compare_psnr_ssim(fake_Ts, real_Ts)
    avg_time = sum(run_times) / len(run_times)
    print('PSNR:{} , SSIM:{} , AVG_TIME: {}'.format(psnr, ssim, avg_time))
else:
    print('PSNR, SSIM and AVG_TIME are not available due to missing ground truth data.')

四、代码实现

运行inference.py,查看result。

作者还贴心的写了个网页,

到这里就结束啦!!!希望对大家有帮助。

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值