【AI】CycleGan对抗生成网络遥感影像生成地图效果测试

2024-01-11 02:20

本文主要是介绍【AI】CycleGan对抗生成网络遥感影像生成地图效果测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天看到一个有趣的项目,CycleGan对抗生成网络把马生成成斑马,还有一个测试用例是用遥感影像生成平面地图的效果,效果如下图所示,我大学是遥感专业,看到遥感影像就触动了我的原神,于是原神启动,肝一个测试的玩玩。
在这里插入图片描述

源码地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

0.准备工作

其实按照官方文档玩,没有什么特别需要准备的,只是为了防止遗忘,多赘述一下了。
项目有提供数据集和预训练模型,这种最适合懒人操作了。

  1. 下载数据集
    其实源码中已经放了下载数据集的脚本,只需要运行脚本即可,但是有时候下载不稳定,我们还是提前下载下来放在环境下面最稳妥。
    下载地址:http://efrosgans.eecs.berkeley.edu/cyclegan/datasets
    在这里插入图片描述
    解压后放在项目的dataset目录下面
    在这里插入图片描述

  2. 下载预训练模型
    下载地址:http://efrosgans.eecs.berkeley.edu/cyclegan/pretrained_models/
    在这里插入图片描述
    预训练模型下载之后需要改一下名字,在项目的checkpoint目录下面创建预训练模型的文件夹,并把下载的预训练模型改名为latest_net_G.pth
    在这里插入图片描述
    3.安装依赖
    我这边使用的Anaconda虚拟环境进行运行,选择一个之前安装了pytorch框架的虚拟环境,然后再终端中切换到项目文件夹下面,使用pip install -r requirments.txt安装项目依赖。
    项目依赖挺简单,除了pytorch的包外,最主要的就是两个包了,因为我的虚拟环境上已经安装了pytorch的依赖,所以前两个依赖可以注释掉

#torch>=0.4.1
#torchvision>=0.2.1
dominate>=2.3.1
visdom>=0.1.8.3

1.运行测试

安装完就可以运行了,直接在项目的根目录下面运行即可

python test.py --dataroot datasets/maps/testA --name sat2map_pretrained --model test --no_dropout

参数介绍:

--dataroot 测试数据集存放的路径
--name 模型名称,这里跟checkpoint目录下面的文件夹名称一致
--model test 使用test参数说明我们是在测试

终端输出内容展示:

(pytorch) PS F:\AIStudy\pytorch-CycleGAN-and-pix2pix> python test.py --dataroot datasets/maps/testA --name sat2map_pretrained --model test --no_dropout
----------------- Options ---------------aspect_ratio: 1.0batch_size: 1checkpoints_dir: ./checkpointscrop_size: 256dataroot: datasets/maps/testA                  [default: None]dataset_mode: singledirection: AtoBdisplay_winsize: 256epoch: latesteval: Falsegpu_ids: 0init_gain: 0.02init_type: normalinput_nc: 3isTrain: False                                [default: None]load_iter: 0                                    [default: 0]load_size: 256max_dataset_size: infmodel: testmodel_suffix:n_layers_D: 3name: sat2map_pretrained                   [default: experiment_name]ndf: 64netD: basicnetG: resnet_9blocksngf: 64no_dropout: True                                 [default: False]no_flip: Falsenorm: instancentest: infnum_test: 50num_threads: 4output_nc: 3phase: testpreprocess: resize_and_cropresults_dir: ./results/serial_batches: Falsesuffix:verbose: False
----------------- End -------------------
dataset [SingleDataset] was created
[ReflectionPad2d((3, 3, 3, 3)), Conv2d(3, 64, kernel_size=(7, 7), stride=(1, 1)), InstanceNorm2d(64, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1)), InstanceNorm2d(128, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1)), InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
)]
[ReflectionPad2d((3, 3, 3, 3)), Conv2d(3, 64, kernel_size=(7, 7), stride=(1, 1)), InstanceNorm2d(64, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1)), InstanceNorm2d(128, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1)), InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ResnetBlock((conv_block): Sequential((0): ReflectionPad2d((1, 1, 1, 1))(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(2): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)(3): ReLU(inplace=True)(4): ReflectionPad2d((1, 1, 1, 1))(5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1))(6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False))
), ConvTranspose2d(256, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), output_padding=(1, 1)), InstanceNorm2d(128, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), ConvTranspose2d(128, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), output_padding=(1, 1)), InstanceNorm2d(64, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False), ReLU(inplace=True), ReflectionPad2d((3, 3, 3, 3)), Conv2d(64, 3, kernel_size=(7, 7), stride=(1, 1)), Tanh()]
initialize network with normal
model [TestModel] was created
loading the model from ./checkpoints\sat2map_pretrained\latest_net_G.pth
---------- Networks initialized -------------
[Network G] Total number of parameters : 11.378 M
-----------------------------------------------
creating web directory ./results/sat2map_pretrained\test_latest
processing (0000)-th image... ['datasets/maps/testA\\1000_A.jpg']
processing (0005)-th image... ['datasets/maps/testA\\1005_A.jpg']
processing (0010)-th image... ['datasets/maps/testA\\100_A.jpg']
processing (0015)-th image... ['datasets/maps/testA\\1014_A.jpg']
processing (0020)-th image... ['datasets/maps/testA\\1019_A.jpg']
processing (0025)-th image... ['datasets/maps/testA\\1023_A.jpg']
processing (0030)-th image... ['datasets/maps/testA\\1028_A.jpg']
processing (0035)-th image... ['datasets/maps/testA\\1032_A.jpg']
processing (0040)-th image... ['datasets/maps/testA\\1037_A.jpg']
processing (0045)-th image... ['datasets/maps/testA\\1041_A.jpg']

这里打印了模型参数、模型结构以及处理进度。

2.结果展示

执行结束后会在模型的result路径下(results\sat2map_pretrained\test_latest)生成查看样例,点击打开index.html就可以查看模型处理的效果
在这里插入图片描述
效果如下:
在这里插入图片描述
是不是很有趣!

这篇关于【AI】CycleGan对抗生成网络遥感影像生成地图效果测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/592835

相关文章

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用