趁着程序还在跑,来把过程中遇到的问题总结一下——希望世间再无bug
用到的之前没用过的模块当然需要自己安装一下,这也不算是问题比较麻烦的有两个:
一个是是安装cv2,具体方法前几天也有总结,指路——no module named cv2,但这个的方法真的有点玄学,有的方法有的人就可以,但有的就不行,所以有点耐心,把能找到的方法都试一遍,总有一个适合你。
另一个是解决pytorch_colors的问题,一开始我并没有意识到问题的严重性(毕竟第一次见),以为它也只是一个平平无奇的pip install即可解决的模块,直到倒腾了一会才意识到这原来他就是python的第三方库,然后也是各种百度,实话说这真的太能搞心态了,各路大佬可能见怪不怪所以几乎所有的方法都是从第二步开始介绍,没有人跟我说需要先下载好已经写好的含有setup.py的pytorch_colors的zip包(哭会……),后来知道真相的我,被自己蠢到在床上打滚。。。具体方法当场我就总结了,指路——如何解决PyTorch中的No module named ‘pytorch_colors‘问题
出现这种问题一般是两个原因,一是图片路径出现问题,而是参数设置错误。而我就是路径问题,主要原因是没有分清python中相对路径和绝对路径。
两个方法,要么减少训练集数目,要么令batch_size=1
e:/pytnon_list/Zero-DCE-master/Zero-DCE_code/lowlight_train.py:72:
UserWarning: torch.nn.utils.clip_grad_norm is now deprecated in favor of
torch.nn.utils.clip_grad_norm_.
torch.nn.utils.clip_grad_norm(DCE_net.parameters(),config.grad_clip_norm)
在训练程序中用到了这个函数,但最后报错说它已被弃用,只用把它改成torch.nn.utils.clip_grad_norm_
即可,具体代码如下:
optimizer.zero_grad()
loss.backward()
torch.nn.utils.clip_grad_norm(DCE_net.parameters(),config.grad_clip_norm) #替换之前
torch.nn.utils.clip_grad_norm_(DCE_net.parameters(),config.grad_clip_norm) #替换之后
optimizer.step()
porch D:\Anacondaa\envs\net\lib\site-packages\torch\nn\functional.py:1339:
UserWarning: nn.functional.tanh is deprecated. Use torch.tanh instead.
warnings.warn("nn.functional.tanh is deprecated. Use torch.tanh instead.")
不影响程序正常运行,但这种警告是说你的pytorch版本在未来的版本会将nn.functional.tanh这个API启动,需要用torch.tanh
来替代,具体代码如下:
import torch.nn.functional as F
x5 = self.relu(self.e_conv5(torch.cat([x3,x4],1)))
# x5 = self.upsample(x5)
x6 = self.relu(self.e_conv6(torch.cat([x2,x5],1)))
x_r = F.tanh(self.e_conv7(torch.cat([x1,x6],1))) #替换之前
x_r = torch.tanh(self.e_conv7(torch.cat([x1,x6],1))) #替换之后
r1,r2,r3,r4,r5,r6,r7,r8 = torch.split(x_r, 3, dim=1)
找不到文件或文件夹,这是做预测试的时候报的错,好像又是路径问题,我要吐了……
具体代码实现在这:
if __name__ == '__main__':
# test_images
with torch.no_grad():
filePath = 'Zero-DCE-master/Zero-DCE_code/data/test_data/'
file_list = os.listdir(filePath)
for file_name in file_list:
test_list = glob.glob(filePath+file_name+"/*")
for image in test_list:
#image = image
print(image)
lowlight(image)
完整的报错是这样的:
Zero-DCE-master/Zero-DCE_code/data/test_data/DICM\01.jpg
12.054098844528198
Traceback (most recent call last):
File "e:/pytnon_list/Zero-DCE-master/Zero-DCE_code/lowlight_test.py", line 56, in <module>
lowlight(image)
File "e:/pytnon_list/Zero-DCE-master/Zero-DCE_code/lowlight_test.py", line 42, in lowlight
torchvision.utils.save_image(enhanced_image, result_path)
File "D:\Anacondaa\envs\net\lib\site-packages\torchvision\utils.py", line 105, in save_image
im.save(filename)
File "D:\Anacondaa\envs\net\lib\site-packages\PIL\Image.py", line 2131, in save
fp = builtins.open(filename, "w+b")
FileNotFoundError: [Errno 2] No such file or directory:
'Zero-DCE-master/Zero-DCE_code/data/result/DICM\\01.jpg'
一开始我百度然后一堆人讲相对路径、绝对路径,可我看了半天感觉好像不是路径的问题了,因为运行结果说明是找到了Zero-DCE-master/Zero-DCE_code/data/test_data/DICM\01.jpg
,并且也输出了它的结束时间,我又试了一下,打印所有的test_list
,结果也说明了在读取路径上是完全没有问题的:
所以问题大概就出在lowlight
这个函数上。