ONNX
简而言之 ONNX 就是一种框架间的转换格式,例如我们用 TensorFlow 写的模型可以转换为 ONNX 格式,并在 Caffe2 环境下运行该模型。
from torch.autograd import Variableimport torch.onnximport torchvisiondummy_input = Variable(torch.randn(10, 3, 224, 224)).cuda()model = torchvision.models.alexnet(pretrained=True).cuda()input_names = [ "actual_input_1" ] + [ "learned_%d" % i for i in range(16) ]output_names = [ "output1" ]torch.onnx.export(model, dummy_input, "alexnet.onnx", verbose=True, input_names=input_names, output_names=output_names)
graph(%actual_input_1 : Float(10, 3, 224, 224),%learned_0 : Float(64, 3, 11, 11),%learned_1 : Float(64),%learned_2 : Float(192, 64, 5, 5),%learned_3 : Float(192),%learned_4 : Float(384, 192, 3, 3),%learned_5 : Float(384),%learned_6 : Float(256, 384, 3, 3),%learned_7 : Float(256),%learned_8 : Float(256, 256, 3, 3),%learned_9 : Float(256),%learned_10 : Float(4096, 9216),%learned_11 : Float(4096),%learned_12 : Float(4096, 4096),%learned_13 : Float(4096),%learned_14 : Float(1000, 4096),%learned_15 : Float(1000)):%17 : Float(10, 64, 55, 55) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[11, 11], pads=[2, 2, 2, 2], strides=[4, 4]](%actual_input_1, %learned_0, %learned_1) # /usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py:342:0%18 : Float(10, 64, 55, 55) = onnx::Relu(%17) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:912:0%19 : Float(10, 64, 27, 27) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%18) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:488:0%20 : Float(10, 192, 27, 27) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[5, 5], pads=[2, 2, 2, 2], strides=[1, 1]](%19, %learned_2, %learned_3) # /usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py:342:0%21 : Float(10, 192, 27, 27) = onnx::Relu(%20) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:912:0%22 : Float(10, 192, 13, 13) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%21) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:488:0%23 : Float(10, 384, 13, 13) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%22, %learned_4, %learned_5) # /usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py:342:0%24 : Float(10, 384, 13, 13) = onnx::Relu(%23) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:912:0%25 : Float(10, 256, 13, 13) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%24, %learned_6, %learned_7) # /usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py:342:0%26 : Float(10, 256, 13, 13) = onnx::Relu(%25) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:912:0%27 : Float(10, 256, 13, 13) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%26, %learned_8, %learned_9) # /usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py:342:0%28 : Float(10, 256, 13, 13) = onnx::Relu(%27) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:912:0%29 : Float(10, 256, 6, 6) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%28) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:488:0%30 : Float(10, 256, 6, 6) = onnx::AveragePool[kernel_shape=[1, 1], strides=[1, 1]](%29) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:768:0%31 : Float(10, 9216) = onnx::Flatten[axis=1](%30) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:807:0%32 : Float(10, 4096) = onnx::Gemm[alpha=1, beta=1, transB=1](%31, %learned_10, %learned_11) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:1370:0%33 : Float(10, 4096) = onnx::Relu(%32) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:807:0%34 : Float(10, 4096) = onnx::Gemm[alpha=1, beta=1, transB=1](%33, %learned_12, %learned_13) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:1370:0%35 : Float(10, 4096) = onnx::Relu(%34) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:912:0%output1 : Float(10, 1000) = onnx::Gemm[alpha=1, beta=1, transB=1](%35, %learned_14, %learned_15) # /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:1370:0return (%output1)
WinRT
https://docs.microsoft.com/zh-cn/windows/ai/windows-ml/get-started-desktop#prerequisites
安装VS
安装WinRT


学习资料
- ONNX 教程:
- Windows AI
- ONNX
- 英伟达公开课|详解迁移式学习下的实时目标检测模型训练与署:
- 英伟达博客:
- 英伟达中国优酷主页:
- 英伟达在线课程:
