幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

Tensorrt踩坑日记pythonpytorch转onnx

  作者makcooo
  来源https:blog。csdn。netqq44756223articledetails107727863
  编辑极市平台
  简单说明一下pytorch转onnx的意义。在pytorch训练出一个深度学习模型后,需要在TensorRT或者openvino部署,这时需要先把Pytorch模型转换到onnx模型之后再做其它转换。因此,在使用pytorch训练深度学习模型完成后,在TensorRT或者openvino或者opencv和onnxruntime部署时,pytorch模型转onnx这一步是必不可少的。本文介绍Python、pytorch转换onnx的过程中遇到的坑。
  配置
  Ubuntu16。04
  python3。6
  onnx1。6
  pytorch1。5
  pycuda2019。1。2
  torchvision0。1。8
  建议详读,先安装好环境:https:docs。nvidia。comdeeplearningtensorrtdeveloperguideindex。htmlimportonnxpython)步骤1。将pytorch模型转换成onnx模型
  这边用的是Darknet生成的pytoch模型importtorchfromtorch。autogradimportVariableimportonnxinputname〔input〕outputname〔output〕inputVariable(torch。randn(1,3,544,544))。cuda()modelx。model。cuda()x。model为我生成的模型modeltorch。load(,maplocationcuda:0)torch。onnx。export(model,input,model。onnx,inputnamesinputname,outputnamesoutputname,verboseTrue)
  其中modelx。model。cuda()若是不添加cuda()modelx。model
  出现报错RuntimeError:Inputtype(torch。cuda。FloatTensor)andweighttype(torch。FloatTensor)shouldbethesame2。检查模型modelonnx。load(model。onnx)onnx。checker。checkmodel(model)print(Passed)3。测试onnx模型使用tensorrt推理前后对比importpycuda。autoinitimportnumpyasnpimportpycuda。driverascudaimporttensorrtastrtimporttorchimportosimporttimefromPILimportImageimportcv2importtorchvisionfilename000000。jpgmaxbatchsize1onnxmodelpathyolo。onnxTRTLOGGERtrt。Logger()Thisloggerisrequiredtobuildanenginedefgetimgnpnchw(filename):imagecv2。imread(filename)imagecvcv2。cvtColor(image,cv2。COLORBGR2RGB)imagecvcv2。resize(imagecv,(1920,1080))miunp。array(〔0。485,0。456,0。406〕)stdnp。array(〔0。229,0。224,0。225〕)imgnpnp。array(imagecv,dtypefloat)255。r(imgnp〔:,:,0〕miu〔0〕)std〔0〕g(imgnp〔:,:,1〕miu〔1〕)std〔1〕b(imgnp〔:,:,2〕miu〔2〕)std〔2〕imgnptnp。array(〔r,g,b〕)imgnpnchwnp。expanddims(imgnpt,axis0)returnimgnpnchwclassHostDeviceMem(object):definit(self,hostmem,devicemem):Withinthiscontext,hostmommeansthecpumemoryanddevicemeanstheGPUmemoryself。hosthostmemself。devicedevicememdefstr(self):returnHost:str(self。host)Device:str(self。device)defrepr(self):returnself。str()defallocatebuffers(engine):inputs〔〕outputs〔〕bindings〔〕streamcuda。Stream()forbindinginengine:sizetrt。volume(engine。getbindingshape(binding))engine。maxbatchsizedtypetrt。nptype(engine。getbindingdtype(binding))Allocatehostanddevicebuffershostmemcuda。pagelockedempty(size,dtype)devicememcuda。memalloc(hostmem。nbytes)Appendthedevicebuffertodevicebindings。bindings。append(int(devicemem))Appendtotheappropriatelist。ifengine。bindingisinput(binding):inputs。append(HostDeviceMem(hostmem,devicemem))else:outputs。append(HostDeviceMem(hostmem,devicemem))returninputs,outputs,bindings,streamdefgetengine(maxbatchsize1,onnxfilepath,enginefilepath,fp16modeFalse,int8modeFalse,saveengineFalse,):Attemptstoloadaserializedengineifavailable,otherwisebuildsanewTensorRTengineandsavesit。defbuildengine(maxbatchsize,saveengine):TakesanONNXfileandcreatesaTensorRTenginetoruninferencewithEXPLICITBATCH1(int)(trt。NetworkDefinitionCreationFlag。EXPLICITBATCH)withtrt。Builder(TRTLOGGER)asbuilder,builder。createnetwork(EXPLICITBATCH)asnetwork,trt。OnnxParser(network,TRTLOGGER)asparser:builder。maxworkspacesize130Yourworkspacesizebuilder。maxbatchsizemaxbatchsizepdb。settrace()builder。fp16modefp16modeDefault:Falsebuilder。int8modeint8modeDefault:Falseifint8mode:TobeupdatedraiseNotImplementedErrorParsemodelfileifnotos。path。exists(onnxfilepath):quit(ONNXfile{}notfound。format(onnxfilepath))print(LoadingONNXfilefrompath{}。。。。format(onnxfilepath))withopen(onnxfilepath,rb)asmodel:print(BeginningONNXfileparsing)parser。parse(model。read())ifnotparser。parse(model。read()):forerrorinrange(parser。numerrors):print(parser。geterror(error))print(Parsingfail!!!!)else:print(CompletedparsingofONNXfile)print(Buildinganenginefromfile{};thismaytakeawhile。。。。format(onnxfilepath))enginebuilder。buildcudaengine(network)print(CompletedcreatingEngine)ifsaveengine:withopen(enginefilepath,wb)asf:f。write(engine。serialize())returnengineifos。path。exists(enginefilepath):Ifaserializedengineexists,loaditinsteadofbuildinganewone。print(Readingenginefromfile{}。format(enginefilepath))withopen(enginefilepath,rb)asf,trt。Runtime(TRTLOGGER)asruntime:returnruntime。deserializecudaengine(f。read())else:returnbuildengine(maxbatchsize,saveengine)defdoinference(context,bindings,inputs,outputs,stream,batchsize1):TransferdatafromCPUtotheGPU。〔cuda。memcpyhtodasync(inp。device,inp。host,stream)forinpininputs〕Runinference。context。executeasync(batchsizebatchsize,bindingsbindings,streamhandlestream。handle)TransferpredictionsbackfromtheGPU。〔cuda。memcpydtohasync(out。host,out。device,stream)foroutinoutputs〕Synchronizethestreamstream。synchronize()Returnonlythehostoutputs。return〔out。hostforoutinoutputs〕defpostprocesstheoutputs(houtputs,shapeofoutput):houtputshoutputs。reshape(shapeofoutput)returnhoutputsimgnpnchwgetimgnpnchw(filename)imgnpnchwimgnpnchw。astype(dtypenp。float32)Thesetwomodesaredependentonhardwaresfp16modeFalseint8modeFalsetrtenginepath。modelfp16{}int8{}。trt。format(fp16mode,int8mode)Buildanengineenginegetengine(maxbatchsize,onnxmodelpath,trtenginepath,fp16mode,int8mode)Createthecontextforthisenginecontextengine。createexecutioncontext()Allocatebuffersforinputandoutputinputs,outputs,bindings,streamallocatebuffers(engine)input,output:hostbindingsDoinferenceshapeofoutput(maxbatchsize,1000)Loaddatatothebufferinputs〔0〕。hostimgnpnchw。reshape(1)inputs〔1〕。host。。。formultipleinputt1time。time()trtoutputsdoinference(context,bindingsbindings,inputsinputs,outputsoutputs,streamstream)numpydatat2time。time()featpostprocesstheoutputs(trtoutputs〔0〕,shapeofoutput)print(TensorRTok)将model改为自己的模型,此处为pytoch的resnet50,需联网下载modeltorchvision。models。resnet50(pretrainedTrue)。cuda()resnetmodelmodel。eval()inputfortorchtorch。fromnumpy(imgnpnchw)。cuda()t3time。time()feat2resnetmodel(inputfortorch)t4time。time()feat2feat2。cpu()。data。numpy()print(Pytorchok!)msenp。mean((featfeat2)2)print(InferencetimewiththeTensorRTengine:{}。format(t2t1))print(InferencetimewiththePyTorchmodel:{}。format(t4t3))print(MSEError{}。format(mse))print(Allcompleted!)
  报错:Innode1(importModel):INVALIDVALUE:Assertionfailed:!importerctx。network()hasImplicitBatchDimension()ThisversionoftheONNXparseronlysupportsTensorRTINetworkDefinitionswithanexplicitbatchdimension。PleaseensurethenetworkwascreatedusingtheEXPLICITBATCHNetworkDefinitionCreationFlag。
  解决:defbuildengine(maxbatchsize,saveengine):EXPLICITBATCH1(int)(trt。NetworkDefinitionCreationFlag。EXPLICITBATCH)withtrt。Builder(TRTLOGGER)asbuilder,builder。createnetwork(EXPLICITBATCH)asnetwork,trt。OnnxParser(network,TRTLOGGER)asparser:
  报错:Traceback(mostrecentcalllast):line126,inlistcomp〔cuda。memcpyhtodasync(inp。device,inp。host,stream)forinpininputs〕pycuda。driver。LogicError:cuMemcpyHtoDAsyncfailed:invalidargument
  解决:defgetimgnpnchw(filename):imagecv2。imread(filename)imagecvcv2。cvtColor(image,cv2。COLORBGR2RGB)imagecvcv2。resize(imagecv,(1920,1080))
  输入的检测图像尺寸需要resize成model的input的size
  改为defgetimgnpnchw(filename):imagecv2。imread(filename)imagecvcv2。cvtColor(image,cv2。COLORBGR2RGB)imagecvcv2。resize(imagecv,(544,544))
  报错line139,inpostprocesstheoutputshoutputshoutputs。reshape(shapeofoutput)ValueError:cannotreshapearrayofsize5780intoshape(1,1000)
  解决:shapeofoutput(maxbatchsize,1000)修改成自己模型ouput的大小shapeofoutput(1,20,17,17)

60岁周星驰罕现身!胡须发白老年斑明显,喊话我永远都是中国人饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!6月27日,周星驰罕见露面谈香港回归25年,刚刚过完60岁生日的他精神状态非常不错,期间更是大赞中国历史文化深……曼联球迷相信滕哈赫能带来新气象,要明确球队至上的原则直播吧6月28日讯在滕哈赫的带领下,目前曼联正在紧锣密鼓地进行着训练,为新赛季做好谋划。《曼彻斯特晚报》近日关注了部分球迷在社媒对滕哈赫的评价,尽管有的球迷对球队前景依旧……养肾不成反伤肾,降尿蛋白三大误区大家好,我是胡磊医生。很多患者朋友养肾不成反伤肾,可能是降尿蛋白的过程中,步入了这三大误区。蛋白尿是肾脏损害的重要的指标之一,肾脏疾病的患者必须要把蛋白尿控制在标准范围之……真我618甩出王炸,5000mAh80WE4,最高13GB内真我realme手机品牌堪称国产黑马,成立仅三年的时间真我realme手机销量就突破了1个亿,而今已经挺进了全球前六。如今伴随着国内618年中大促到来,对于想要在此刻更换……蒲辅周医话论保胃气诸法蒲辅周,18881975年,四川梓潼人。几次传染病流行时,救治大量危重病人,作出了宝贵的贡献。其著作有《蒲辅周医案》、《流行性乙型脑炎》、《中医对几种传染病的辨证论治》等……在农业银行存入300000元,办理三年定期存款,最后能产生多农业银行,是国有大型商业银行,与中国银行、建设银行、工商银行等同属性,并且都属于规模庞大总资产较多的银行,其战略地位和影响力颇高,在全国处于举足轻重的地位,一、二级分行更是遍布……LCK夏季赛三叔死歌送6W2爆炸输出难阻DK三局不敌GEN苦2022年8月5日,LCK夏季赛第八周第三个比赛日迎来一场焦点大战,DK对阵GEN。GEN在比赛之前已经拿到了大场8连胜,小场更是一场不失16连胜的夸张战绩。而DK则是新败于L……永不下线有多香?九阴真经为我们带来最好模式玩法几乎我们在玩所有的游戏的时候,都有体验过那一种刷等级,刷怪时候的痛苦感觉。因为这一次又一次地去打一些副本,真的让人感到非常的疲倦以及乏味。甚至有时候我们还会选择冒着风险,去开脚……连生4胎拿3亿分手费,生娃机器刘碧丽的疯狂上位记文:话多多地表最强三人行开放式婚姻,随着澳门第一叠码仔洗米华的锒铛入狱,终于宣告结束。小三刘碧丽拿走3亿分手费,坐拥2。9亿豪宅全身而退,而洗米嫂却哭晕在厕所,虽然……CFHD幽灵猎手的地位有多低?血量不够终结者消耗,伤害还特别现如今,在CFHD的生化模式一众猎手里面,相信最受玩家喜爱的,肯定是圣拳猎手,原因也很简单,他的那个护盾能抵挡僵尸的同时,还能间接保底一下,再不济选择火线战士或者女武神也也是不……身高不足160的女生,穿阔腿裤时,建议多搭这4种上衣,洋气又身高对于女孩儿来说真的太重要了,很多小姐姐都因为身高不够而自卑,但其实大可不必,毕竟我们可以通过穿搭去改善你的身材,比例不够好的话,那么在平时也可以通过借鉴一些时尚的单品去调节……张大仙实测,破月流貂蝉秒回2000血,下个赛季法刺迎来新曙光在1月6日左右,王者荣耀即将更新新赛季!基本上每一次新赛季的到来,都意味着新内容的出现。新赛季会上线几件全新的装备,比如说破茧之衣。对于这一件新装备的测评,来自虎牙王者荣耀板块……
iPhone13Pro只要6000块敢不敢买?网友监管机,多网友在某平台看到一台iPhone13Pro512GB,该机居然只要5000块。唯一的缺点就是该机是监管机。监管机又称企业定制机,内置配置锁。是企业向苹果公司定制的机器,所有权归……宇宙是什么形状的,它是无限的吗?我们生活在一个相对较小的岩质行星上,围绕着一颗中等大小的恒星运行。在我们看来,我们所处的宇宙似乎是无限的。但真的是这样吗?宇宙的形状问题仍未解决。天文学家能够从一个不是最……请父母不要给孩子贴标签想起这个话题,内心就会泛起阵阵涟漪,也许是想起了小时候的自己的成长经历,又或许是想到了工作后自己的点滴。记得在小的时候,经常性的被贴标签,说什么胆小啊,怕人啊,不够勇敢啊……立秋后,孩子长个快,这种高卵磷脂食材要常吃,补脑又促生长立秋后,又到了孩子长高的黄金期!抓住这个时期,适当给孩子进补,既可以弥补夏天的消耗,又可以增强体质、促进生长,好处多多!虽然已经立秋,但是温度仍然很高,进补时宜清淡忌油腻,可以……北京魔方正式开启预售,六款车型,区间10。2915。39万元6月24日上午,北京魔方正式公布了预售价,共推出6款车型,预售区间为10。2915。39万元。北京魔方定位紧凑型SUV,是首款搭载鸿蒙OS系统的燃油车型。值得一提的是,北京魔方……皮肤上有白色的小点是怎么回事皮肤上出现白点可能和以下原因有关:1、花斑癣。一般是由真菌感染引起的皮肤病,好发于夏秋两季,大多是治疗不当或延误病情,才会导致皮损部位出现淡白色斑片。2、白癜风。发……5G智慧建筑解决方案摘要智能建筑以物联网平台为核心,构建智慧建筑生态体系。智慧建筑建设的目标:建立统一的智能楼宇管理系统,各相关系统间实时联动;系统间数据共享,支撑大数据分析和智能决策的应用……没想到,白夜追凶5年后,津港宇宙终于又打出了一副王炸没想到啊,津港宇宙又打出了一副王炸!等等,津港宇宙是个啥?要解释这个词,让我们先把时间推回到2017年。2017年,由王伟执导,潘粤明主演的《白夜追凶》横空出……Mystic前妻疑因经济状况不佳售卖图包,这就是离婚的原因?记得2018年iG夺冠的时候,由于是LPL第一个S冠,几乎是全网都在欢腾,许多以前没有玩过游戏的粉丝们甚至因此入了LOL的坑,蚕豆君身边也有这样的小姐姐,有小姐姐入坑能一起打游……新型类石墨烯材料团簇类烯构筑全新亚纳米二维材料体系以石墨烯为代表的二维层状材料因其独特的层内原子连接方式,表现出显著的电子离域行为,由此带来了出众的物理和化学性质。团簇具有确定的原子数与明确的结构,是一类介于原子分子与纳米晶体……从迷雾重重走向扑朔迷离未来人类将何去何从?人类发展的脉络看似清晰,却又迷雾重重。在两个关键问题上,一是人类从何而来,二是人类将往何处去,虽然历史学家、考古学家、生物学家、人类学家等等学者对这两个问题都进行了深入的探究,……不是夫妻可不可以入住酒店一间房呢?前台这几点多注意就可以众所周知,现在酒店监管系统越来越完善,对于一些不良交易的男女,酒店会通过系统快速地反馈给当地的民警,所以有些年轻的男女入住酒店会比较担心。(此处已添加小程序,请到今日头条客户端……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网