From 225d675742599b2ab44e2c6bc7559ecb31413828 Mon Sep 17 00:00:00 2001 From: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> Date: Thu, 17 Nov 2022 20:37:07 +0800 Subject: [PATCH] add (#5597) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add new models and helix files (#5569) Co-authored-by: liushuangqiao * Add PP-HumanSegV2 Chinese Docs (#5568) * Create .gitkeep * Create .gitkeep * Create .gitkeep * Create .gitkeep * Create .gitkeep * Create .gitkeep * Create .gitkeep * Create .gitkeep * Create .gitkeep * Create .gitkeep * update PP-HelixFold description (#5571) * add new models and helix files * update PP-HelixFold description Co-authored-by: liushuangqiao * Update introduction_cn.ipynb * Update introduction_en.ipynb * Update introduction_en.ipynb * Update introduction_cn.ipynb * add PP-ASR (#5559) * add PP-ASR * add PP-ASR * add PP-ASR * PP-ASR (#5572) * add PP-ASR * add PP-ASR * add PP-ASR * add PP-ASR * add PP-ASR * Update info.yaml (#5575) * add install of paddleclas (#5581) * add gradio for PP-TTS (#5582) * Delete modelcenter/VIMER-UMS directory * [Seg] Add PP-LiteSeg (Doc & APP) and PP-HumanSeg (APP) (#5576) * Add PP-LiteSeg to Model Center * Add APP for PP-HumanSegV2 and PP-LiteSeg * Add PP-Matting (#5563) * update info.yam english (#5586) * update inference of PP-OCRv2 to paddlecv (#5587) * add install of paddleclas * update inference with paddlecv * Update PP-HumanSegV2 info.yaml * Change sub_tag_en in PP-HumanSeg info.yaml * Change sub_tag_en in PP-LiteSeg info.yml * Main (#5588) * add install of paddleclas * update inference with paddlecv * change cv to Computer Vision * Add ERNIE UIE in modelcenter (#5574) * add_uie * fill_yaml * modify_info * add_model_size * imgae_size * image_size * modify * change_en * change_en * Update info.yaml Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> * add PP-TSM (#5565) * add PP-TSM * remove log file * add description * fix Example in info.yaml * fix notebook * update task to video * add ERNIE-M to model center (#5570) * add ERNIE-M to model center * add benchmark_en info.yaml * remove unused cell * rm image from repo and fix ipynb * add introduction_en and fix some annotations * add task to info.yaml * add model_size and the number of parameters while modify ipynb following comments * rewrite pretrained model into chinese * modify task info * Add det models (#5578) * add PP-YOLO/PP-YOLOE/PP-YOLOE+/PP-Picodet models * add PP-YOLO/PP-YOLOE/PP-YOLOE+/PP_PicoDet * modify info.yml of det models * Update info.yaml * Update info.yaml * Update info.yaml * Update info.yaml Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> * update PP-ShiTuV2 files (#5562) * update PP-ShiTuV2 files * update PP-ShiTu * add PP-ShiTuV2 APP files * refine code * remove PP-ShiTuV1' APP * correct in info.yaml * update partial en docs * update * Update info.yaml * Update info.yaml Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> * add PP-TInypose PP-Vehicle PP-HuamnV2 (#5573) * add PP-TInyPose * add PP-TInyPose info.yaml app.yaml * * add PP-HumanV2 * add PP-Vehicle * PP-TInyPose PP-Vehicle PP-HumanV2 add English version * fixed info.yaml * Update info.yaml * fix PP-TInyPose/info.yaml Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> * Update info.yaml * add ppmsvsr introduction_cn.ipynb (#5554) * add ppmsvsr introduction_cn.ipynb * add benchmark info and download * add en doc * fix info.yaml * Update info.yaml Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> * Update info.yaml * Update info.yml * Update info.yaml * Update info.yaml * Delete modelcenter/ERNIE-Gram directory * Delete modelcenter/ERNIE-Doc directory * Delete modelcenter/ERNIE-ViL directory * Delete modelcenter/PP-HumanSeg directory * Add ERNIE-3.0 for model center (#5577) * add ernie-3.0 * update ERNIE 3.0 * Delete modelcenter/PP-OCR directory * Delete modelcenter/PP-Structure directory * Update info.yaml * Delete modelcenter/PP-TSMv2 directory * Delete modelcenter/VIMER-StrucTexT V1 directory * Update info.yaml * update PP-ShiTu en docs (#5589) * update PP-ShiTuV2 files * update PP-ShiTu * add PP-ShiTuV2 APP files * refine code * remove PP-ShiTuV1' APP * correct in info.yaml * update partial en docs * update * update PP-ShiTu en doc * refine * add pplcnet pplcnetv2 pphgnet (#5560) * add pplcnet * add pplcnetv2 * add pphgnet * fix * update * support gradio for PPLCNet PPLCNetV2 PPHGNet * fix * enrich contents * Update benchmark_cn.md * Update download_cn.md * Update info.yaml * Update info.yaml * add example * Add modelcenter en * Add PP-HGNet en * Add PP-LCNet and PP-LCNetV2 en * Add modelcenter English * rename v2 to V2 * fix * Update info.yaml Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> Co-authored-by: zhangyubo0722 * Update info.yaml * Update info.yaml * Update info.yaml * update download.md (#5591) * bb * 2022.11.14 * 2022.11.14_10:36 * 2022.11.14 16:55 * 2022.11.14 17:03 * 2022.11.14 21:40 * 2022.11.14 21:50 * update info.yaml * 2022.11.17 16:44 * update info.yml of PP-OCRv2、PP-OCRv3、PP-StructureV2 (#5593) * add install of paddleclas * update inference with paddlecv * change cv to Computer Vision * update info.yml * Update info.yaml * Update info.yaml * Update info.yaml * Update info.yaml Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> * Update info.yaml * add files * remove ernie-3.0 & ... models * add ernie & ... models Co-authored-by: liushuangqiao Co-authored-by: cc <52520497+juncaipeng@users.noreply.github.com> Co-authored-by: Zth9730 <32243340+Zth9730@users.noreply.github.com> Co-authored-by: Ming Co-authored-by: zhoujun <572459439@qq.com> Co-authored-by: TianYuan Co-authored-by: wuyefeilin <30919197+wuyefeilin@users.noreply.github.com> Co-authored-by: lugimzzz <63761690+lugimzzz@users.noreply.github.com> Co-authored-by: huangjun12 <2399845970@qq.com> Co-authored-by: Yam <40912707+Yam0214@users.noreply.github.com> Co-authored-by: wangxinxin08 <69842442+wangxinxin08@users.noreply.github.com> Co-authored-by: HydrogenSulfate <490868991@qq.com> Co-authored-by: LokeZhou Co-authored-by: wangna11BD <79366697+wangna11BD@users.noreply.github.com> Co-authored-by: Jiaqi Liu <709153940@qq.com> Co-authored-by: Tingquan Gao <35441050@qq.com> Co-authored-by: zhangyubo0722 Co-authored-by: 小小的香辛料 --- modelcenter/DeepCFD/info.yaml | 31 ++ modelcenter/DeepCFD/introduction.ipynb | 249 ++++++++++++++ modelcenter/ERNIE-3.0 Zeus/info.yaml | 17 + .../ERNIE-3.0 Zeus/introduction_cn.ipynb | 147 ++++++++ modelcenter/ERNIE-ViLG/info.yaml | 18 + modelcenter/ERNIE-ViLG/introduction_cn.ipynb | 166 ++++++++++ modelcenter/PINN-CFD/info.yaml | 31 ++ modelcenter/PINN-CFD/introduction.ipynb | 313 ++++++++++++++++++ modelcenter/PP-Matting/benchmark_cn.md | 6 + modelcenter/PP-Matting/introduction_cn.ipynb | 4 + modelcenter/VINER-CAE/CAE2.png | Bin 0 -> 56989 bytes modelcenter/VINER-CAE/info.yaml | 23 ++ modelcenter/VINER-CAE/introduce_en.ipynb | 140 ++++++++ modelcenter/VINER-CAE/introduction_cn.ipynb | 140 ++++++++ 14 files changed, 1285 insertions(+) create mode 100644 modelcenter/DeepCFD/info.yaml create mode 100644 modelcenter/DeepCFD/introduction.ipynb create mode 100644 modelcenter/ERNIE-3.0 Zeus/info.yaml create mode 100644 modelcenter/ERNIE-3.0 Zeus/introduction_cn.ipynb create mode 100644 modelcenter/ERNIE-ViLG/info.yaml create mode 100644 modelcenter/ERNIE-ViLG/introduction_cn.ipynb create mode 100644 modelcenter/PINN-CFD/info.yaml create mode 100644 modelcenter/PINN-CFD/introduction.ipynb create mode 100644 modelcenter/VINER-CAE/CAE2.png create mode 100644 modelcenter/VINER-CAE/info.yaml create mode 100644 modelcenter/VINER-CAE/introduce_en.ipynb create mode 100644 modelcenter/VINER-CAE/introduction_cn.ipynb diff --git a/modelcenter/DeepCFD/info.yaml b/modelcenter/DeepCFD/info.yaml new file mode 100644 index 00000000..c0cad510 --- /dev/null +++ b/modelcenter/DeepCFD/info.yaml @@ -0,0 +1,31 @@ +--- +Model_Info: + name: "DeepCFD" + description: "基于DeepCFD模型实现流体绕过任意障碍物的定常流场仿真" + description_en: "Simulation of steady flow of fluid bypassing any obstacle based on DeepCFD model" + icon: "@后续UE统一设计之后,会存到bos上某个位置" + from_repo: "" + +Task: +- + tag: "科学计算" + tag_en: "Scientific Computing" + sub_tag: "计算流体力学" + sub_tag_en: "Computational fluid dynamics" + +Example: +- + tag: "工业/能源" + tag_en: "Industrial/Energy" + sub_tag: "计算流体力学" + sub_tag_en: "Computational fluid dynamics" + title: "基于PaddlePaddle的DeepCFD复现" + + url: https://aistudio.baidu.com/aistudio/projectdetail/4400677?channelType=0&channel=0 + url_en: https://aistudio.baidu.com/aistudio/projectdetail/4400677?channelType=0&channel=0 + +Datasets: "Data_DeepCFD" +Pulisher: "Baidu" +License: "apache.2.0" +IfTraining: 1 +IfOnlineDemo: 1 diff --git a/modelcenter/DeepCFD/introduction.ipynb b/modelcenter/DeepCFD/introduction.ipynb new file mode 100644 index 00000000..49863ded --- /dev/null +++ b/modelcenter/DeepCFD/introduction.ipynb @@ -0,0 +1,249 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "08bceb91-45c4-48ad-aa62-4acb2b5a2817", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "# 1. DeepCFD 模型简介\n", + "\n", + "计算流体力学(Computational fluid dynamics, CFD)通过求解Navier-Stokes方程(N-S方程),可以获得流体的各种物理量的分布,如密度、压力和速度等,在微电子系统、土木工程和航空航天等领域应用广泛。然而,在某些复杂的应用场景中,如机翼优化和流体与结构相互作用方面,需要使用千万级甚至上亿的网格对问题进行建模(如下图所示,下图展示了F-18战斗机的全机内外流一体结构化网格模型),导致CFD的计算量非常巨大。因此,目前亟需发展出一种相比于传统CFD方法更高效,且可以保持计算精度的方法。这篇文章的作者提到,可以使用深度学习的方法,通过训练少量传统CFD仿真的数据,构建一种数据驱动(data-driven)的CFD计算模型,来解决上述的问题。\n", + "\n", + "\"img\"\n", + "\n", + "本模型是针对论文:[DeepCFD: Efficient steady-state laminar flow approximation with deep convolutional neural networks](https://arxiv.org/abs/2004.08826)[J]基于飞桨框架进行模型复现,文中作者提出了一个基于卷积神经网络(Convolutional neural networks, CNN)的CFD计算模型,称作DeepCFD,该模型可以同时计算流体流过任意障碍物的流场。该方法有以下几个特点:\n", + "\n", + "1. DeepCFD本质上是一种基于CNN的代理模型,可以用于快速计算二维非均匀稳态层流流动,相比于传统的CFD方法,该方法可以在保证计算精度的情况下达到至少三个数量级的加速。\n", + "\n", + "2. DeepCFD可以同时计算流体在x方向和y方向的流体速度,同时还能计算流体压强。\n", + "\n", + "3. 训练该模型的数据由OpenFOAM(一种开源CFD计算软件)计算得到。\n", + "\n", + "\n", + "# 2. 模型效果及应用场景\n", + "\n", + "\n", + "# 3. 模型如何使用\n", + "\n", + "## 3.1 环境安装\n", + "\n", + "* 硬件:GPU、CPU\n", + "* 框架:PaddlePaddle >= 2.0.0\n", + "## 3.2 数据集\n", + "\n", + "数据集使用原作者利用OpenFOAM计算的CFD算例,共981组,分为两个文件(dataX.pkl, dataY.pkl),两个文件大小都是152 MB,形状均为[981, 3, 172, 79]。dataX.pkl包括三种输入:障碍物的SDF、计算域边界的SDF和流动区域的标签;dataY.pkl包括三种输出:流体的x方向速度、y方向速度和流体压强。数据获取使用的计算网格为172×79。\n", + "\n", + "数据集地址:https://aistudio.baidu.com/aistudio/datasetdetail/162674\n", + "\n", + "或https://www.dropbox.com/s/kg0uxjnbhv390jv/Data_DeepCFD.7z?dl=0\n", + "\n", + "## 3.3 快速开始\n", + "\n", + "**step1:克隆本项目**\n", + "\n", + "搜索DeepCFD_with_PaddlePaddle,选择对应的版本,Fork。\n", + "\n", + "![fork.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/fork.png?raw=true)\n", + "\n", + "**step2:开始训练**\n", + "\n", + "选择进入终端。\n", + "\n", + "![click_terminal.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/click_terminal.png?raw=true)\n", + "\n", + "**单卡训练**\n", + "\n", + "```python\n", + "python -m paddle.distributed.launch --gpus=0 train.py\n", + "```\n", + "\n", + "**多卡训练**\n", + "\n", + "以四卡为例\n", + "\n", + "```python\n", + "python -m paddle.distributed.launch --gpus=0,1,2,3 train.py\n", + "```\n", + "\n", + "结果保存在result文件中(注:result文件夹中已经包含了一个完整的训练过程,可在训练前将其清空)。多卡训练会额外生成一个./log/文件夹,存放训练日志\n", + "\n", + "```python\n", + ".\n", + "├── log\n", + "│ ├── workerlog.0\n", + "│ ├── workerlog.1\n", + "│ ├── workerlog.2\n", + "│ └── workerlog.3\n", + "└── train.py\n", + "```\n", + "\n", + "部分训练日志如下所示\n", + "\n", + "```python\n", + "Epoch #1\n", + " Train Loss = 884808909.0\n", + " Train Total MSE = 10197.3000353043\n", + " Train Ux MSE = 3405.3426083044824\n", + " Train Uy MSE = 4334.0962839376825\n", + " Train p MSE = 2457.8616943359375\n", + " Validation Loss = 53205074.5\n", + " Validation Total MSE = 1027.7523040254237\n", + " Validation Ux MSE = 419.7688029661017\n", + " Validation Uy MSE = 543.9674920550848\n", + " Validation p MSE = 64.01604872881356\n", + "Epoch #2\n", + " Train Loss = 75408434.25\n", + " Train Total MSE = 603.198411591199\n", + " Train Ux MSE = 277.9321616481414\n", + " Train Uy MSE = 303.4222437021684\n", + " Train p MSE = 21.843986488987337\n", + " Validation Loss = 17892356.5\n", + " Validation Total MSE = 312.7194186970339\n", + " Validation Ux MSE = 169.64230501853814\n", + " Validation Uy MSE = 140.46789757680085\n", + " Validation p MSE = 2.6092084981627384\n", + "```\n", + "\n", + "**step3:评估模型**\n", + "\n", + "```python\n", + "python eval.py\n", + "```\n", + "\n", + "此时的输出为:\n", + "\n", + "```python\n", + "Total MSE is 1.895322561264038, Ux MSE is 0.6951090097427368, Uy MSE is 0.21001490950584412, p MSE is 0.9901986718177795\n", + "```\n", + "\n", + "**step4:使用预训练模型预测**\n", + "\n", + "考虑到需要展示流场图像对比结果,单独写了一个predict.ipynb来进行模型的验证,需要在Jupyter notebook环境中运行。\n", + "\n", + "运行predict.ipynb,某个障碍物的流场预测结果展示如下:\n", + "\n", + "![paddle_contour.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/paddle_contour.png?raw=true)\n", + "\n", + "## 3.4 代码结构与参数说明\n", + "\n", + "### 3.4.1 代码结构\n", + "\n", + "```python\n", + "DeepCFD_with_PaddlePaddle\n", + "├─ config\n", + "│ └─ config.ini\n", + "├─ data\n", + "│ └─ README.md\n", + "├─ model\n", + "│ └─ UNetEx.py\n", + "├─ result\n", + "│ ├─ DeepCFD_965.pdparams\n", + "│ ├─ results.json\n", + "│ └─ train_log.txt\n", + "└─ utils\n", + " ├─ functions.py\n", + " └─ train_functions.py \n", + "├─ README.md\n", + "├─ README_cn.md\n", + "├─ eval.py\n", + "├─ train.py\n", + "├─ predict.ipynb\n", + "├─ requirements.txt\n", + "```\n", + "\n", + "### 3.4.2 参数说明\n", + "\n", + "可以在/DeepCFD_with_PaddlePaddle/config/config.ini中设置训练的参数,包括以下内容:\n", + "\n", + "| 参数 | 推荐值 | 额外说明 |\n", + "| ---------------- | -------------------- | --------------------------------------------- |\n", + "| batch_size | 64 | |\n", + "| train_test_ratio | 0.7 | 训练集占数据集的比例,0.7即训练集70%测试集30% |\n", + "| learning_rate | 0.001 | |\n", + "| weight_decay | 0.005 | AdamW专用,若修改优化算法需要修改train.py |\n", + "| epochs | 1000 | |\n", + "| kernel_size | 5 | 卷积核大小 |\n", + "| filters | 8, 16, 32, 32 | 卷积层channel数目 |\n", + "| batch_norm | 0 | 批量正则化,0为False,1为True |\n", + "| weight_norm | 0 | 权重正则化,0为False,1为True |\n", + "| data_path | ./data | 数据集路径,视具体情况设置 |\n", + "| save_path | ./result | 模型和训练记录的保存路径,视具体情况设置 |\n", + "| model_name | DeepCFD_965.pdparams | 具体加载的模型名称,后缀不能省略 |\n", + "\n", + "\n", + "## 3.5 预测结果\n", + "\n", + "下图展示了原文的预测结果,文中评价模型的优劣共包含四个指标:Total MSE、Ux MSE、Uy MSE、p MSE(MSE的意思是均方根误差)。\n", + "\n", + "![metrics.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/metrics.png?raw=true)\n", + "\n", + "下图展示了某种形状障碍物的CFD(注:simpleFOAM是OpenFOAM求解器的一种)和DeepCFD流场计算结果对比。\n", + "\n", + "![pytorch_contour.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/pytorch_contour.png?raw=true)\n", + "# 4. 模型原理\n", + "\n", + "下面两张图分别为该方法的计算示意图和网络结构图。文中使用的DeepCFD网络基本结构为有3个输入和3个输出的U-net型网络。该模型输入为计算域中障碍物的符号距离函数(Signed distance function, SDF)、计算域边界的SDF和流动区域的标签;输出为流体的x方向速度、y方向速度以及流体压强。该模型的基本原理就是利用编码器部分的卷积层将3个输入下采样,变为中间量,然后使用相同结构的解码器中的反卷积层将中间量上采样为3个流体物理量输出。\n", + "\n", + "![compute_process.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/compute_process.png?raw=true)\n", + "\n", + "![DeepCFD_Net.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/DeepCFD_Net.png?raw=true)\n", + "\n", + "\n", + "# 5. 注意事项\n", + "## 5.1 模型验收标准\n", + "\n", + "复现的验收标准如下:\n", + "\n", + "![standard.png](https://github.com/zbyandmoon/Picture/blob/main/picture_DeepCFD/standard.png?raw=true)\n", + "\n", + "## 5.2 指标实现情况\n", + "\n", + "复现的实现指标如下:\n", + "\n", + "```python\n", + "Total MSE = 1.8955801725387573\n", + "Ux MSE = 0.6953578591346741\n", + "Uy MSE = 0.21001338958740234\n", + "p MSE = 0.9902092218399048\n", + "```\n", + "\n", + "其中,Total MSE、Ux MSE和Uy MSE在验收标准范围内,p MSE略小于验收标准的最小值。\n", + "\n", + "## 5.3 复现地址\n", + "\n", + "论文复现地址:\n", + "\n", + "AI Studio: https://aistudio.baidu.com/aistudio/projectdetail/4400677?contributionType=1\n", + "\n", + "github: https://github.com/zbyandmoon/DeepCFD_with_PaddlePaddle/tree/main/paddle\n", + "\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "py35-paddle1.2.0" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + }, + "toc-autonumbering": true + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/modelcenter/ERNIE-3.0 Zeus/info.yaml b/modelcenter/ERNIE-3.0 Zeus/info.yaml new file mode 100644 index 00000000..5bb7fcb1 --- /dev/null +++ b/modelcenter/ERNIE-3.0 Zeus/info.yaml @@ -0,0 +1,17 @@ +--- +Model_Info: + name: "ERNIE 3.0 Zeus" + description: "文心任务知识增强大模型" + description_en: "Large model of task knowledge enhancement" + icon: "@后续UE统一设计之后,会存到bos上某个位置" + from_repo: "" +Task: +- tag_en: "Wenxin Big Model" + tag: "文心大模型" + sub_tag_en: "ERNIE-3.0 Zeus" + sub_tag: "任务知识增强" +Datasets: "" +Pulisher: "Baidu" +License: "apache.2.0" +IfTraining: 1 +IfOnlineDemo: 1 diff --git a/modelcenter/ERNIE-3.0 Zeus/introduction_cn.ipynb b/modelcenter/ERNIE-3.0 Zeus/introduction_cn.ipynb new file mode 100644 index 00000000..cd4e2162 --- /dev/null +++ b/modelcenter/ERNIE-3.0 Zeus/introduction_cn.ipynb @@ -0,0 +1,147 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 1. ERNIE 3.0 Zeus 模型简介\n", + "\n", + "ERNIE 3.0 Zeus 是 ERNIE 3.0 系列模型的最新升级。其除了对无标注数据和知识图谱的学习之外,还通过持续学习对百余种不同形式的任务数据学习。实现了任务知识增强,显著提升了模型的零样本/小样本学习能力。\n", + "\n", + "## 2. 模型原理介绍\n", + "\n", + "ERNIE 3.0 Zeus 在学习过程中使用统一范式的多任务学习,建模数据中不同粒度的语义信息。为了进一步学习特定任务的相关知识,ERNIE 3.0 Zeus 提出了层次化提示(Prompt)学习技术。在数据构造时通过层次化的 Text Prompt 库将百余种不同的任务统一组织成自然语言的形式,和海量无监督文本以及百度知识图谱联合学习。此外训练过程引入了层次化的 Soft Prompt 建模了不同任务之间的共性与特性,进一步提升了模型对于不同下游任务的建模能力。\n", + "\n", + "![ERNIE 3.0 Zeus.png](https://bce.bdstatic.com/doc/ai-doc/wenxin/ERNIE%203.0%20Zeus_b3f228d.png)\n", + "\n", + "## 3. 模型快速使用\n", + " \n", + "#### 温馨提示\n", + "\n", + "每个账户每日免费请求ERNIE 3.0系列服务的上限为200条输入,免费请求额度共2000条输入。如果您有更多请求需求,请跟我们联系:[体验申请](https://wenxin.baidu.com/wenxin/apply3)\n", + "\n", + "\n", + "#### 获取API Key\n", + "\n", + "您可以登录大模型开放API获取您的专属获取您的专属 API Key(AK)和Secret Key(SK),点击[链接](https://wenxin.baidu.com/moduleApi/key)查看您的AK和SK。请注意保护您的密钥信息,避免泄露。您可以通过删除已泄露的密钥来保护您的账户安全。\n", + "\n", + "![image.png](https://bce.bdstatic.com/doc/AIDP/wenxin/image_3a02673.png)\n", + "\n", + "#### 步骤一:安装wenxin-api工具包" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "!pip install --upgrade wenxin-api" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "#### 步骤二: 在python环境中使用\n", + "(注意:建议使用python3.7及以上版本)\n", + "\n", + "您可以通过以下代码使用您的数据集进行模型精调(将上一步骤申请的AK、SK填入下方代码的your ak和your sk中)。\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# -*- coding: utf-8 -*\n", + "import wenxin_api # 可以通过\"pip install wenxin-api\"命令安装\n", + "from wenxin_api.tasks.free_qa import FreeQA\n", + "wenxin_api.ak = \"your ak\" #输入您的API Key\n", + "wenxin_api.sk = \"your sk\" #输入您的Secret Key\n", + "input_dict = {\n", + " \"text\": \"问题:交朋友的原则是什么?\\n回答:\",\n", + " \"seq_len\": 512,\n", + " \"topp\": 0.5,\n", + " \"penalty_score\": 1.2,\n", + " \"min_dec_len\": 2,\n", + " \"min_dec_penalty_text\": \"。?:![]\",\n", + " \"is_unidirectional\": 0,\n", + " \"task_prompt\": \"qa\",\n", + " \"mask_type\": \"paragraph\"\n", + "}\n", + "rst = FreeQA.create(**input_dict)\n", + "print(rst)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "其中常见的状态码可以参考:[状态码汇总](https://wenxin.baidu.com/wenxin/docs#Ol6th102y)\n", + "\n", + "## 4. 模型效果\n", + "\n", + "在公开数据集上零样本/小样本学习的效果\n", + "\n", + "![效果 1.png](https://bce.bdstatic.com/doc/ai-doc/wenxin/%E6%95%88%E6%9E%9C%201_bd6c09d.png)\n", + "\n", + "在小样本学习理解任务上的效果\n", + "\n", + "![image (29).png](https://bce.bdstatic.com/doc/ai-doc/wenxin/image%20%2829%29_69558b6.png)\n", + "\n", + "在小样本学习生成任务上的效果\n", + "\n", + "![image (30).png](https://bce.bdstatic.com/doc/ai-doc/wenxin/image%20%2830%29_6a20d06.png)\n", + "\n", + "## 5. 应用场景\n", + "\n", + "智能创作、摘要生成、问答、语义检索、情感分析、信息抽取、文本匹配、文本纠错等各类自然语言理解和生成任务\n", + "\n", + "## 6. 使用方案\n", + "\n", + "ERNIE 3.0 Zeus 发布了业界首个开放的千亿参数的中文生成 API。供各行各业的开发者调用和开发,使用其强大的零样本和小样本学习能力。\n", + "\n", + "#### 通过飞桨旸谷社区在线体验\n", + "\n", + "通过飞桨旸谷社区在线体验 ERNIE 3.0 Zeus 的文本理解和文本创作能力,您可以通过 ERNIE 3.0 Zeus Prompt 接口体验预置 prompt 技能,预置技能包括作文创作、文案创作、摘要生成、问题生成、古诗创作、对联续写、小说续写、自由问答、情感分析、信息抽取、同义改写、文本匹配、文本纠错、完型填空、Text2SQL 等十余种预置技能,也可以自定义 prompt 体验 ERNIE 3.0 Zeus 强大的零样本、小样本自然语言处理能力。同样的,通过 ERNIE3.0 Zeus 接口您可以随意输入内容,体验模型强大的续写能力。\n", + "\n", + "#### 通过 API 调用体验\n", + "\n", + "ERNIE 3.0 Zeus 提供[ API 体验调用的入口](https://wenxin.baidu.com/ernie3),您也可以在飞桨旸谷社区 API 体验专区申请 AK、SK 进行接口调用体验。\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "py35-paddle1.2.0" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/modelcenter/ERNIE-ViLG/info.yaml b/modelcenter/ERNIE-ViLG/info.yaml new file mode 100644 index 00000000..f27de635 --- /dev/null +++ b/modelcenter/ERNIE-ViLG/info.yaml @@ -0,0 +1,18 @@ +--- +Model_Info: + name: "ERNIE-ViLG" + description: "文心知识增强跨模态图文生成大模型" + description_en: "Large model of text centered knowledge enhanced cross modal text\ + \ generation" + icon: "@后续UE统一设计之后,会存到bos上某个位置" + from_repo: "" +Task: +- tag_en: "Wenxin Big Model" + tag: "文心大模型" + sub_tag_en: "ERNIE-ViLG" + sub_tag: "图文生成" +Datasets: "" +Pulisher: "Baidu" +License: "apache.2.0" +IfTraining: 1 +IfOnlineDemo: 1 diff --git a/modelcenter/ERNIE-ViLG/introduction_cn.ipynb b/modelcenter/ERNIE-ViLG/introduction_cn.ipynb new file mode 100644 index 00000000..d6c1d65d --- /dev/null +++ b/modelcenter/ERNIE-ViLG/introduction_cn.ipynb @@ -0,0 +1,166 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 1. ERNIE-ViLG模型简介\n", + "\n", + "ERNIE-ViLG是一个知识增强跨模态图文生成大模型,将文生成图和图生成文任务融合到同一个模型进行端到端的学习,从而实现文本和图像的跨模态语义对齐。可以支持用户进行内容创作,让每个用户都能够体验到一个低门槛的创作平台。[点击此处进去体验页面](https://wenxin.baidu.com/moduleApi/ernieVilg)\n", + "\n", + "## 2. 模型原理介绍\n", + "百度文心ERNIE-ViLG 模型提出统一的跨模态双向生成模型,通过自回归生成模式对图像生成和文本生成任务进行统一建模,更好地捕捉模态间的语义对齐关系,从而同时提升图文双向生成任务的效果。文心 ERNIE-ViLG 在文本生成图像的权威公开数据集 MS-COCO 上,图片质量评估指标 FID(Fréchet Inception Distance)远超 OpenAI 的DALL-E等同类模型,并刷新了图像描述多项任务的最好效果。此外,文心ERNIE-ViLG还凭借强大的跨模态理解能力,在生成式视觉问答任务上也取得了领先成绩。\n", + "\n", + "## 3. 模型快速使用\n", + "### 接口说明\n", + "\n", + "ERNIE-ViLG跨模态文生图:基于文心ERNIE-ViLG大模型,根据用户输入的文本,自动创作图像。\n", + "\n", + "* 温馨提示:\n", + "\n", + "每个账户每日免费请求ERNIE-ViLG API服务的上限为100条输入,免费请求额度共500条输入。如需提额,请在[合作咨询](https://wenxin.baidu.com/wenxin/apply)的需求描述里填写您的购买需求。\n", + "\n", + "### 获取API Key\n", + "\n", + "您可以登录大模型开放API获取您的专属获取您的专属 API Key(AK)和Secret Key(SK),点击[链接](https://wenxin.baidu.com/moduleApi/key)查看您的AK和SK。请注意保护您的密钥信息,避免泄露。您可以通过删除已泄露的密钥来保护您的账户安全。\n", + "\n", + "![image.png](https://bce.bdstatic.com/doc/AIDP/wenxin/image_9f4929b.png)\n", + "\n", + "### 调用方式\n", + "\n", + "#### 在本地Python环境调用接口 " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# 安装wenxin-api工具包\n", + "# 注意:建议python版本在python 3.7及以上版本\n", + "!pip install --upgrade wenxin-api" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "* 如何调用" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# -*- coding: utf-8 -*\n", + "import wenxin_api # 可以通过\"pip install wenxin-api\"命令安装\n", + "from wenxin_api.tasks.text_to_image import TextToImage\n", + "wenxin_api.ak = \"your_ak\"\n", + "wenxin_api.sk = \"your_sk\"\n", + "input_dict = {\n", + " \"text\": \"睡莲\",\n", + " \"style\": \"油画\"\n", + "}\n", + "rst = TextToImage.create(**input_dict)\n", + "print(rst)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "* 等待过程返回信息\n", + "```python\n", + "2022-08-12 02:23:15,488 - model is painting now!, taskId: 1023101, waiting: 2m\n", + "2022-08-12 02:23:35,641 - model is painting now!, taskId: 1023101, waiting: 1m\n", + "2022-08-12 02:23:55,982 - model is painting now!, taskId: 1023101, waiting: 1m\n", + "```\n", + "\n", + "* 返回结果示例\n", + "\n", + "```python\n", + "{\n", + " \"imgUrls\":[\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fbex\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fbi4\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fb5q\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fb30\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fbv9\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fba2\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fbbf\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fbms\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fbu7\",\n", + " \"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/61157afdaef4f0dfef0d5e51459160fbct\"\n", + " ]\n", + "}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "\n", + "\n", + "## 4. 模型效果\n", + "以下是ERNIE ViLG生成图片效果\n", + "\n", + "prompt:震撼的科幻插图,神秘宇宙背景,一只巨大的星球, 大场景,超高清,未来主义\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/aafe6e178a0e471c87a66bbe12ad86df24c5a7df607e4dc79b9a579ef7b2f61e)\n", + "\n", + "prompt:二次元 少女 梦幻 长袍 冰霜 帅气 画师krenz,二次元\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/c5a289eb93084d709b7fcf5f88202d5e4dc6f64b17c245d9a6232824ee44f2de)\n", + "\n", + "prompt:浮世绘日本科幻幻想哑光绘画,动漫风格神道寺禅园英雄动作序列,包豪斯,概念艺术\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/7da123c7c1d24cefab9304f35cebb5d4bf22b63e85b5427cb3f8f08df74acd94)\n", + "\n", + "## 5. 使用方案\n", + "\n", + "\n", + "#### 通过飞桨旸谷社区在线体验\n", + "\n", + "通过飞桨旸谷社区在线体验 ERNIE-ViLG的文生图能力。\n", + "\n", + "#### 通过 API 调用体验\n", + "\n", + "ERNIE-ViLG 提供API体验调用的入口,您也可以在飞桨旸谷社区 API 体验专区申请 AK、SK 进行接口调用体验。" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "py35-paddle1.2.0" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/modelcenter/PINN-CFD/info.yaml b/modelcenter/PINN-CFD/info.yaml new file mode 100644 index 00000000..e4446e08 --- /dev/null +++ b/modelcenter/PINN-CFD/info.yaml @@ -0,0 +1,31 @@ +--- +Model_Info: + name: "PINN_CFD" + description: "基于PINN的2D圆柱绕流模型设计及仿真验证" + description_en: "Design and simulation of 2D cylinder flow model" + icon: "@后续UE统一设计之后,会存到bos上某个位置" + from_repo: "PaddleScience" +Task: +- + tag: "科学计算" + tag_en: "Scientific Computing" + sub_tag: "2D圆柱绕流" + sub_tag_en: "2D cylinder flow" + +Example: +- + tag: "工业/能源" + tag_en: "Industrial/Energy" + sub_tag: "圆柱绕流" + sub_tag_en: "Cylinder Flow" + title: "基于AI求解2D非定常圆柱绕流,真的很流体" + + url: https://aistudio.baidu.com/aistudio/projectdetail/4178470?contributionType=1 + url_en: https://aistudio.baidu.com/aistudio/projectdetail/4178470?contributionType=1 + + +Datasets: "cylinder2D_continuous" +Pulisher: "Baidu" +License: "apache.2.0" +IfTraining: 1 +IfOnlineDemo: 1 diff --git a/modelcenter/PINN-CFD/introduction.ipynb b/modelcenter/PINN-CFD/introduction.ipynb new file mode 100644 index 00000000..964f83b2 --- /dev/null +++ b/modelcenter/PINN-CFD/introduction.ipynb @@ -0,0 +1,313 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. 2D cylinder flow模型简介\n", + "【[圆柱绕流](https://baike.baidu.com/item/%E5%9C%86%E6%9F%B1%E7%BB%95%E6%B5%81/4949598?fr=aladdin)】是指二维圆柱低速定常绕流的流型只与Re数有关。在Re≤1时,流场中的惯性力与粘性力相比居次要地位,圆柱上下游的流线前后对称,阻力系数近似与Re成反比(阻力系数为10~60),此Re数范围的绕流称为斯托克斯区;随着Re的增大,圆柱上下游的流线逐渐失去对称性。\n", + "\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/cad237431534419ba2c771727a2e0c9a5be0f0c75ddb4ab49245ff8321014b16)\n", + "\n", + " --------摘自《神奇的流体》,宫华胜" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. 模型效果及应用场景\n", + "## 2.1. 背景介绍\n", + "简单引入科学计算概念以及CFD领域相关概念,同时模型效果预览如下(基于PINN的流场结果为AI for Science结果)\n", + "* 基于CFD专业软件OpenFoam的流场水平速度\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/8c5b6a6eed6a405990ecf069103c5133e3969246b2e3417ba6649d43e1751a22)\n", + "\n", + "* 基于PINN的流场水平速度\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/7a3748202dad42878e053b03fddab1f1627d5d5c9bf348e78c17cc62751fd5f8)\n", + "\n", + "### 2.1.1. 科学计算\n", + "\n", + "【AI For Science】当前AI技术在CV、NLP等领域已有了较为广泛的应用,替代传统方法完成缺陷检测、人脸检测、物体分割、阅读理解、文本生成等任务,在产业界也形成了规模化的落地。但是放眼到更加广阔的工业设计、制造等领域,仍有诸多科学和工程问题亟待解决。比如对于高层建筑结构、大跨桥梁、海上石油平台、航空飞机等,流体和结构的复杂相互作用会引起动力荷载,进而导致抖振、涡振、驰振、颤振等流致振动,影响结构安全与服役年限。数值模拟是研究工程结构流致振动的有效方法之一,但是传统数值方法需要大量的计算资源,在计算速度上有很大的局限性等等。\n", + "\n", + "在科学计算领域,往往需要针对海洋气象、能源材料、航空航天、生物制药等具体场景中的物理问题进行模拟。由于大多数物理规律可以表达为偏微分方程的形式,所以偏微分方程组的求解成为了解决科学计算领域问题的关键。神经网络具备“万能逼近”的能力,即只要网络有足够多的神经元,就可以充分地逼近任意一个连续函数。所以使用AI方法解决科学计算问题的一个思路是训练神经网络以模拟某个偏微分方程组的解函数。\n", + "\n", + "详见[飞桨加速CFD(计算流体力学)原理与实践](https://mp.weixin.qq.com/s/pQtyKNOH2g-pyO7AqMuQmw)\n", + "\n", + "\n", + "【飞桨科学计算工具组件PaddleScience】旨在加速求解高维的数学物理方程,综合数学计算和物理数据的处理方法,提供数据驱动以及物理机理约束的深度学习求解模型,解决CFD/CAE等多物理场跨尺度模拟的难点。现提供泛化的微分方程、PINNs(物理信息神经网络)和FNO(傅立叶神经算子)等求解器,并提供圆柱绕流、涡激振动等典型计算流体力学案例。综合应用AI与数据结合的科学研究新范式,突破传统科学计算面临的维数高、时间长、跨尺度的挑战,提升智能制造系统设计、建模仿真、分析优化等技术。\n", + "\n", + "\n", + "\n", + "\n", + "相信大家能看到这里的一定也是行业内的专家,关于这些流体的基础概念本文就不做多说了。\n", + "\n", + "### 2.1.2. PINN方法\n", + "\n", + "【PINN】基于物理信息的神经网络 (Physics Informed Neural Network,简称PINN) 是一种科学机器在传统数值领域的应用方法,特别是用于解决与偏微分方程 (PDE) 相关的各种问题,包括方程求解、参数反演、模型发现、控制与优化等。\n", + "\n", + "其实,简单点说就是在AI中神经网络多了我们物理学科中的控制方程作为约束,并将我们之前CFD中求解的时空信息,作为训练点,在使**网络输出尽可能的符合初边值与控制方程约束的过程中不断优化网络**。这个网络就是我们拟合的CFD求解器。\n", + "\n", + "这种想法不是近年才有的,但是确实是随着深度学习的发展逐渐应用到了CFD或者传统的物理仿真上。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. 模型如何使用\n", + "基于深度学习,采用PINN方法求解圆柱绕流问题主要由以下几步构成,前提是我们需要借助一个比较成熟的深度学习框架,当然我一定会用百度的[PaddlePaddle](https://www.paddlepaddle.org.cn/)框架🤣,事实证明也是比较nice的。\n", + "\n", + "百度飞桨框架提供了自动微分、多类算子以及比较广泛的API。同时百度同学基于飞桨框架,开发了一套开源的科学计算套件[PaddleScience](https://github.com/PaddlePaddle/PaddleScience),里面提供了一些基础的DEMO,也为大家后期进行深一步的工程探索提供了良好的条件。\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/dd7ec9aeeef94ad9bad3768f370a8ded9e9e86dc9ec841cebc50a339adff1e71)\n", + "\n", + "\n", + "言归正传,接下来给搭建step by step的介绍本项目的实现流程。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1. 环境配置\n", + "### 3.1.1. 安装Paddle-gpu-develop\n", + "在进行AI求解圆柱绕流问题前,我们需要先明确深度学习的框架以及科学计算套件等环境。需要注意的是:\n", + "* 当前PaddleScience套件所应用的深度学习框架为Paddle2.3.2版本,可详见[paddle安装](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html)\n", + "\n", + "对于当前示例运行环境,安装代码如下:\n", + "```\n", + "!python -m pip install paddlepaddle-gpu==2.3.2.post101 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html\n", + "```\n", + "\n", + "### 3.1.2. 安装PaddleScience及依赖项\n", + "可从git克隆到目标路径,同时也可以下载后upload.\n", + "cd至PaddleScience路径,安装依赖项,基于本示例,代码如下:\n", + "\n", + "```\n", + "%cd ~/work/PaddleScience_CubeDomain/refactor_PaddleScience_0430/\n", + "!pip install -r requirements.txt\n", + "```\n", + "\n", + "### 3.1.3. 环境变量定义\n", + "代码示意如下:\n", + "```\n", + "%env PYTHONPATH=/home/aistudio/work/PaddleScience_CubeDomain/refactor_PaddleScience_0430\n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import paddle\n", + "!paddle --version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "!python -m pip install paddlepaddle-gpu==2.3.2.post101 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html\n", + "%cd ~/work/PaddleScience_CubeDomain/refactor_PaddleScience_0430/\n", + "!pip install -r requirements.txt\n", + "%env PYTHONPATH=/home/aistudio/work/PaddleScience_CubeDomain/refactor_PaddleScience_0430" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "环境配置完成后,log部分示意如下:\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/843466c039794e21a17beaeec45c02e2e9e7500fbdf2401c961a682d1be3e380)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## 3.2. 数据集导入\n", + "\n", + "神经网络的训练过程需要大量的训练数据集,我们将CFD计算中的时间t, 空间(x, y)作为训练集对网络进行训练,本案例采用了半监督的方式,即基于部分CFD计算的结果来监督网络的训练过程(目的也是加速网络的收敛,后期逐渐开放结果)\n", + "\n", + ">本项目直接将openfoam中定义的网格信息作为神经网络的训练点,并使用load_cfd_data模块加载数据\n", + "\n", + "结合CFD求解,训练数据同样也会按照初始值、边界条件、流体域内空间点等进行区分,分别定义了如下分类数据,数据保存在./data_0430文件夹下:\n", + "* 域内训练点:\n", + ">domain_train ----流体域内\n", + "\n", + "* 边界训练点:\n", + "当前采用了速度入口、压力出口以及无滑移圆柱边界,并以Re=100进行分析,以下数据用于评估bc_loss.\n", + ">domain_inlet ----流体域入口 \n", + ">domain_outlet ----流体域出口 \n", + ">domain_cylinder ----圆柱周边\n", + "\n", + "* 初始值:\n", + "采样相对初始时刻作为0时刻,从openfoam提取部分位置的流场信息作为神经网络的初始值监督结果,数据保存在./data_0430/initial文件夹下,用于评估ic_loss.\n", + "\n", + "\n", + "同时,也从openfoam中提取了流场某些关键位置的速度、压力信息等作为网络训练的监督数据。数据保存在./data_0430/probe文件夹下。\n", + " \n", + "\n", + "数据加载可采用如下模块实现:\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/52bd00787a1547269cde66230d2d4455edc16d1091b341918002007757cad60d)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.3. 模型训练\n", + "\n", + "基于数据导入模块、网络及训练定义模块等,可直接运行2d_unsteady_cylinder_train.py执行圆柱绕流模型的训练。\n", + "针对该示例,在V100-32G GPU显卡上,预估训练100000次左右(8h+)能够得到比较理想的结果。\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "!python examples/cylinder/2d_unsteady_cylinder_train.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "训练过程log部分示意:\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/ffc6273e1f284493970d2690ce667dec2a4e593b714e42678199e5c727549c62)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## 3.4. 模型预测\n", + "结合训练完成后保存的网络,直接进行一次前向计算,即可得到训练过程中所有时刻的结果,只需执行如下代码,生成的结果会保存在vtk文件夹中,可通过paraview打开。\n", + "```\n", + "!python examples/cylinder/2d_unsteady_cylinder_predict.py\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "!python examples/cylinder/2d_unsteady_cylinder_predict.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.5. 精度分析\n", + "针对PINN中计算的流场结果,与OpenFoam结果对比如下:\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/04b6593bcc9443f5b7a605d1fb1719e7f9d5dc37e32a4a26ab4b31f6f0e5248a)\n", + "\n", + "\n", + "从对比结果可知,基于AI方式求解的cfd圆柱绕流模型,在大部分区域结果精度已经非常高。\n", + "但在个别位置,如边界层上则相对误差较大。由于边界层一直是流体中比较复杂的问题,也说明了AI For CFD还有很大的改进空间。\n", + "\n", + "\n", + "***以上,欢迎各位AI+Science的小伙伴探讨交流并加入飞桨科学计算的[共创计划](http://www.paddlepaddle.org.cn/science),也非常欢迎大家基于飞桨框架以及飞桨科学计算组件探索以及共享一些更有价值的DEMO!***\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. 模型原理\n", + "## 4.1. 物理抽象\n", + "\n", + "* 给定计算域内的圆柱绕流\n", + "边界条件:\n", + "\n", + "|边界|类型|\n", + "| -------- | ------ |\n", + "| 入口| 速度入口 |\n", + "| 出口 | 零压 |\n", + "| 圆柱与上下壁面 | 无滑移 |\n", + "\n", + "* 初始值:\n", + "\n", + "计算域内采用相对初始时刻的流场信息,相对初始时刻可选择流场稳定的某一时刻\n", + "\n", + "\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/4b050e64262f4d86b5099c70f3cdf5e62c2ec5e787d64e28b0079f2e7d9ea66f)\n", + "\n", + "## 4.2. 物性参数定义\n", + "本示例针对不可压缩流体,并采用2D非定常时间连续方式的流体连续性方程以及动量方程作为控制方程。\n", + "模型中圆柱半径为1,针对Re=100的工况,定义入口流速为1,可调节粘度定义为2e-2。无量纲化的N-S方程示意如下:\n", + "\n", + "## 4.3. 控制方程(损失函数)\n", + "![](https://ai-studio-static-online.cdn.bcebos.com/aa303caf72c54029a6c21340c31e7791d10a4b2c585e4091aaa92e40f32b6fa0)\n", + "\n", + "\n", + "同时,按照速度入口、压力出口、无滑移圆柱边界等定义边界条件,并定义初始流场信息为相对0时刻,即流场稳定建立后的某一个相对时刻。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## 4.4. 神经网络\n", + "\n", + "采用PINN的方法,并选择FCNet作为深度学习的神经网络,定义代码如下,并在Train模块中直接调用即可。\n", + "```\n", + "PINN = psolver.PysicsInformedNeuralNetwork(\n", + " layers=6, nu=2e-2, bc_weight=10, eq_weight=1, ic_weight=10, supervised_data_weight=10, \n", + " outlet_weight=1, training_type='half-supervised', net_params=net_params)\n", + "```\n", + "\n", + "本示例采用Adam优化器求解,关于超参数的定义如下所示:\n", + "```\n", + "adm_opt = psci.optimizer.Adam(learning_rate=1e-4, weight_decay=0.9,parameters=PINN.net.parameters())\n", + "```" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "py35-paddle1.2.0" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + }, + "toc-autonumbering": true + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/modelcenter/PP-Matting/benchmark_cn.md b/modelcenter/PP-Matting/benchmark_cn.md index 375b55f1..6152c024 100644 --- a/modelcenter/PP-Matting/benchmark_cn.md +++ b/modelcenter/PP-Matting/benchmark_cn.md @@ -1,3 +1,7 @@ +# 模型列表 + +======= + ## 1. 训练Benchmark ### 1.1 软硬件环境 @@ -10,6 +14,7 @@ * 人像抠图使用内部数据。 ### 1.3 指标 + |模型名称 | 模型简介 | 输入尺寸 | |---|---|---| |ppmatting_hrnet_w48 | 通用目标抠图 | 512 | @@ -22,6 +27,7 @@ * 模型推理速度测试采用单卡V100,batch size=1进行测试,使用CUDA 10.2, CUDNN 7.6.5, PaddlePaddle-gpu 2.3.2。 ### 2.2 数据集 + * 通用目标抠图:Compositon-1k或Distinctions-646中的测试集部分。 * 人像抠图:PPM-100和AIM-500中的人像部分,共195张, 记为PPM-AIM-195。 diff --git a/modelcenter/PP-Matting/introduction_cn.ipynb b/modelcenter/PP-Matting/introduction_cn.ipynb index 7fd30d24..c20cf3ad 100644 --- a/modelcenter/PP-Matting/introduction_cn.ipynb +++ b/modelcenter/PP-Matting/introduction_cn.ipynb @@ -153,7 +153,11 @@ "* 分支设计,明确语义预测和细节预测任务。\n", "* SCB(Semantic Context Branch)分支进行语义预测,保证图像整体预测正确性,其将图像粗略的分为三个部分,即前景、背景和过度区域。\n", "* HRDB(High-Resolution Detail Branch)维持高分辨率特征提取过程,保证细节不受损失。\n", +<<<<<<< HEAD + "* 引导流结构设计(Guidance Flow)使HRBD分支获取SCB分支提取的语义信息,使HRDB分支能专注与过度区域的细节预测。\n" +======= "* 引导流结构设计(Guidance Flow)使HRDB分支获取SCB分支提取的语义信息,使HRDB分支能专注与过度区域的细节预测。\n" +>>>>>>> b352b78ea8a7ca2c7e0c87c4b4bcfe695ebd70e3 ] }, { diff --git a/modelcenter/VINER-CAE/CAE2.png b/modelcenter/VINER-CAE/CAE2.png new file mode 100644 index 0000000000000000000000000000000000000000..f24f1920ac00463150b170e2289cceb6ada0295a GIT binary patch literal 56989 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

(Pf*ye3G59^S5j@gn6z3 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 F{SQ=t+NS^j literal 0 HcmV?d00001 diff --git a/modelcenter/VINER-CAE/info.yaml b/modelcenter/VINER-CAE/info.yaml new file mode 100644 index 00000000..978030a1 --- /dev/null +++ b/modelcenter/VINER-CAE/info.yaml @@ -0,0 +1,23 @@ +--- +Model_Info: + name: "VIMER-CAE1.0" + description: "自监督预训练方法" + description_en: "masked image modeling approach for self-supervised representation pretraining" + icon: "" + from_repo: "VIMER" + +Task: + - tag_en: "Wenxin Big Models" + tag: "文心大模型" + sub_tag_en: "VIMER-CAE" + sub_tag: "自监督预训练" + + +Datasets: "ImageNet1K, MSCOCO, ADE20K" +Pulisher: "Baidu" +License: "apache.2.0" +Paper: + - title: "Context Autoencoder for Self-Supervised Representation Learning" + url: "https://arxiv.org/abs/2202.03026" +IfTraining: 0 +IfOnlineDemo: 1 \ No newline at end of file diff --git a/modelcenter/VINER-CAE/introduce_en.ipynb b/modelcenter/VINER-CAE/introduce_en.ipynb new file mode 100644 index 00000000..34668f99 --- /dev/null +++ b/modelcenter/VINER-CAE/introduce_en.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "1、模型简介\n", + "\n", + "Mask Image Modeling (MIM) 方法,在 NLP 领域 (例如BERT) 得到了广泛的应用。随着 ViT 的提出和发展,人们也尝试将 MIM 应用到视觉领域并取得了一定进展。在此之前,视觉自监督算法主要沿着 contrastive learning 的思路去设计,而 MIM 打开了新的大门。“Context Autoencoder for Self-Supervised Representation Learning”,即VEMER-CAE,提出一种新的 MIM 方法 CAE。VIMER-CAE基于自监督图像掩码恢复原理,创新性地提出“图像表征和掩码预测独立学习”的预训练框架,通过编码模块对输入的图像块进行特征表达,并利用隐式上下文回归和解码模块对输入图像的掩码块进行特征表达恢复,在恢复建模问题上提高了预训练模型的视觉表征能力。基于自监督方法训练的预训练模型在下游各类图像任务上取得了明显的效果提升,其中在目标检测、实力分割、语义分割等任务的指标上达到SOT R效果。\n", + "\n", + "

\n", + "\n", + "\n", + "2、模型效果\n", + "\n", + "1)分类场景ImageNet-1K数据集上的结果 \n", + "\n", + "| model | pretrain | Linear Prob(Top-1) | Attentive Prob(Top-1) | Finetune(Top-1) \n", + "|:--------:|:--------:|:--------:|:--------:| :--------:| \n", + "| [Vit-Base](https://vimer.bj.bcebos.com/CAE/pt_ep800_fp32_checkpoint-799.pd) | 800e | 69.3% | 76.7% | 83.7% | \n", + "| Vit-Large | 1600e | 78.1% | 81.2% | 86.3% |\n", + "\n", + "\n", + "2)分割场景ADE20K数据集上的结果\n", + "\n", + "| Backbone | Method | Crop Size | Lr Schd | mIoU | #params | FLOPs | \n", + "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | \n", + "| Vit-Base-800e | UperNet | 512x512 | 160K | 49.69 | 81M | 1038G |\n", + "\n", + "\n", + "\n", + "\n", + "## Citing Context Autoencoder for Self-Supervised Representation Learning\n", + "\n", + "@article{chen2022context,\n", + " title={Context autoencoder for self-supervised representation learning},\n", + " author={Chen, Xiaokang and Ding, Mingyu and Wang, Xiaodi and Xin, Ying and Mo, Shentong and Wang, Yunhao and Han, Shumin and Luo, Ping and Zeng, Gang and Wang, Jingdong},\n", + " journal={arXiv preprint arXiv:2202.03026},\n", + " year={2022}\n", + "}\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "# 查看工作区文件, 该目录下的变更将会持久保存. 请及时清理不必要的文件, 避免加载过慢.\n", + "# View personal work directory. \n", + "# All changes under this directory will be kept even after reset. \n", + "# Please clean unnecessary files in time to speed up environment loading. \n", + "!ls /home/aistudio/work" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "# 如果需要进行持久化安装, 需要使用持久化路径, 如下方代码示例:\n", + "# If a persistence installation is required, \n", + "# you need to use the persistence path as the following: \n", + "!mkdir /home/aistudio/external-libraries\n", + "!pip install beautifulsoup4 -t /home/aistudio/external-libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: \n", + "# Also add the following code, \n", + "# so that every time the environment (kernel) starts, \n", + "# just run the following code: \n", + "import sys \n", + "sys.path.append('/home/aistudio/external-libraries')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "请点击[此处](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576)查看本环境基本用法.
\n", + "Please click [here ](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576) for more detailed instructions. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "py35-paddle1.2.0" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/modelcenter/VINER-CAE/introduction_cn.ipynb b/modelcenter/VINER-CAE/introduction_cn.ipynb new file mode 100644 index 00000000..34668f99 --- /dev/null +++ b/modelcenter/VINER-CAE/introduction_cn.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "1、模型简介\n", + "\n", + "Mask Image Modeling (MIM) 方法,在 NLP 领域 (例如BERT) 得到了广泛的应用。随着 ViT 的提出和发展,人们也尝试将 MIM 应用到视觉领域并取得了一定进展。在此之前,视觉自监督算法主要沿着 contrastive learning 的思路去设计,而 MIM 打开了新的大门。“Context Autoencoder for Self-Supervised Representation Learning”,即VEMER-CAE,提出一种新的 MIM 方法 CAE。VIMER-CAE基于自监督图像掩码恢复原理,创新性地提出“图像表征和掩码预测独立学习”的预训练框架,通过编码模块对输入的图像块进行特征表达,并利用隐式上下文回归和解码模块对输入图像的掩码块进行特征表达恢复,在恢复建模问题上提高了预训练模型的视觉表征能力。基于自监督方法训练的预训练模型在下游各类图像任务上取得了明显的效果提升,其中在目标检测、实力分割、语义分割等任务的指标上达到SOT R效果。\n", + "\n", + "
\n", + "\n", + "\n", + "2、模型效果\n", + "\n", + "1)分类场景ImageNet-1K数据集上的结果 \n", + "\n", + "| model | pretrain | Linear Prob(Top-1) | Attentive Prob(Top-1) | Finetune(Top-1) \n", + "|:--------:|:--------:|:--------:|:--------:| :--------:| \n", + "| [Vit-Base](https://vimer.bj.bcebos.com/CAE/pt_ep800_fp32_checkpoint-799.pd) | 800e | 69.3% | 76.7% | 83.7% | \n", + "| Vit-Large | 1600e | 78.1% | 81.2% | 86.3% |\n", + "\n", + "\n", + "2)分割场景ADE20K数据集上的结果\n", + "\n", + "| Backbone | Method | Crop Size | Lr Schd | mIoU | #params | FLOPs | \n", + "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | \n", + "| Vit-Base-800e | UperNet | 512x512 | 160K | 49.69 | 81M | 1038G |\n", + "\n", + "\n", + "\n", + "\n", + "## Citing Context Autoencoder for Self-Supervised Representation Learning\n", + "\n", + "@article{chen2022context,\n", + " title={Context autoencoder for self-supervised representation learning},\n", + " author={Chen, Xiaokang and Ding, Mingyu and Wang, Xiaodi and Xin, Ying and Mo, Shentong and Wang, Yunhao and Han, Shumin and Luo, Ping and Zeng, Gang and Wang, Jingdong},\n", + " journal={arXiv preprint arXiv:2202.03026},\n", + " year={2022}\n", + "}\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "# 查看工作区文件, 该目录下的变更将会持久保存. 请及时清理不必要的文件, 避免加载过慢.\n", + "# View personal work directory. \n", + "# All changes under this directory will be kept even after reset. \n", + "# Please clean unnecessary files in time to speed up environment loading. \n", + "!ls /home/aistudio/work" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "# 如果需要进行持久化安装, 需要使用持久化路径, 如下方代码示例:\n", + "# If a persistence installation is required, \n", + "# you need to use the persistence path as the following: \n", + "!mkdir /home/aistudio/external-libraries\n", + "!pip install beautifulsoup4 -t /home/aistudio/external-libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: \n", + "# Also add the following code, \n", + "# so that every time the environment (kernel) starts, \n", + "# just run the following code: \n", + "import sys \n", + "sys.path.append('/home/aistudio/external-libraries')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "请点击[此处](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576)查看本环境基本用法.
\n", + "Please click [here ](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576) for more detailed instructions. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "py35-paddle1.2.0" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} -- GitLab