作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:[Pytorch系列-66]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - pix2pix test代码详解_文火冰糖(王文兵)的博客-CSDN博客


目录

第1章 pix2pix测试代码

1.1 代码路径

1.2 关键命令行参数

第2章 测试代码主要流程

第3章 代码详解


第1章 pix2pix测试代码

1.1 代码路径

.\pytorch-CycleGAN-and-pix2pix\test

1.2 关键命令行参数(以pix2pix为例)

-dataroot ./datasets/facades --direction BtoA --model pix2pix --name facades_pix2pix --verbose

其中 --verbose:表示打印网络架构

第2章 测试代码主要流程

(1)获取命令行参数:opt = TestOptions().parse()

(2)设置test模式下命令命令行参数

(3)创建数据集:dataset = create_dataset(opt)

(4)创建模型pix2pix模型: model = create_model(opt)

(5)加载预预训练模型参数:model.setup(opt)

预训练模型的位置有opt参数指定。

print(model.model_names)
print(model.visual_names)

[Network G] Total number of parameters : 54.414 M
-----------------------------------------------
['G']
['real_A', 'fake_B', 'real_B']

备注:

  • pix2pix的test,只有G网络,没有D网络。
  • 在pix2pix网络中,有三个关键点的图片:['real_A', 'fake_B', 'real_B'],其中real_A为输入图片,fake_B为创作生成的图片,real_B为与创作对应的真实图片,用它与创作图片进行比较和验证,以确定输出图片是否精准。

(6)构建web输出结构

(7)设置在评估模式:model.eval()

(8)读取数据集:for i, data in enumerate(dataset):

(9)unpack成对数据:model.set_input(data)

(10)根据输入图片,生成创作图片:model.test() , =》 调用foward() 进行前向预测

而前向预测只有G网络,没有D网络:

    def forward(self):"""Run forward pass; called by both functions <optimize_parameters> and <test>."""self.fake_B = self.netG(self.real_A)  # G(A)

(11)获取输出图片:visuals = model.get_current_visuals(),图片包括:real_A(输入图片), fake_B(创作图片), real_B (用于人工比较)这三部分。

(12)存储图片:save_images  =》 pytorch-CycleGAN-and-pix2pix\results\facades_pix2pix\test_latest\images\xxx

(13)存储Website:webpage.save()   =》pytorch-CycleGAN-and-pix2pix\results\facades_pix2pix\test_latest\index.htlm

第3章 代码详解

   # 获取命令行参数opt = TestOptions().parse()  # get test options# hard-code some parameters for testopt.num_threads = 0   # test code only supports num_threads = 1opt.batch_size = 1    # test code only supports batch_size = 1opt.serial_batches = True  # disable data shuffling; comment this line if results on randomly chosen images are needed.opt.no_flip = True    # no flip; comment this line if results on flipped images are needed.opt.display_id = -1   # no visdom display; the test code saves the results to a HTML file.# 创建数据集dataset = create_dataset(opt)  # create a dataset given opt.dataset_mode and other options# 创建模型model = create_model(opt)      # create a model given opt.model and other options# 加载预训练模型model.setup(opt)               # regular setup: load and print networks; create schedulers# 构建web输出# create a websiteweb_dir = os.path.join(opt.results_dir, opt.name, '{}_{}'.format(opt.phase, opt.epoch))  # define the website directoryif opt.load_iter > 0:  # load_iter is 0 by defaultweb_dir = '{:s}_iter{:d}'.format(web_dir, opt.load_iter)print('creating web directory', web_dir)webpage = html.HTML(web_dir, 'Experiment = %s, Phase = %s, Epoch = %s' % (opt.name, opt.phase, opt.epoch))# test with eval mode. This only affects layers like batchnorm and dropout.# For [pix2pix]: we use batchnorm and dropout in the original pix2pix. You can experiment it with and without eval() mode.# For [CycleGAN]: It should not affect CycleGAN as CycleGAN uses instancenorm without dropout.# 设置在评估模式if opt.eval:model.eval()# 读取数据集数据for i, data in enumerate(dataset):if i >= opt.num_test:  # only apply our model to opt.num_test images.break# unpack成对数据model.set_input(data)  # unpack data from data loader# 生成图片model.test()           # run inference# 获取输出图片:real_A(输入图片), fake_B(创作图片), real_B (用于人工比较)visuals = model.get_current_visuals()  # get image results# 获取存放图片的路径img_path = model.get_image_paths()     # get image paths# 每运行5次,打印一次提示if i % 5 == 0:  # save images to an HTML fileprint('processing (%04d)-th image... %s' % (i, img_path))#存储图片save_images(webpage, visuals, img_path, aspect_ratio=opt.aspect_ratio, width=opt.display_winsize)# 图片信息存放到web中,用于可视化显示webpage.save()  # save the HTML

----------------- Options ---------------
             aspect_ratio: 1.0                           
               batch_size: 1                             
          checkpoints_dir: ./checkpoints                 
                crop_size: 256                           
                 dataroot: ./datasets/facades                [default: None]
             dataset_mode: aligned                       
                direction: BtoA                              [default: AtoB]
          display_winsize: 256                           
                    epoch: latest                        
                     eval: False                         
                  gpu_ids: 0                             
                init_gain: 0.02                          
                init_type: normal                        
                 input_nc: 3                             
                  isTrain: False                             [default: None]
                load_iter: 0                                 [default: 0]
                load_size: 256                           
         max_dataset_size: inf                           
                    model: pix2pix                           [default: test]
               n_layers_D: 3                             
                     name: facades_pix2pix                   [default: experiment_name]
                      ndf: 64                            
                     netD: basic                         
                     netG: unet_256                      
                      ngf: 64                            
               no_dropout: False                         
                  no_flip: False                         
                     norm: batch                         
                    ntest: inf                           
                 num_test: 50                            
              num_threads: 4                             
                output_nc: 3                             
                    phase: test                          
               preprocess: resize_and_crop               
              results_dir: ./results/                    
           serial_batches: False                         
                   suffix:                               
                  verbose: True                              [default: False]
----------------- End -------------------
dataset [AlignedDataset] was created
initialize network with normal
model [Pix2PixModel] was created
loading the model from ./checkpoints\facades_pix2pix\latest_net_G.pth
---------- Networks initialized -------------
DataParallel(
  (module): UnetGenerator(
    (model): UnetSkipConnectionBlock(
      (model): Sequential(
        (0): Conv2d(3, 64, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
        (1): UnetSkipConnectionBlock(
          (model): Sequential(
            (0): LeakyReLU(negative_slope=0.2, inplace=True)
            (1): Conv2d(64, 128, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
            (2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
            (3): UnetSkipConnectionBlock(
              (model): Sequential(
                (0): LeakyReLU(negative_slope=0.2, inplace=True)
                (1): Conv2d(128, 256, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                (2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                (3): UnetSkipConnectionBlock(
                  (model): Sequential(
                    (0): LeakyReLU(negative_slope=0.2, inplace=True)
                    (1): Conv2d(256, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                    (2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                    (3): UnetSkipConnectionBlock(
                      (model): Sequential(
                        (0): LeakyReLU(negative_slope=0.2, inplace=True)
                        (1): Conv2d(512, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                        (2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                        (3): UnetSkipConnectionBlock(
                          (model): Sequential(
                            (0): LeakyReLU(negative_slope=0.2, inplace=True)
                            (1): Conv2d(512, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                            (2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                            (3): UnetSkipConnectionBlock(
                              (model): Sequential(
                                (0): LeakyReLU(negative_slope=0.2, inplace=True)
                                (1): Conv2d(512, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                                (2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                                (3): UnetSkipConnectionBlock(
                                  (model): Sequential(
                                    (0): LeakyReLU(negative_slope=0.2, inplace=True)
                                    (1): Conv2d(512, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                                    (2): ReLU(inplace=True)
                                    (3): ConvTranspose2d(512, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                                    (4): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                                  )
                                )
                                (4): ReLU(inplace=True)
                                (5): ConvTranspose2d(1024, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                                (6): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                                (7): Dropout(p=0.5, inplace=False)
                              )
                            )
                            (4): ReLU(inplace=True)
                            (5): ConvTranspose2d(1024, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                            (6): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                            (7): Dropout(p=0.5, inplace=False)
                          )
                        )
                        (4): ReLU(inplace=True)
                        (5): ConvTranspose2d(1024, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                        (6): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                        (7): Dropout(p=0.5, inplace=False)
                      )
                    )
                    (4): ReLU(inplace=True)
                    (5): ConvTranspose2d(1024, 256, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                    (6): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                  )
                )
                (4): ReLU(inplace=True)
                (5): ConvTranspose2d(512, 128, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
                (6): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
              )
            )
            (4): ReLU(inplace=True)
            (5): ConvTranspose2d(256, 64, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), bias=False)
            (6): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          )
        )
        (2): ReLU(inplace=True)
        (3): ConvTranspose2d(128, 3, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1))
        (4): Tanh()
      )
    )
  )
)
[Network G] Total number of parameters : 54.414 M
-----------------------------------------------
['G']
['real_A', 'fake_B', 'real_B']
creating web directory ./results/facades_pix2pix\test_latest
C:\ProgramData\Anaconda3\envs\pytorch-gpu-os\lib\site-packages\torchvision\transforms\transforms.py:287: UserWarning: Argument interpolation should be of type InterpolationMode instead of int. Please, use InterpolationMode enum.
  warnings.warn(
processing (0000)-th image... ['./datasets/facades\\test\\1.jpg']
processing (0005)-th image... ['./datasets/facades\\test\\103.jpg']
processing (0010)-th image... ['./datasets/facades\\test\\12.jpg']
processing (0015)-th image... ['./datasets/facades\\test\\17.jpg']
processing (0020)-th image... ['./datasets/facades\\test\\21.jpg']
processing (0025)-th image... ['./datasets/facades\\test\\26.jpg']
processing (0030)-th image... ['./datasets/facades\\test\\30.jpg']
processing (0035)-th image... ['./datasets/facades\\test\\35.jpg']
processing (0040)-th image... ['./datasets/facades\\test\\4.jpg']
processing (0045)-th image... ['./datasets/facades\\test\\44.jpg']


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122075510

[Pytorch系列-69]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - test.py代码详解相关推荐

  1. [Pytorch系列-72]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 使用预训练模型训练CycleGAN模型

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  2. [Pytorch系列-66]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 使用预训练模型测试pix2pix模型

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  3. 利用Tensorflow构建生成对抗网络GAN以生成数据

    使用生成对抗网络(GAN)生成数据 本文主要内容 介绍了自动编码器的基本原理 比较了生成模型与自动编码器的区别 描述了GAN模型的网络结构 分析了GAN模型的目标核函数以及训练过程 介绍了利用Goog ...

  4. Keras实现生成对抗网络(GAN)(生成二维平面上服从某一分布的点)

    GAN原理 相关数学推导可参考 李宏毅https://www.bilibili.com/video/av36779967/?p=4 通俗的比喻:制造假钞(G)和警察(D)对抗的过程.假钞制造者制造假钞 ...

  5. [人工智能-深度学习-61]:生成对抗网络GAN - 图像融合的基本原理与案例

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  6. pytorch生成对抗网络GAN的基础教学简单实例(附代码数据集)

    1.简介 这篇文章主要是介绍了使用pytorch框架构建生成对抗网络GAN来生成虚假图像的原理与简单实例代码.数据集使用的是开源人脸图像数据集img_align_celeba,共1.34G.生成器与判 ...

  7. [论文阅读] (06) 万字详解什么是生成对抗网络GAN?经典论文及案例普及

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  8. [Python图像识别] 四十九.图像生成之什么是生成对抗网络GAN?基础原理和代码普及

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. ECCV2022 | 生成对抗网络GAN论文汇总(图像转换-图像编辑-图像修复-少样本生成-3D等)...

    图像转换/图像可控编辑 视频生成 少样本生成 图像外修复/结合transformer GAN改进 新数据集 图像增强 3D 图像来源归属分析 一.图像转换/图像可控编辑 1.VecGAN: Image ...

最新文章

  1. Blender+Substance Painter全流程制作真实的机器人学习教程
  2. [SF] Symfony 组件 BrowserKit 原理
  3. 全面学习ORACLE Scheduler特性(5)Schedules调度Programs执行的Jobs
  4. css样式 数据展示,教程:使用CSS设置数据样式
  5. python-shutil学习
  6. 51nod 1343 行列式的根
  7. linux去掉某一字符开头的行
  8. 10kv线路负载率计算_电工必懂计算公式,你若不会,如何立足于电力行业?
  9. MPC实现自动驾驶轨迹跟踪
  10. pyhton学习,day1作业,用户名密码登录模块
  11. layui鼠标放上图片局部放大_老照片修复教程之—裁剪图片大小
  12. Nexus私服学习1
  13. 职场必备的Excel函数技巧!
  14. 计算机文档字体替换和加重号,word加重号怎么加
  15. Java IO流(超详细!)
  16. 计算机视觉教程(第2版)1-8章期末复习
  17. 第五章 基于QT和DCMTK的Dicom 图像浏览器---Dicom图像序列类
  18. oss 视频 转码_oss视频转码----比阿里云文档更详细
  19. R语言,导入XLSX的Excel数据 多sheet
  20. win10常用dos命令

热门文章

  1. 一张图让你分清楚企业微信的这些群!
  2. 拉勾教育大数据高薪训练营学习心得与笔记(开启属于自己的The Way To God)
  3. centos7-minimal安装mysql服务
  4. 谷歌浏览器切换页面的快捷键
  5. 监管大棒落下,杜均交易所生意梦碎
  6. 软件测试单元测试80%,单元测试的代码覆盖率至少80%
  7. MacOS12安装联想CM7120W打印机,实现彩色打印
  8. 树梅派应用26:树莓派做FM发射器架设小型电台
  9. 如何更好地使用搜索引擎
  10. ElasticSearch 亿级数据检索深度性能优化