一、论文与代码
最近想复现图像去反光问题,看了一篇文章,论文地址↓论文Location-Aware Single Image Reflection Removal (thecvf.com)https://openaccess.thecvf.com/content/ICCV2021/papers/Dong_Location-Aware_Single_Image_Reflection_Removal_ICCV_2021_paper.pdf其中提供了相关代码,下载地址↓
二、运行环境
官方提示运行环境:
其中,由于电脑配置有限,我配置的环境为:
Windows10 | python3.7.3 | pytorch1.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博客https://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上使用spawn
或forkserver
启动子进程,而不是像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
没有被正确定义。可能的原因是在之前的部分代码中,由于某些条件未满足,导致psnr
、ssim
和avg_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。
作者还贴心的写了个网页,
到这里就结束啦!!!希望对大家有帮助。