diff --git "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/\344\270\223\351\242\230\346\241\210\344\276\213/\346\200\247\350\203\275\350\260\203\344\274\230/\344\274\230\345\214\226transpose\345\210\260\346\234\200\345\220\216\344\270\200\346\240\271\350\275\264\345\201\232softmax\346\200\247\350\203\275\344\275\216\347\232\204\351\227\256\351\242\230.md" "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/\344\270\223\351\242\230\346\241\210\344\276\213/\346\200\247\350\203\275\350\260\203\344\274\230/\344\274\230\345\214\226\345\234\250\346\234\200\345\220\216\344\270\200\346\240\271\350\275\264\345\201\232softmax\346\200\247\350\203\275\344\275\216\347\232\204\351\227\256\351\242\230.md" similarity index 39% rename from "Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/\344\270\223\351\242\230\346\241\210\344\276\213/\346\200\247\350\203\275\350\260\203\344\274\230/\344\274\230\345\214\226transpose\345\210\260\346\234\200\345\220\216\344\270\200\346\240\271\350\275\264\345\201\232softmax\346\200\247\350\203\275\344\275\216\347\232\204\351\227\256\351\242\230.md" rename to "Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/\344\270\223\351\242\230\346\241\210\344\276\213/\346\200\247\350\203\275\350\260\203\344\274\230/\344\274\230\345\214\226\345\234\250\346\234\200\345\220\216\344\270\200\346\240\271\350\275\264\345\201\232softmax\346\200\247\350\203\275\344\275\216\347\232\204\351\227\256\351\242\230.md" index 233c5952ff6fb746609cd5614276bf00b40d1750..92fba2799cd082865e67959371cb0cabf3d88042 100644 --- "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/\344\270\223\351\242\230\346\241\210\344\276\213/\346\200\247\350\203\275\350\260\203\344\274\230/\344\274\230\345\214\226transpose\345\210\260\346\234\200\345\220\216\344\270\200\346\240\271\350\275\264\345\201\232softmax\346\200\247\350\203\275\344\275\216\347\232\204\351\227\256\351\242\230.md" +++ "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/\344\270\223\351\242\230\346\241\210\344\276\213/\346\200\247\350\203\275\350\260\203\344\274\230/\344\274\230\345\214\226\345\234\250\346\234\200\345\220\216\344\270\200\346\240\271\350\275\264\345\201\232softmax\346\200\247\350\203\275\344\275\216\347\232\204\351\227\256\351\242\230.md" @@ -1,3 +1,4 @@ +1.transpose到最后一根轴做softmax的场景: ``` import sys import onnx @@ -23,4 +24,56 @@ if __name__ == '__main__': onnx.save(model, sys.argv[2]) ``` python3 fix_softmax_transpose.py ./wideresnet_dybs.onnx ./wideresnet_dybs_fix.onnx -导出onnx时如果softmax不是在最后一根轴上计算时会通过transpose转换到最后一根轴计算,然而softmax在最后一根轴上计算时性能低,故修改onnx使softmax在原轴上计算。 \ No newline at end of file +导出onnx时如果softmax不是在最后一根轴上计算时会通过transpose转换到最后一根轴计算,然而softmax在最后一根轴上计算时性能低,故修改onnx使softmax在原轴上计算。 +2.softmax在最后一根轴计算的场景: +``` +import sys +import onnx +from onnx import helper, optimizer + +input_model=sys.argv[1] +output_model=sys.argv[2] +model=onnx.load(input_model) +onnx.checker.check_model(model) +model_nodes=model.graph.node + +def getNodeByName(nodes, name: str): + for n in nodes: + if n.name == name: + return n + return -1 + +Transpose_before = onnx.helper.make_node( + 'Transpose', + name='Transpose_before_softmax', + inputs=['272'], + outputs=['before_softmax'], + perm=[2,0,1] +) + +soft_max_new = onnx.helper.make_node( + 'Softmax', + name='Softmax_150', + inputs=['before_softmax'], + outputs=['after_softmax'], + axis=0 +) + +Transpose_after = onnx.helper.make_node( + 'Transpose', + name='Transpose_after_softmax', + inputs=["after_softmax"], + outputs=['scores'], + perm=[1,2,0] +) + +model_nodes.remove(getNodeByName(model_nodes, 'Softmax_150')) +model_nodes.append(Transpose_before) +model_nodes.append(soft_max_new) +model_nodes.append(Transpose_after) + +print("vgg16-ssd softmax node adapted") +onnx.save(model, output_model) +``` +python3 fix_softmax_transpose.py ./vgg16-ssd_dybs.onnx ./vgg16-ssd_dybs_fix.onnx +softmax在最后一根轴上计算时性能低,故修改onnx,先transpose最后一根轴到第一根轴,使softmax在第一根轴上计算,然后再transpose恢复 \ No newline at end of file