diff --git "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" index 4958fbe57acaa6a54fe6d6146d0545fde014f7d7..5de7ac5d14699be310ca5173aaf68d64b4e1bd11 100644 --- "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" +++ "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" @@ -1357,47 +1357,76 @@ python3 ssd_pth_postprocess.py /root/dataset/VOCdevkit/VOC2007/ ./voc-model-labe 对于batch1与batch16,npu性能均高于T4性能1.2倍的模型,放在Benchmark目录下,1-1.2倍对应Official目录,低于1倍放在Research目录,目前都放在contrib/ACL_PyTorch/Research下即可 - 交付件参考 - 代码交付件checklist参考: + 代码交付件checklist,以Nested_UNet模型为例: ``` Nested_UNet #模型名称命名的文件夹 ├── env.sh #环境变量 - ├── gen_dataset_info.py #生成数据集info文件 - ├── LICENSE #选用Apache LICENCE - ├── nested_unet.diff #以补丁形式修改开源模型代码 - ├── nested_unet_pth2onnx.py #模型转换脚本,避免脚本下载权重加载模型时有pretrained参数的话设置为False,通常通过sys.path.append(r"./pytorch-nested-unet") from archs import NestedUNet的方式引用开源模型代码,如果开源模型代码仓提供了pth2onnx脚本,则不需要提交该文件 - ├── nested_unet_postprocess.py #模型后处理脚本,尽量不import开源模型代码,但是如果脚本直接复制了大量开源模型代码的函数而不是自己写的,为求精简,也可以import开源模型代码的类或函数 - ├── nested_unet_preprocess.py #模型前处理脚本,不要import该脚本没有用到的库,类或函数,数据集路径要通过输入参数传递给脚本而不是直接写在脚本里 + ├── Nested_UNet.patch #以补丁形式修改开源模型代码 + ├── Nested_UNet_pth2onnx.py #模型转换脚本,通过sys.path.append(r"./pytorch-nested-unet") from archs import NestedUNet的方式引用开源模型代码 + ├── Nested_UNet_preprocess.py #模型前处理脚本,不要import该脚本没有用到的库,类或函数,输入的数据集路径要以参数形式传递给脚本而不是将其写在脚本里 + ├── gen_dataset_info.py #生成数据集info文件 + ├── Nested_UNet_postprocess.py #模型后处理脚本,尽量不import开源模型代码,若因此复制大量开源代码的评测函数,为求精简,也可import开源模型代码的函数 + ├── requirements.txt #模型离线推理用到的所有且必要的依赖库,PyTorch优选开源1.5.0版本,特殊情况选用1.8.0,若其它库具体版本无要求可不写版本 ├── README.md #模型离线推理说明README - ├── requirements.txt #模型离线推理用到的所有依赖库与版本,不要写入实际没有依赖的库,pytorch版本优先1.5.0,特殊情况选用1.8.0,其它库具体版本是离线推理时使用的具体版本 + ├── LICENSE #统一选用Apache LICENCE + ├── aipp_Nested_UNet_pth.config #aipp输入时的配置,图片类模型才需要提供该文件 + ├── modelzoo_level.txt #模型精度性能结果 └── test + ├── pth2om.sh ├── eval_acc_perf.sh ├── parse.py ├── perf_g.sh - ├── pth2om.sh - └── README.md + └── aipp_Nested_UNet_test.sh ``` + >![](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/raw/master/public_sys-resources/icon-note.gif) +**说明:** + > Nested_UNet:严格以模型名称命名文件夹等 + > + > Xxx_pth2onnx.py:避免脚本从网上下载权重,加载模型时有pretrained之类的参数的话设置为False;pth2onnx脚本是要在cpu上运行的,因此涉及device相关的参数选为cpu,并且torch.load加载权重时参数map_location='cpu';如果模型支持导出动态batch的onnx,torch.onnx.export导出onnx文件时需要通过参数dynamic_axes设置动态batch,动态batch的onnx文件可以测试不同batch输入时的性能;脚本应尽量精简,少import不需要的库,少复制开源代码,少设置没有用到的模型参数,通常通过sys.path.append(r"./pytorch-nested-unet") from archs import NestedUNet的方式引用开源模型代码;输入的权重文件应以参数形式传递给脚本而不是将权重路径写在脚本里;如果是开源模型代码仓提供的pth2onnx脚本,则不需要提交该文件 + > + > Xxx_preprocess.py:不要import没有用到的库,类或函数;图片预处理一般是缩放,裁剪,均值方差归一化,加pad,通道转换,调用cv2或Pillow接口参考开源模型代码预处理部分实现,不应将开源模型代码预处理相关的dataloader框架也复制过来,代码要精简;输入的数据集路径要以参数形式传递给脚本而不是将其写在脚本里 + > + > Xxx_postprocess.py:尽量不import开源模型代码,但是如果因此脚本直接复制了大量开源模型代码的评测函数,为求精简,也可以import开源模型代码的类或函数;不应将开源模型代码评测相关的框架代码也复制过来,只需要引用实际实现评测的函数,代码要精简 + > + > requirements.txt:模型离线推理用到的所有依赖库与版本,开源模型代码依赖的第三方库模型离线推理时可能并没有依赖,不要写入实际没有依赖的库,常用的是torch,torchvision,onnx,numpy,Pilow,opencv-python;PyTorch优选开源1.5.0版本,特殊情况可选用1.8.0但是需写明具体原因,tochvision版本与torch是配套的,onnx版本默认选用1.7.0,其它库具体版本是离线推理时使用的具体版本,如果对这些库的具体版本没有特殊要求,这些库版本可以不写 - 模型目录结构与pth2onnx基本操作: + pth2onnx与模型目录结构基本操作: ``` cd Nested_UNet git clone https://github.com/4uiiurz1/pytorch-nested-unet cd pytorch-nested-unet - patch -p1 < ../nested_unet.diff #以补丁形式修改模型代码,其中补丁是通过git diff > ./nested_unet.diff生成的 + patch -p1 < ../Nested_UNet.patch #以补丁形式修改模型代码,其中补丁是通过git diff > ./Nested_UNet.patch生成的 cd .. - python3.7 nested_unet_pth2onnx.py nested_unet.pth nested_unet.onnx #pth2onnx脚本sys.path.append(r"./pytorch-nested-unet") from archs import NestedUNet加载NestedUNet模型结构 - 注意目录结构,模型转换与前后处理脚本和开源模型代码尽量处于同一层,执行脚本命令时要依据目录结构确定路径 + python3.7 Nested_UNet_pth2onnx.py nested_unet.pth nested_unet.onnx + #pth2onnx脚本通过sys.path.append(r"./pytorch-nested-unet") from archs import NestedUNet的方式引用NestedUNet模型结构 + #工作目录可以选为模型目录或者开源模型代码目录,模型转换与前后处理脚本和开源模型代码尽量处于同一层,执行脚本命令时要根据工作目录确定路径 ``` + [代码交付件模板](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/tree/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/ONNX%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/official/cv/ReID/ReID-strong-baseline) + + gitee网址:https://gitee.com/ascend/modelzoo/tree/master/contrib/ACL_PyTorch/Research + commit信息格式:[学校学院名称][高校贡献][PyTorch离线推理][模型名称]-PR内容摘要 + 模型名称风格为大驼峰,模型名含多个字符串时使用横杠或下划线连接,当上下文用横杠时模型名用下划线连接,否则用横杠连接 + 对于batch1与batch16,npu性能均高于T4性能1.2倍的模型,放在Benchmark目录下,1-1.2倍对应Official目录,低于1倍放在Research目录,目前都放在contrib/ACL_PyTorch/Research下即可 - 性能不达标的模型非代码交付件: + 非代码交付件: + [PyTorch离线推理-Xxx模型测试报告.docx](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-Xxx%E6%A8%A1%E5%9E%8B%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.docx) + [PyTorch离线推理-Xxx模型推理指导书.docx](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-Xxx%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC%E4%B9%A6.docx) + + 算子问题导致精度不达标或性能不达标时的其它交付件: + 1.如果使用autotune模型性能可以达标,需要交付知识库 + 2.模型性能不达标初步优化压缩包 ``` - icnet性能不达标初步优化 + PyTorch离线推理-ICNet性能不达标初步优化 + ├── PyTorch离线推理-ICNet模型测试报告.docx + ├── 优化前的profiling ├── icnet_bs16.om ├── icnet.onnx - ├── icnet模型性能不达标测试报告.docx - ├── 优化前的profiling └── 优化后的profiling - [xxx模型性能不达标测试报告.docx](https://gitee.com/pengyeqing/ascend-pytorch-crowdintelligence-doc/blob/master/docs/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-xxx%E6%A8%A1%E5%9E%8B%E6%80%A7%E8%83%BD%E4%B8%8D%E8%BE%BE%E6%A0%87%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.docx) ``` + [PyTorch离线推理-Xxx模型测试报告.docx](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-Xxx%E6%A8%A1%E5%9E%8B%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.docx)模板中含性能不达标时的优化案例与测试项 + 3.在modelzoo提issue + [issue模板](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-issue%E6%A8%A1%E6%9D%BF.md) + [issue示例](https://gitee.com/ascend/modelzoo/issues/I3W5Y3?from=project-issue) 如果使用补丁文件修改了模型代码则将补丁打入模型代码,如果需要引用模型代码仓的类或函数通过sys.path.append(r"./pytorch-nested-unet")添加搜索路径