深度学习与图像处理(PaddlePaddle版)课件8. 风格迁移_第1页
深度学习与图像处理(PaddlePaddle版)课件8. 风格迁移_第2页
深度学习与图像处理(PaddlePaddle版)课件8. 风格迁移_第3页
深度学习与图像处理(PaddlePaddle版)课件8. 风格迁移_第4页
深度学习与图像处理(PaddlePaddle版)课件8. 风格迁移_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章风格迁移微课视频PaddlePaddlePaddleGAN主讲人:钱彬内容安排任务概述01.算法原理02.算法研发03.微服务部署FastDeployServing推理04.PART01任务概述任务概述----任务背景01第3章:图像分类第4章:目标检测

第5章:语义分割

第6章:实例分割

第7章:关键点检测图像定位类算法实现图像到图像的变换图像变换类算法任务概述----任务背景01本章内容将使用飞桨的PaddleGAN套件,学习一种图像风格化的AnimeGAN算法,最终研发一款能够将风景照片实现动漫化的在线转换网站,并且通过微服务架构设计,支持多GPU高并发访问本章任务任务概述----安装PaddleGAN套件01PaddleGAN是飞桨团队在PaddlePaddle基础上开发的一款面向GAN的开源算法库,提供了诸多经典及前沿的生成对抗网络算法和相关应用实现,例如老照片上色、超分辨率重建、人脸属性编辑、图像去雾去噪、风格迁移、视频动作生成等。本章学习的照片动漫化算法AnimeGAN就包含在PaddleGAN之中。PaddleGAN安装好深度学习环境和PaddlePaddle,具体参考书本2.2.3节安装前提gitclone/PaddlePaddle/PaddleGAN.gitcdPaddleGANpipinstall-rrequirements.txt-i/pypi/simplePaddleGAN安装方法:PART02算法原理第一阶段:麻雀为了识别并捕杀蝴蝶,优化了自己的判别标准,认为蝴蝶的翅膀不会是棕色的,从而提高了自己的辨识精准度;第二阶段:蝴蝶为了躲避麻雀的识别捕猎,它的翅膀开始进化为棕色;第三阶段:麻雀再次优化自己的识别标准,认为蝴蝶的翅膀不会有枯叶状纹路;第四阶段:蝴蝶逼迫自己的翅膀进化出像枯叶似的纹路,加强了自己的隐蔽技能;……枯叶蝶进化过程蝴蝶的翅膀无限接近于真实的枯叶,这种蝴蝶最终进化成了枯叶蝶。结果算法原理----GAN算法02算法原理----GAN算法021.GAN的基本原理GAN算法受博弈论启发,由生成器(Generator)神经网络和判别器(Discriminator)神经网络两个子模型所组成。这两个模型相互对抗和博弈,前者用于生成内容,后者用于判别生成内容的真假。2.GAN算法的数学表达式

算法原理----GAN算法023.GAN算法的训练流程(1)训练判别器D:将真实数据打上真标签1并将生成器生成的假图片打上假标签0,然后一同送入判别器,对判别器进行训练。计算损失函数时使判别器对真数据输入的判别值趋近于1,对生成器生成的假图片的判别值趋近于0。此过程中只更新判别器的参数,不更新生成器的参数。(2)训练生成器G:将高斯分布的随机噪声送入生成器,然后将生成器生成的假图片打上真标签1送入判别器。计算损失函数时使判别器对生成器生成的假图片的判别趋近于1。此过程中只更新生成器的参数,不更新判别器的参数。算法原理----DCGAN算法02将CNN引入生成器和判别器,所研发的算法称作DCGAN(DeepConvolutionalGAN,深度卷积对抗网络)普通2D卷积转置卷积转置卷积paddle.nn.Conv2DTranspose(in_channels,out_channels,kernel_size,stride=1,padding=0,output_padding=0,groups=1,dilation=1,weight_attr=None,bias_attr=None,data_format='NCHW')算法原理----AnimeGAN算法021.对抗学习首先搜集一组真实的风景照片,将这组照片归类为P;然后再搜集一组动漫化图片,将这些图片归类为A。训练判别器D:训练生成器G:2.生成器模型结构AnimeGAN的生成器模型结构图AnimeGAN生成器子模块结构图3.判别器模型结构(1)BN:该方法固定特征通道(固定C),其余维度全部用满,也就是计算某个特征通道内所有样本的像素。很明显,这种像素集合定义方式是跨样本的,能够在样本之间传递和汇聚信息,因此该归一化方法适合图像分类、目标检测、语义分割、关键点检测等需要综合不同样本上下文语义特征的判别性任务。

(2)LN:该方法固定某个样本(固定N),其余维度全部用满,也就是计算某个图像样本的所有像素。这种集合定义方式只固定在单个样本内,不会受到其他样本的影响。因此该归一化方法尤其适合GAN等图像生成任务,在计算时可以免受其他样本的破坏而造成内容失真。

(3)IN:该方法在LN的基础上再进一步,同时限定样本和通道(固定N和C),其余维度用满,也就是计算某个样本在某个特征通道上的全部像素。这种方式将像素集合限定在单个样本单个特征通道上,因此,该方法在计算时不易受到其他样本干扰,并且各通道之间也不会产生影响。该方法尤其适合图像风格变换等对像素内容保真度要求较高的任务。(4)GN:该方法综合了LN和IN两种方式,同样将计算内容限定在单个样本内(固定N),但在特征通道上可以分组,即将特征通道C分为M个组,计算时按照特征组进行像素计算。当M=C时,此时GN等价于IN;当M=1时,此时GN等价于LN。算法原理----AnimeGAN算法02算法原理----AnimeGAN算法024.损失函数对抗损失(advloss)内容损失(contentloss)风格损失(styleloss)颜色损失(colorloss)本节内容针对AnimeGAN算法进行了剖析,需要注意的是PaddleGAN套件中的AnimeGAN算法在原算法基础上还做了一些调整和优化,因此命名为AnimeGAN_V2,但是整个实现方式与前面讲述的实现原理基本一致。完整的端到端模型组网和损失函数实现代码请参考PaddleGAN/ppgan/models/animeganv2_model.py。PART03算法研发算法研发----数据集准备03使用AnimeGAN原论文提供的数据算法研发----训练031.预训练设置yaml文件路径为:PaddleGAN/configs/animeganv2_pretrain.yaml将interval参数修改为1或2,这样预训练模型才能保存下来,snapshot_config:interval:2#修改该参数,使得预训练模型能够保存dataset->train->transform_anime->Add->valueHayao风格数据集,它的均值偏移量为:value:[-4.4346957,-8.665916,13.100612]在配置文件中还有一个参数需要注意:RGBmeandiff[-22.436172-0.193726522.6299]Value计算方法pythontools/animegan_picmean.py--dataset./data/animedataset/Paprika/style输出结果如下所示预训练的保存结果存放在output_dir目录下。算法研发----训练032.端到端训练先修改配置文件中的pretrain_ckpt参数,确保指向前面训练好的预训练模型权重路径pretrain_ckpt:output_dir/animeganv2_pretrain2023-12-27-16-55/epoch_2_checkpoint.pdparamspythontools/main.py--config-fileconfigs/animeganv2.yaml修改完以后就可以使用下面的命令开启完整的端到端训练exportCUDA_VISIBLE_DEVICES=0,1python-mpaddle.distributed.launchtools/main.py--config-fileconfigs/animeganv2.yaml多卡进行训练命令(以2卡为例)算法研发----训练033.动态图推理注释掉配置文件animeganv2.yaml中的pretrain_ckpt参数,使用下面的命令执行验证预测python3tools/main.py--config-fileconfigs/animeganv2.yaml--evaluate-only\--loadoutput_dir/animeganv2-2023-12-27-17-08/epoch_30_weight.pdparams算法研发----训练034.静态图导出新建一个用于静态图转换的脚本文件export.pyimportpaddlefromppgan.models.generatorsimportAnimeGenerator#设置训练好的动态图模型路径weight_path='./output_dir/animeganv2-2023-12-27-17-08/epoch_30_weight.pdparams'#加载AnimeGAN生成器模型net=AnimeGenerator()checkpoint=paddle.load(weight_path)net.set_state_dict(checkpoint['netG'])net.eval()……算法研发----训练035.静态图推理采用更加原生的推理工具PaddleInferene来完成静态图推理importcv2importnumpyasnpfrompaddle.inferenceimportcreate_predictorfrompaddle.inferenceimportConfigasPredictConfig#加载静态图模型model_path="./output_dir/inference/animegan.pdmodel"params_path="./output_dir/inference/animegan.pdiparams"pred_cfg=PredictConfig(model_path,params_path)pred_cfg.enable_memory_optim()#启用内存优化pred_cfg.switch_ir_optim(True)……PART048.4微服务部署(FastDeployServing推理)微服务部署----准备Docker环境04Docker是一个开源的应用容器引擎,开发者可以打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上。从功能上看,Docker类似于一个轻量级的虚拟机。使用Docker技术来实现AI模型的服务化部署非常方便,不管是服务的启动、暂停、销毁,其执行速度都非常快,开销很低。安装完成后可以使用下面的命令来查看docker对应版本。1.Docker由于需要在Docker中启动英伟达的GPU服务,因此需要安装英伟达容器化工具NVIDIAContainerToolkit,该工具使Docker的容器能与主机的NVIDIA显卡进行交互,离线安装需要下载6个必要的安装文件2.NvidiaContainerToolkitsudodocker--versionlibnvidia-container1_1.13.0-1_amd64.deblibnvidia-container-tools_1.13.0-1_amd64.debnvidia-container-toolkit-base_1.13.0-1_amd64.debnvidia-container-toolkit_1.13.0-1_amd64.debnvidia-container-runtime_3.13.0-1_all.debnvidia-docker2_2.13.0-1_all.deb微服务部署----准备Docker环境04通过FastDeploy官网找到FastDeployServing的Docker镜像3.获取FastDeployServing镜像dockerpull/paddlepaddle/fastdeploy:1.0.4-gpu-cuda11.4-trt8.5-21.10sudonvidia-dockerrun-it--net=host--namefd_serving\/paddlepaddle/fastdeploy:1.0.4-gpu-cuda11.4-trt8.5-21.10bash基于拉取的镜像创建一个容器并进入容器该镜像已经安装好相关的cuda、cudnn、tensorrt、fastdeploy和fastapi环境,只需要拉取镜像下来并且进入镜像即可正常使用。微服务部署----部署服务04按照下面所示进行文件结构组织:1.准备模型仓库deploy└──models └──animegan ├──1 │├──model.pdiparams │└──model.pdmodel └──config.pbtxt2.编写配置文件config.pbtxt模型的输入输出可以借助飞桨提供的可视化工具visualdl来实现微服务部署----部署服务04根据前面拉取的镜像,重新创建一个名为animegan的容器3.启动服务sudonvidia-dockerrun-dit--net=host--nameanimegan--shm-size="1g"-v$PWD:/animegan/paddlepaddle/fastdeploy:1.0.4-gpu-cuda11.4-trt8.5-21.10bash4.客户端测试访问服务的调用有两种方式:GRPC和HTTP,这里使用GRPC在deploy文件夹下创建一个客户端脚本文件client_grpc.pyimportcv2importnumpyasnp#导入grpc客户端importtritonclient.grpcasgrpcclient#定义grpc服务器的地址server_addr='localhost:8001'#创建grpcclientclient=grpcclient.InferenceServerClient(server_addr)#读取图像img_org=cv2.imread('./test.jpg',cv2.IMREAD_COLOR)#颜色转换img=cv2.cvtColor(img_org,cv2.COLOR_BGR2RGB)微服务部署----部署服务04根据前面拉取的镜像,重新创建一个名为animegan的容器3.启动服务sudonvidia-dockerrun-dit--net=host--nameanimegan--shm-size="1g"-v$PWD:/animegan/paddlepaddle/fastdeploy:1.0.4-gpu-cuda11.4-trt8.5-21.10bash4.客户端测试访问服务的调用有两种方式:GRPC和HTTP,这里使用GRPC在deploy文件夹下创建一个客户端脚本文件client_grpc.pyimportcv2importnumpyasnp#导入grpc客户端importtritonclient.grpcasgrpcclient#定义grpc服务器的地址server_addr='localhost:8001'#创建grpcclientclient=grpcclient.InferenceServerClient(server_addr)#读取图像img_org=cv2.imread('./test.jpg',cv2.IMREAD_COLOR)#颜色转换img=cv2.cvtColor(img_org,cv2.COLOR_BGR2RGB)微服务部署----部署服务04使用FastDeployServing推理前后效果项目架构图微服务部署----微服务开发041.安装FastAPI框架pipinstallfastapi"uvicorn[standard]"python-multipartpipinstalljinja22.下载基础示例程序uvicornmain_fastapi:app--host--port8040通过cd命令切换到clean_fastapi_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论