参考链接

0. 安装所需环境tensorflow==1.4.1 python=3.6

github上的代码说的需要的版本是tensorflow==1.4.1,但是找遍全网,发现并没有1.4.1的版本,全部都是关于1.4.0版本的安装。然后就看到了这个问题的回答:I am not able to install tensorflow=1.4.1。大概意思就是说:tensorflow==1.4.1是在Linux中可使用的版本,在Windows下可用1.4.0版本替代(然偶看了下github代码,确实他是在Linux下运行的)

所以就参考这篇博文安装1.4.0版本:tensorflow1.4的详细安装教程,我下载的是GPU的tensorflow1.4.0,点击可直接下载👉tensorflow_gpu-1.4.0-cp36-cp36m-win_amd64.whl

#-------------------------可能会用到的命令----------------------------#

#--------------------------------------------------------------------------------#

在这个里面键入以下命令:

在这里插入图片描述

  1. 创建虚拟环境tf1.4
conda create -n tf1.4 python=3.6
  1. 激活并进入到tf1.4虚拟环境
conda activate tf1.4
  1. 安装tensorflow_gpu-1.4.0
    点击下载镜像:tensorflow_gpu-1.4.0-cp36-cp36m-win_amd64.whl

然后键入以下命令:(键入这个镜像的绝对路径conda不好用时,可换成pip-i后面是引用豆瓣源加速)

conda install .../tensorflow_gpu-1.4.0-cp36-cp36m-win_amd64.whl -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com
  1. 安装对应的CUDA和cudnn

点击直接下载👇,下载后的安装流程可参考tensorflow-gpu版本安装教程(过程详细)

我的显卡是RTX3050,可用的是CUDA v11.3的,所以之前就已经安装过CUDA113了,对应安装了tensorflow=2.6.0 python=3.8的。但是本文的代码是需要tensorflow=1.4.0 python=3.6的,对应的CUDA是版本 v9.1的,所以我需要重新安装CUDA v.9.1以及相应cudnn。
但是我原本的CUDA v11.3并没有卸载。我看有的文章说的一台电脑可安装多个CUDA,不同虚拟环境中的tensorflow会自动选择对应的CUDA版本,只要在环境变量中指明了每个CUDA的安装位置即可(其实在每个CUDA安装的时候,都会自动将自己的路径添加系统变量path,如下图,但是要留意一下图中的2点,现在是指向v9.1的,不知道会不会影响v11.3的使用,要以后用到了才知道咯~)

  1. 测试是否tensorflow-gpu安装配置成功
activate tf1.4
python
import tensorflow as tf
tf.test.is_gpu_available()	# True

发现安装了CUDAv9.1之后多了个这个:

在这里插入图片描述

Visual Profiler 是是一个图形化的剖析工具,可以显示你的应用程序中CPU和GPU的活动情况,利用分析引擎帮助你寻找优化的机会。(摘录自CUDA入门(四)Visual Profiler


1. 制作数据集

1.1 我原本的数据集分布

G:.
├─images
│  ├─train
│  └─val
├─labels
│  ├─train
│  └─val

1.2 运行代码tools/process.py生成pix2pix所需图像

需要用到的4个重要参数:

  1. input_dir:图像文件夹1(images)
  2. b_dir:图像文件夹2(labels)
  3. operation:选择的操作,我这里选择的操作直接是合并👉combine
  4. output_dir:合并图像的保存文件夹

运行后的文件夹分布为:

G:.
├─images
│  ├─train
│  └─val
├─labels
│  ├─train
│  └─val
-------------------上面是原本的数据--------------------
------------------下面是合并后的数据--------------------
├─train
└─val

整体的运行命令:

  • 合并生成train数据集:
python process.py --input_dir G:/pycharmprojects/pytorch-CycleGAN-and-pix2pix-master/datasets/linedataset/images/train --output_dir G:/pycharmprojects/pytorch-CycleGAN-and-pix2pix-master/datasets/linedataset/train --b_dir G:/pycharmprojects/pytorch-CycleGAN-and-pix2pix-master/datasets/linedataset/labels/train --operation combine
  • 合并生成val数据集:
python process.py --input_dir G:/pycharmprojects/pytorch-CycleGAN-and-pix2pix-master/datasets/linedataset/images/val --output_dir G:/pycharmprojects/pytorch-CycleGAN-and-pix2pix-master/datasets/linedataset/val --b_dir G:/pycharmprojects/pytorch-CycleGAN-and-pix2pix-master/datasets/linedataset/labels/val --operation combine

合并后的图像示例:(其实就是直接把两张图片横着拼在一起了,自己写代码也能实现)

2. 开始训练

可以启动visdom查看曲线,但是启动visdom就会占用一个终端。而运行的代码也需要从终端键入命令。所以应该可以类似这样去输入:python -m visdom.server & python train.py

传入的地址须要是绝对地址

python pix2pix.py --input_dir G:\pycharmprojects\pytorch-CycleGAN-and-pix2pix-master\datasets\linedataset\train --mode train --outp
ut_dir runs/linedata_pix2pix --max_epochs 200 --which_direction BtoA --batch_size 32

训练过程中的终端界面:

(如果显存不够,很大可能就一直卡在这个地方了。所以我选择在AutoDL云服务器上调大batch_size跑代码。想使用AutoDL的可参考博客:AutoDL使用教程:1)创建实例 2)配置环境+上传数据 3)PyCharm2021.3专业版下载安装与远程连接完整步骤

在这里插入图片描述


3. 代码更改与学习记录

3.1 加入代码,记录log打印日志

如下,在pix2pix.py的793行代码下面添加如下代码:

在这里插入图片描述
代码:

                    #  --------------lwd edit--------------- #
                    txt_path = os.path.join(a.output_dir, 'result.txt')
                    with open(txt_path, 'a') as f:  # a 表示追加写入
                        f.write("progress  epoch %d  step %d  image/sec %0.1f  remaining %dm" % (train_epoch, train_step, rate, remaining / 60))
                        f.write(f'discrim_loss: {results["discrim_loss"]} | gen_loss_GAN: {results["gen_loss_GAN"]} | gen_loss_L1: {results["gen_loss_L1"]}\n\n')
                    # -------------------------------------- #

3.2 损失的作用和标准

参考自官方文档:https://www.tensorflow.org/tutorials/generative/pix2pix

在这里插入图片描述


4. 错误记录

3.1 执行train.py时,出现错误:Nan in summary histogram【梯度爆炸】

出现原因:batch-size设为了1

解决方法:batch-size不设为1(设置成偶数比较好)(好像并没有解决)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐