• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

接上一篇完成的框架模型训练结果,模型结构为ResNet18 fc,参数量约为11米,最终测试集接受(接受的缩写)达到94.83%。接下来有分两个部分:导出开放神经网络交换和使用onnxruntime推理。

一、pytorch导出onnx

直接放函数吧,这部分我是直接放在测试。巴拉圭里面的,直接从数据加载器中拿到一个一批的数据走一遍推理即可。

def export_onnx(net,testloader,output_file):

net.eval()

用火炬号_grad():

对于测试加载器:中的数据

图像、标签=数据

torch.onnx.export(网,

(图片),

输出文件,

训练=假,

do_constant_folding=True

input_names=['img'],

output_names=['output'],

dynamic _ axes={ ' img ' : { 0: ' b ' },' output': {0: 'b'}}

)

打印(' onnx导出完成!')

破裂

上面函数中几个比较重要的参数:do _常数_折叠是常量折叠,建议打开;输入张量通过一个元组传入,并且最好指定每个输入和输出的名称,此外,为保证使用onnxruntime推理的时候批量大小可变,动态轴的第一维需要像上述一样设置为动态的。如果是全卷积做分割的网络,类似的输入h和w也应该是动态的。

单独运行测试。巴拉圭计算测试集效果和平均相应时间,结果为:

测试符合率为: 94.83%

平均响应时间成本0 .46860 .48888886861

二、使用onnxruntime推理

这里我们使用地面动力装置版本的onnxruntime库进行推理,其大蟒包可直接点安装onnxruntime-gpu安装onnxruntime推理代码和测试集推理代码很类似,如下:

将数组作为铭牌导入

将onnxruntime作为剩菜导入

导入argparse,os

从库导入CIFARDataset

def onnxruntime_test(会话,测试加载程序):

打印('开始测试!')

输入名称=会话。get _ inputs()[0].名字

正确=0

总计=0 #计数归零(初始化)

对于测试加载器:中的数据

图像、标签=数据

images,labels=images.numpy(),labels.numpy()

outputs=session.run(无,{input_name:images}

预测=np.argmax(输出[0],轴=1) #取得分最高的那个类

总计=labels.shape[0] #累加样本总数

正确=(预测==标签)。sum() #累加预测正确的样本个数

acc=正确/总计

打印(' ONNXRuntime测试接受(accept的缩写)为: %.2f%%' % (100*acc))

if __name__=='__main__':

# 命令行参数解析

parser=argparse .参数解析器(" cifar 10上的美国有线新闻网;卷积神经网络主干")

parser.add_argument(' - onnx ',默认值='。/output/test _ resnet 18 _ 10 _ auto aug/dense net _ best。onnx’)

args=parser.parse_args()

数量_类别=10

BATCH_SIZE=128 #批处理尺寸(批量大小)

# 数据集迭代器

数据路径='。/data '

数据集=CIFARDataset(数据集路径=数据路径,批处理大小=批处理大小)

_,测试加载器=数据集。get _ cifar 10 _ data loader()

# 构建会议

sess=ort .推理会话(args.onnx,providers=[' CUDAExecutionProvider ',' CPUExecutionProvider'])

#onnxruntime推理

导入时间

start=time.time()

onnxruntime_test(sess,testloader)

end=time.time()

打印('平均响应时间成本: ',(结束-开始)/len(testloader))

使用onnxruntime加载导出的开放神经网络交换模型,计算测试集效果和平均响应时间,结果为:

开放神经网络交换运行时测试接受(accept的缩写)为: 94.83%

平均响应时间成本58860 .48686868686

三、小结

分析上面的框架和onnxruntime的测试结果可知,最终测试集效果是一致的,Acc均为94.83%,但onnxruntime的效率更高,耗时是框架的75%,但比最初目标设定的50毫秒高,需要进一步优化,两个方向:模型量化或并行化推理。下一篇再分析。

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now