趁着挨近毕业之前再奉献一波热度吧!

本篇文章首要内容为在运用OpenVino时的一些留神点,便利带咱们快速入门。OpenVino比较TVM和libtorch在intelx86的CPU端仍是有很大优势的,可以说在X86上揣度速度没有什么结构可以比美OpenVino。实践查验中OpenVino确实出乎了我的意料,值得尝试。其他,Intel也在大力开展OpenVinohttp署理(从跟新频率可以看出来),也有一些相关的活动和竞赛可以参与试试。

http 500到右下角的核算棒了么(感谢供应此图的师弟)?

Openvino初探(实践体会)

什么是OPENVINO

OpenVino前端结构Thttps安全问题ensorRT相似,是硬件前端开发需求学什么厂商针对自家的硬件途径开发的一套深度学习东西库,包含揣度库,模型优化等等一系列与深度学习模型安顿相关的功用。通俗易懂点说想要在intel-cpu或许嵌入式上安顿深度学习模型,之前你运用libt前端开发需求学什么orch或许tvm,这个时appear分可以考虑考虑openvino,其针对iHTTPSntel的多代cpu以及其他硬件途径做了针对的优化。

Openvino初探(实践体会)

官方地址:https://docs.openvinotoolkit.org/latest/index.html

看看作业流程,其实和TensorRT以及其他的安顿东西都差不多,训练好模型,解析成openvinhttps和http的差异o专用的.xmlhttp 404.bin,随后传入Inference Engine中进行推理。仅有不同的是http协议与TensorRT相同,是闭源的,给你.so文件你去调用就行。

Openvino初探(实践体会)

设备

设备按照官方流程来就可以了,简略方便,便是https域名一个现已https域名编译好的库和一些头文件以及文档。个人在Ubuntu和Mac上都进行了设备,下载设备包直接装就可以,仍是比较轻松的。在Windows途径或许稍微费事下。

其他友谊提示,官方的说明虽然不是很具体可是许多细节问题都给你提到了,主张详尽阅览官方文档

本教程的说明条件是正确设备了OpenVino,正确设置了环境变量,而且官方的验证查验都没问题

开发

首要记住激活环境变量,或许将环境变量设为大局(设为大局或许会与部分已设备的程序库发生抵触,例如OpenCV),Openvino的环深度学习境变量非常便利,只需你设置好了,openviHTTPSno依靠的组件Cmake时就都可以检测到。

激活指令:

source /opapplicationt/intel/openvHTTPino/bin/setupapproachvars.sh

关于我来说,我需求在Ubunhttps安全问题tu下进行开发,但我又不想设置大局环境,那么我只需求

prototype@prototype-X299-UD4-Pro前端结构:~/appearanceDownloadshttp://192.168.1.1登录/cliohttpclientn-2018.3/bin$ source /opt/intel/openvino/bin/setupvars.sh
[setupvars.sh] OpenVINO environment initialized
prothttp署理otype@prototype-X299-UD4-Pro:~/Downloads/clion-2018.3/bin$ sh clion.sh

经过指令行的办法打来Clion来二次开发Openvino。也便是说假定想运用IDE来调试openvino的代码,这儿推荐运用Clion,需求留神的是,由于openvino需appreciate求设置许多的环境变量,假定你不想将其环境变量设置application为大局(或许会与你的其他变量抵触),这时能http 404够经过上面的办法来实现。

OpenVino在设备的时分现已自带了许多常用的库,例如OpenCV,这儿的OpenCV是专门为intel处理器编译的优化的,具有更好的处理视频图画流前端面试题2021的才调。

利益

由于之前现已运用https安全问题过TVM、TensorRT、libtorch、TFlite等一系列关于桌面端神经网络安顿相关的库(移动端的有TVM、NCNN、MNN、TNN等),可以发现神经网络揣度库是真的难以共同的,各家都想做各家的,咱们布衣玩家只能看哪个好用上哪个了,真的是太多了,不过大部分结构的原理以及运用方appear法是相差不大的(除了TVM是前端学什么神经网络编译器,机器自动查找优化),当然也有一些大厂自行开发未开源的揣度库。

OpenVino给我的感觉便是一个比较老到而且仍前端开发是干什么的在快速开展的推理库,供应的dhttps域名emo和sample都很充足,上手比较简略,可以用来快速安顿开发,在Intel的硬件途径上功用超过了大部分开源库。

个人也尝试过TV前端开发需求把握什么技能M在CPU途http://192.168.1.1登录径上的优化,个人的查验作用来看是https域名OpenVino更快一些,当然是不完全统计,全体感觉关于自家appearanceCPU的调教OpenVino应该更了解一些吧。

神经网络核算棒

神经网络核算棒即Intel Neural Myriad X 2 VPU,相似于前端和后端的差异加速器,也是OpenVin深度学习o支撑的一个硬件途径。支撑的操作算子比运用CPU稍微少一些,可是大部分的模型是足够担任的。经过官方的例程以及官方的ben深度学习chhttp署理mark可以直接查验核算棒的功用apple,不用修改任何代码,将其插到usb-3.0接口上,指令行加参数-d MYRIAD即可。

Openvino初探(实践体会)

简略查验了下功用,没想到跑官方dhttps认证emo时速度竟然与ihttp署理5-7360u相仿,经过功用查验HRnet-w32-256-192可以抵达18f前端开发ps,而在我的MacBo前端开发需求把握什么技能ok Pro2017上只能跑14fps左右(两者皆运用OpenVino安顿)。就算是跑官方的human-poseHTTP多人姿势检测也可以抵达1前端开发需求把握什么技能0fps,跑posenet-224×22前端和后端的差异4有99fps。

运用的HRNet源码以及权重:https://github.com/stefanopinhttp://192.168.1.1登录i/simple-HRNet 、pose_hrne前端学什么t_w32_256x192.pth

总的来说,这个棒棒的核算才调超出了我的意http 302料。

一个实践比如

这儿简略以一个比如作演示,这儿选用人体姿势估量的HRNet深度学习作检appreciate验。选用的模型是pose_hrnet_w32_256x192.pth,作为比照,这个模型经过TVhttp 302M的opt-level=前端面试题20213优化后,可以在Intel Core™ ihttps协议7-7800X CPU @ 3.5APP0GHz 12下跑到appstore62ms左右(用了2个核)。

导出ONNX模型

咱们选取pose_hrnet_w32_256x192.pth,将其导出为ONNX模型。

from SimpleHRNet import SimpleHRNet
i前端和后端的差异mpoHTTPSrt torcHTTPh
model = SimpleHRNet(
32,
17,
'scripts/weights/pose_hrnet_w32_256x192.pth',
model_name='https安全问题HRNet',
rhttp署理esolution=(256HTTP, 192),
multiperson=False,
return_bounding前端学什么_boxes=False,
max_batch_size=1,
)
modehttp署理l = model.modelHTTP
example = torch.rand(1, 3, 256, 19http协议2)
torch_out = torch.onnx.export(model,
example,
"scripts/weights/pose_http 404hrnet_w32_256x192.onnx",
v前端和后端的差异erbose=True,
export_params=True,
opset_version=11
)

需求留神的当地,由于HRNet触及到了许多的上采样(UpSample)操作,而ONNXappleid对UpSample操作在新版本才有比较完备的支撑,因而在导出的时分需求显现设置opset_version=11,不然无法正常导出。

将ONNX模型转化为appreciateIR

OpenVino经过将ONNX模型转化为IRappleid格局(.xml和.b前端训练组织in)来读取模型,所以需求将.onnx模型继续转化(每个揣度东西都会分配一个前端去解析不同的模型)。

首要根据官方教程设备好转化模型需求的库。

然后转化模型的.py代码appearance/opt/intel/openvi前端训练组织no/deployment_tools/model_optimizer/mo.py,根据每个人实践的设备方位来,进入这个目录后,实施:

python3 mo.py --input_model &lappeart;INPUT_MODEL>.onnx

就可以进行转化了。

担忧明显并没前端训练组织有这么简略。

Openvino初探(实践体会)

假定咱们直接进行转化,将上一步导出的pose_hrnet_前端开发需求把握什么技能w32_256x192.onnx进行转化,会报错哦。由于OpenVHTTPiHTTPno的ONNX转化器不支撑op11的resizhttp://192.168.1.1登录e(UpSample)操作,无法顺利去揣度该节点前后的shape(一般来说,前端解说器需求推导每https和http的差异个结点后的shape才调进行下一步操作解析操作):

Openvino初探(实践体会)

相关的问题httpwatch:https:/appearance/softwhttp://192.168.1.1登录are.intel.com/en-us/前端开发是干什么的forums/intel-distribution-ofhttps安全问题-openvino-toolkit/topic/856753

那怎样办?官方现在还没有支撑,只好自己写一个简略的暂时处理方案。由于OpenVino的前端解说代码是开源的,咱们可以直接修改。转化的代码在/opt/intel/ophttp 302envino/deployment_tools/model_optimihttp://www.baidu.comzer中,经过了解其间的转化代码可以发现,OpenVino的模型转化流程是先解析.ONNX模型,将模型的参数都记录下来,然后再顺次替换成OpenVino的模型格局。

由于首要问题是Resize算子,转化代码对应着/opt/intel/openvino/deployment_tools/https域名model_optimizer/extensions/ops/upsample.py部分。可以发现揣度维度的代码在upsample_infer部分,也便是说OpenVino的模型解析器无法揣度出这个.ONNX模型Resize算子前后的维度信息,也便是out_happlicationeightout_width,它既然无法经过代码推导出,那咱们自己推导下就行可以了。

推导的办法有许多种,可以直接运转Pytorch代码https域名中的模型猜想进程,调查全部resize的维度,或许经过其他途径的前端解说器来得到APP相应的维度,这儿我运用TVM的ONNX解说器得到了这些resize算子的前后维度信息https域名,不得不夸一下,TVM的ONNX解说器竟然支撑op11的upsample算子。

于是乎,http://www.baidu.comupsample.py中的upsample_infer办法修改为:

@staticmethod
def upsample_infer(node: Node):
layapproachouthttp://www.baidu.com = node.graph.graph['layout']
assert lenappreciate(layout) == 4
input_shape = node.in_node(0).shape
temp_name = node.soft_get('name')
if temp_name in ['Resize_331','Resize_526','Resize_721','Resize_916http://www.baidu.com', 'Resize_1174',
'前端学什么Resize_1206', 'Resize_1前端训练组织512', 'Resize_1544']:
out_height, out_width = 32, 24
elif temp_name in ['Resize_1247', 'HTTPResize_1585']:
ouhttp 500t_height,http协议 out_width = 16, 12
el前端开发是干什么的seappearance:
out_height, ouhttps协议t_width = 64, 48
node['height_scale'] = out_height/input_shape[2]
node['widthHTTP_scale'] = out_width / input_shape[3]
if input_shape is None:
return
assert node.has('w前端面试题2021idth_scale') is not None ahttp 302nd node.has('height_scale') is not None
node.out_node().shape = shape_for_layout(layout,
batch=input_shape[get_batch_dim(layout, 4)],
features=input_shape[get_features_dim(layouhttpwatcht, 4)],
height=out_height,
width=out_width)

其间Resize_331等是模型中需求http 302upsample的当地,直接经过if-else的办法将咱们上一步得到的维度写进来..前端和后端的差异..这个是一次性的,只合适这个模型。

其他还有一个需appstore求留神的,在替换进程中,OpenVino的前端需求将解析好的参数替换为自己的算子结构,这一步的代码在/opt前端面试题/intel/openvino/deployment_tools/model_opthttps协议imizer/extensions/middle/UpsampleToResample.py中,替换的时分需求height_scalewidth_scale深度学习代码如下:前端面试题2021

    ...
height_scale = s前端学什么cales[2]
width_scale = scalesapp装置下载[3]
if len(scales) == 5:
depth_scale = scales[4]
else:
height_scale = upsample['heigHTTPSht_scale']
width_scale = upsample['height_scale']

因而需求在上一步中将height_scaleheight_scale核算出来而且赋给node方针中的特点:

node['height前端开发是干什么的_scale'] = outapprove_height/input_shape[2]
node['width_scale'] = out_width / input_shape[3]

这样的话,就把这个不能转化的算子处理了。

转化输出:

Model Optimizer arguments:
Common parameters:
- Path to the I前端nput Model: 	/home/prototype/Desktop/Deep-LearninAPPg/Pytorch-Learn/tvm_code/weights/pose_hrnet_w32_256x192.onnx
- Path for generated IR: 	/opt/intehttps协议l/openvino_2020.2.120/deployment_tools/model_optimizer/.
- IR output name: 	pose前端结构_hrnet_w32_256x192
- Log level: 	ERROR
- Batch: 	Not specified, inherited from the model
- Input layers: 	Not specified, inherited from the model
- OuHTTPStput layers: 	Not specified, inherited from the model
- Input shapes: 	Not前端开发 spec前端开发需求把握什么技能ified, inherited from the model
-http署理 Mean values: 	[0.485,0.456,0.406]
- S前端结构cale values: 	[0.229,0.224,0.225]
- Scale factappleor: 	Not shttp://www.baidu.compecified
- Precision of IR: 	FP32
- Enable fusing: 	TrAPPue
- Enable grouped convolutions fu前端开发需求把握什么技能sing: 	True
- Move mean valapplicationues to preprocess section: 	False
- Reverse input channeapprovels: 	False
ONNX specific parameters:
Model Optihttps协议mizer version: 	2020.2.0-60-g0bc66e26ff
[ SUCCESS ] Generated IR version 10 model.
[ SUCCESS ] XML file: /opt/intel/openvino_2020.2.120/deployment_tools/model_optimizer/./pose_hhttpwatchrnet_w32_256x192.xml
[ SUCCESS ] BIN file: /opt/intel/openvappearanceino_2020.2.120/deployment_tools/model_optimizer/./pos前端结构e_hrnet_w32_256x192.bin
[ SUCCESS ] Totapproveal execution time: 52.49 seconds.
[ SUCCESS ] Memory consumed: 1693 MB.

还有一点需求留神,为了在之后猜想的时分要对输入图画进行规appleid范化,这儿直接在转化模型的时分可以传入相httpwatch关的参数使模型参前端面试题数被规范化:--scale_values [0.229,0.224,0.225] --mean_values [0.485,0.456,0.406],也便是mean和std。

这样,咱们导出的模型数据规划是0-1,输入图画的通道次序是RGB(由于转的ONNX模型输入通道次序便是RGB),之后在输入图画进程中需求根据这个来调整图画。

推理

推理进程首要也就那几个常用的进程,加载模型、前端开发需求把握什么技能设置输入输出啥的。下图是官方的流程图,差不多可以一目了然。这部分要说的推前端开发是干什么的理进程和官方示例非常相似,只不过修改了一部分由于模型不同而改动的其他代码。

Openvino初探(实践体会)

代码直接从官方的demo中进行修改即可前端,这儿我以human_pose_estimation_demo为例,主张各位先看一前端结构下官方的例程,之后的安顿代码是根据这前端面试题2021前端面试题demo的。Hhttp 302RNet是自顶向下的approach姿势检测,而官方的姿势检测比如是根据OpappreciateenPose自顶向下,由于都是姿势检测示例,所以修改起来相对简略。

初始化Core

首要第一步是初始化Core,在happleiduman_pose_estimation_demo中官方有一个HumanPoseEstimator类,其间与引擎相关的私有成员变量为appreciate

InferenceEngine::Core ie;
std::string targetDeviceName;
InferenceEngine::CNNNetwork network;
InferenceEngine::Executhttp 500ableNetwork executableNetwork;
InferenceEngine::InferRequest::Ptr requestNext;
InferenceEngine::InferRequest::Ptr requestCurr;

在结构函数中,首要读取模型的.xml前端开发需求把握什么技能信息和.bin前端(只需求.xml的地址就可以得到.bin的地址),随后检查这个模型的输入输出维度正确(不正确则报错),设定模型输入输出的数据类型,毕竟经过executableNetwork = ie.LoadNetappstorework(network, taapprovergetDeviceName)得到特定处理器下的可实施网络:

network = ie.ReadNetwork(modelPath);
const auapplicationto& inputInfo = network.getInputsInfo();
if (inputInfo.size() != 1) {
throw std::runtimapplee_error(modelPath + ": expected to have 1 input");
}
const auto& imageInputInfo = *inputInfo.begin();
const auto& imageInputDims = ima前端面试题geInputInfo.second->getTensorDesc(前端开发需求把握什么技能).getDims();
if (imageInputDims.size() != 4 || imageInputDims[0] != 1 |http 500| imageInputDims[1] != 3) {
throw std::runtime_error(
modelPath + ": expected "" + imageInputInfappreciateo.http协议first + "" to have dimensions 1x3xHxW");
}
inputLayerSize = cv::Size(imageInputDiapprovems[3], imageInputDims[2]);
/https和http的差异/ need to be fp32
imageInpuhttp 404tInfo.second->setPrecision(InferenceEnginehttps协议::Precision::FP32);
imageInputInfo.second->setLayout(appreciateInfere前端面试题nceEnginhttps域名e::Layout::https安全问题NCHW);
InfereHTTPSnceEngine:application:OutputsDataMap outputInfo = network.getOutputsIapprovenfo();
// therehttp://www.baidu.com is only one output in HRNET
auto outputIt = outputInfo.beHTTPgin();
const auto& resOutputInfo = *outputIt++;
resBlobName = resOutputInfohttpwatch.first;
auto output_data = resOutputInhttp://www.baidu.comfo.second;
output_data->setPrecision(InferenceEnginappreciatee::Precision::FP32);
const auto& resOutputDims = resOutputInfo.secAPPond->getTensohttp://192.168.1.1登录rDesc().getDims();
if (resOutputDims.size() != 4 || resOutputDims[0] != 1
|| resOutputDims[1] != keypointsNumber) {
throw std::runtime_error(
modelPath + ": expected "" + resBlobName + "" to have dimensions前端面试题2021 "
"1x" + std::前端面试题2021to_string(keypointsNumber) + "xHFMxWFM");
}
executableNetwork = ie.LoadNetwork(network, targetDeviceName);
requestNexhttp署理t = executableNhttp://192.168.1.1登录etwork.CreateInferRequestPtr();
requestCurr = exeappleidcutahttps和http的差异bleNetwork.CreateInferRequestPtr();

初始化模型之后要进行揣度,首要需求读取图画,设置输入图画。这儿的首要进程是将经过OpenCV读取的视频帧转化为推理引擎可以加载的格局,与TVM、libtorch以及TensorRT相似,首要进程分为以下几步:

CV_Assert(image.type() == CV_8UC3);
// 得到前端面试题2021模型的输入数据的内存前端和后端的差异地址buffer,之后将输入数据移至此地址
InferenceEngine::Blob::Ptr input = requestNext->GetBhttp 302lob(network.getInputsInfo().applicationbegin(appleid)->first);
auto buffer = in前端训练组织put->buffer().as<InferenceEngine::https和http的差异PrecisionTrait<InferenceEngine::Precision::FP32>::value_type *>();
cv::https和http的差异Mat resizedImage;
// 咱们模型的输入维度是RG前端开发是干什么的B,因而需求转化维度,而且除以255以规范化数据维度
cv::resize(image, resizedImage, cv::Size(inputLayerSize.width, inputLayerSize.height), cv::INTER_CUBIC);
cv::cvtColor(resizedImage, resizedImage, cv::COLOR_BGR2RGB);
cv::Mat tensor;
resizedImage.convertTo(tensor, CV_32FC3,HTTPS 1.0/255);
// 此进程根据偏移http 500地址 界说planes分别指向了buffer的数据地址,随后经过split将tensor中的数据根
// 据RGB三个维度分割给pl前端开发需求把握什么技能an前端结构e,也就将输入数据移到了buffer的数据地址中。
std::vecapproachtor<cv::Mat> planes(3);
for (sizehttps和http的差异_t pId = 0; pId &lthttp署理; planes.size(); pId++) {
planes[pId] = cv::Mat(i前端开发是干什么的nphttp 500utLayerSize, CV_32FC1, buffer + pId * inputLayerSize.area());
}
cv::split(tenapplicationsor, planes);

这样就把读取的数据传入了推理引擎的输入端地址(没没弄理解的再好好看下上面的代码),接下来便是推理了,推理有两种办法,一种是同步一种是异步的办法,这也是我以为OpenVino和其他结构推理进程稍微有差异的当地。用户可以凭仗OpenappleidVino自带的异步办法提升全体网络推理的FPS。

以下是部http 500分推理代码,其间startCurr()startNext()中对输入图画进行了推理进程,其间startCurrstartNext()是成员函数,内容便是调用requestCurr-&gapplet;StartAsync()实施推理,这儿为了一同兼顾同步和异步两深度学习种办法,运用starappstoretCurr()readyCurr() 分配来仿照同步和异步操作,假定是同步,直接startCurr()后运用readyCurr()判别是否作用app装置下载回来了,没有回来就继续实施while(true)的循环,直到作用出来为止;假定是异步的,那么可以继续等上一个作用,然后用startNext()继续实施下一帧appearance的猜想,然后顺次等候每次的作用出来然后获取。

while(true){
...
if (isA前端结构syncMode)https安全问题 {
if (isModeChanged) {
estimator.startCurr();
}
if (!isLastFrame) {
estimator.startNext();
}
} else if (!isModeChapproveanged) {
estimator.st前端开发需求把握什么技能artCurr();
}
if (estimator.rHTTPeadyCurr()) {
poses = estimator.postprocessCurr();
std::cout << "pose get! " << std::endl;
}
...
}

相关成员函数具体界说展现:

void Humahttps和http的差异nPoseEstimator::startCurr() {
requestCurr->StartAsync();
}
void Humanhttp 302PoseEstimator::startNext() {
requestNext->Starhttps协议tAsync();
}
bool HumanPoseEstimator::readyCurr() {
if (InferenceEngine前端开发需求学什么::OK == requestCurr->Wait(InferenceEngine::IInferRequest::WaitMode::RESULT_READY)) {
returapproven true;
} else {
return false;
}
}

其间的https和http的差异内部调度是由OpenVino的TBB去控制,TBB是Intel开发的一个多线程调度东西,可以快速安全地多线程分配任务。具体可以表现为上述的异步操作。

具体的介绍文章在:https://www.edge-ai-vision.com/2020/03/maximize-cpu-inference-performance-with-imprhttp 404oved前端开发需求学什么-threads-and-memory-management-in-intel-disthttps和http的差异ribution-of-op前端开发需求学什么envino-toolkit/

异步与同步

OpenVino中有一个值的重视的点是自带的异步同步机制。也便是说推理的时分有两种不同的inf前端结构erence办法,分别是inferRequehttp://www.baidu.comst->infer()inferRequest->startAsync(),其间inferRequest->infer()会初步进行前端学什么推理进程可是会阻塞主线前端面试题程,也便是说你得等模型实施完才会实施下一步;而inferRequest->starhttps协议tAsync()则会直接回http 500来状前端面试题2021况,代码继续向下实施。由于经过这个函数将推理进程放到另一个线程实施appear,不会阻塞主线程,全体的代码不会卡到这儿。

Openvino初探(实践体会)

据介绍官方之前的多线程处理办法是凭仗OpenMP,可是官方也提到了运用OpenMP的一些小问题,想具体了前端面试题解的童鞋可以看这儿:https://docs.openvhttps协议inotoolkit.org/latest/_docs_IE_DG_Integappleidrate_with_customer_apappleplication_ne前端面试题w_API.html

总结

在推理后,经过re前端面试题2021questCurr-&前端开发需求学什么gt;GetBlob办法可以得到输出的作用approve,至于得到作用后怎样去处理,这儿就不多说了,以下是官方demo中的示例代码,在上述实施完startCurr后取出相应的作用。

std::vector<HumanPose> HumanPoseEstimator::postprocessCurr() {
InferenceEngine::Blob::Ptr pafsBlob = requestCur前端r->GetBlob(pafsBlobName);
InferenceEngine::Blob::Ptr heatMapsBlob = requestCurr->GetBlob(heatmapsBlobName);
InferenceEngine::SizeVector heatMapDims = heatMapsBlob->getTensorDesc().getDims();
std::vector<HumanPose> poses = postprocess(
heatMapsBlob->bufferapp装置下载(),
heatMapDims[2httpwatch] * heatMapDihttp 404ms[3],
keypointsNumber,前端学什么
pafsBlob->buffer(),
heatMapDims[2] * heatMapDims[3],
pafsBlob->getapproveTensorDesc().getDims()[1],
heatMapDims[3], heatMapDimshttps域名[2appearance], imageSize);
reAPPturn poseshttps协议;
}

假定对整个application安顿的流程还不是很清楚,可以一下官方的安顿教程:https://docs.ophttp 404envinotoolkit.org/latest/_dohttps域名cs_IE_DG_Integrate_w前端开发是干什么的ith_cappearanceustomer_application_new_API.h前端tml

优化进程

如何抵达模型最佳的优化前端训练组织作用,请看官方文档:hAPPttps://docs.openvinotoolkapproachit.orapproachg/latest/_docs_optimiz前端开发需求把握什么技能ation_guide_dldt_optimization_guide.html

  • 关于OpenCV cap/renhttps域名der time,将作用经过OpenCV代码烘托前端开发需求把握什么技能展现进程中需求的时刻。
  • 关于Detection tihttpclientme,是模型实践的实施时刻。
  • 关于Wallclock time,是全部进程一块实施所需的全体时刻,也便是模型实施时前端开发需求学什么间和烘托时刻。

另一个比如(生成so)

这个简略说一下如何将OpenVino推理代码封装成一个动态链接库(.so),运用pythohttp 404n调用而且回来作用前端面试题2021。由于有些时分咱们需求其他的前端代码去包装咱们的后端推理代码,这也是大多数应用程序所运用的一种结构。

拿官方的human_pose_estimation_demo这个比如来说,咱们将其间几个函数标记为export函数:

#ifndef DFROBOT_2D_POhttp 302SE_C_API_H
#define DFROBOT_2D_POSE_C_API_H
#define EXPORT_DLL __attribute__((visibhttpclientility("default")))
struct Points{
float data_x[18];
float data_y[18];
float score;
};
extern "C" {
EXPORT_DLL int runInferencehttp://192.168.1.1登录();
EXPORT_DLL boo前端训练组织l isReady();
EXPORT_DLL Points getResultAPP();
}

修改cmake,将# add_executahttps和http的差异ble(${IE_SAMPLE_NAME} ${IE_SAMPLE_SOURCES} ${IE_SAMPLE_HEADERS}) 修改为 add_library(${IE前端_SAMPLE_NAMapplicationE} SHARED ${LIBSOURCES}) 就可以生成.soappreciate文件,需求留神的一点是,初始化core的代码一般在相应方针的结构函数中,假定将其httpwatch设为大局变量,在外部代码读取.so的时分大局变量就会初始化,此刻会实施结构函数会实施executabhttp 500leNetwork = ie.LoaappreciatedNetwork(network, targetDeviceName); ,假定你之前将这个model放到cpu中去实施,那么代码就会卡在这儿,或许是与openvino中的线程抵触了:

...
using namespace InferenceEngine;
using namespace human_pose_estimation前端开发是干什么的;
// 界说方针的时分,结构函数中会初始化core,因而会出现问题。
HumanPoseEstimator estimator("human-pose-estimation-0001.xmlHTTPS", "CPU", false);
std::vector<HumanPose> poses;
bool po前端学什么seReady = false;
bool isReady()
{
return posehttps和http的差异Ready;
}
int runInference() {
tryapplication {
cv::VideoCapture cap;
cap.open("action_demo.mp4");
// read input (video) frame
cv::Mat curr_frame; cahttpclientp >> curr_frame;
cv::Mat nexthttps协议_frame;
if (!cap.grab()) {
throw std::logic_error("Failed tohttp协议 get frame from cv::VideoCapturehttp协议");
}
...

此刻有两种处理办法:httpclient

  • 将模型实施环境切换为GPU或许MYRIAD(核算棒);
  • 将大局的方针变为函数中的静态方针,只要在实施函数的时分会初始化一次;

这样就可以顺利将openvino封装为.so

一些总结和问题

OpenVino作为一个针关于Intel-CPU安顿东西,和其他大多数的推理结构是相似的,和TensorRT相同,有着丰富的例程和相应的文档(TVM等开源社会结构则文档少一些),入门相比照较简略。

利益很明显,在Intel-CPU上的模型优化才调非常棒,大部分模型通吃,转化ONNX模型很少有失利的情况。可以充分运用多核优势,而且可以灵敏设置运用https协议的线程数量。在CPU端安顿第一主张挑选OpenVino。

缺陷便是转化https协议其他结构模型的前端还不是很完善,不过这也正常,终APP究每一段时刻就会出现一些新的算子,这需求intel的工程师渐渐完善,当然假定自己比较急的话,可以自行修改官方的转化源码(Python),仍是比较简略的。

对各个模型算子的支撑程度:https://docs.openvinotoolkit.org/latest/_docs_MO_DG_prepare_model_Supported_FraAPPmeworks_Layers.html。

以及各种算子对设备的支撑程度:https://docs.openvinotoolkit.org/https域名latest/_docs_IE_DG_supported_plugins_Supported_Devices.html

Openvino初探(实践体会)

转化模型的坑

转化模型正如之前流程app装置下载中所提到的,不或许兼容到全部的op,因而需求咱们等候官方完善或许自行添加这些算子转化代码,转化http://192.168.1.1登录代码是python写的,修改仍是比较简略的。

Openv前端开发ino模型的数值规划

一般Pytorch、https安全问题TF预训练模型的数值规划为0-1,可是openvino官方示例中的规划是0-255,这是由于大部分是由caffe转化过来的。

输入通道BGR

OpenVino的默许输入次序是BGR(与OpenCV相似),然而咱们一般需求转化的模型(例如从Pyt前端学什么orch导出的onnx)是RGB,运用官方的转化器默许是不会给你转化的,需求运用--reverse_input_channels参数进行转化。

总归便是要使输入图画的通道次序和模型的通道次序一同即可。

ReShape

转化成IR后可以动态修改输入维度,这个是openvino一个比较共同的功用,可以前端结构在转化模型后经过修改输入图画的标准信http 500息,但仅限于模型不是很杂乱,不能包含resize的op,在查验中HRNet无法正常reshape。

docs.openvinotoolkit.org/latest/_doc…

跋文

写这篇文章写在挨近毕业appreciate的那段日子,研究生的毕竟一段的学校时光,结束毕竟一个小项目,是一件挺有含义的作业,因前端开发为毕业要处理的作业也不少,写的稍微有些匆忙,功率也不是很高。但总归是将自己所能想到的都总结了下来,期apple望对咱们有一些协助。毕竟,也希望自己的作业可以顺利,可以在繁忙中抽出时刻静下心来好好感悟,享用人生。

沟通~

假定你与我情投意合于此,老潘很愿意与你沟通;假定你喜欢老潘的内容,欢前端迎重视和支撑。博客每周更新一篇深度原创文,appleid重视大众号「oldpan博客」不错失最新文章前端面试题。老潘也会整理一些自己的私藏,希望能协助到咱们,大众号回复”888″获取老潘学习道路材料与文章汇总,还application有更多等你开掘。假定不想错失老潘的最新推文,请点击奥秘链接。