PyTorch框架的Yolov5移植–寒武纪开发者社区

本文对开源yolov5s模型进行寒武纪平台的移植

整个移植过程分为模型结构转换、添加后处理算子框架代码、模型量化、在线推理和离线推理共五个步骤。

对于原始Yolov5网络的后处理部分的逻辑,Cambricon-PyTorch直接使用一个大的BANGC算子完成后处理的计算,需要对原生的pytorch网络进行修改,将后处理部分的整体计算换成BANGC算子。

具体做法为是将yololayer层替换成了yolov5_detection_output,把三个yololayer的输入传给了yolov5_detection_output。修改部分在yolo.py中,如下:

ifx[0].device.type=='mlu':

foriinrange(self.nl):

x[i]=self.m[i](x[i])#conv

y=x[i].sigmoid()

output.append(y)

detect_out=torch.ops.torch_mlu.yolov5_detection_output(output[0],output[1],output[2],

self.anchors_list,self.nc,self.num_anchors,

self.img_h,self.img_w,self.conf_thres,self.iou_thres,self.maxBoxNum)

returndetect_out

ifx[0].device.type=='cpu':

z=[]

bs,_,ny,nx=x[i].shape#x(bs,255,20,20)tox(bs,3,20,20,85)

x[i]=x[i].view(bs,self.na,self.no,ny,nx).permute(0,1,3,4,2).contiguous()

ifnotself.training:#inference

ifself.grid[i].shape[2:4]!=x[i].shape[2:4]:

self.grid[i]=self._make_grid(nx,ny).to(x[i].device)

y[...,0:2]=(y[...,0:2]*2.-0.5+self.grid[i].to(x[i].device))*self.stride[i]#xy

y[...,2:4]=(y[...,2:4]*2)**2*self.anchor_grid[i]#wh

z.append(y.view(bs,-1,self.no))

returnxifself.trainingelsetorch.cat(z,1)

在第一步中我们使用了BANGC编写的Yolov5Detection算子替换掉了原始的后处理逻辑。为了保证能够正确调用到这个算子,需要将该Yolov5Detection算子集成到框架中。

共分成两步:先将算子集成到CNPlugin中,然后将CNPlugin算子集成到Cambricon-Pytorch。该算子的实现与集成到CNPlugin会在另一个教程中详细介绍,在这里只介绍将该算子集成到CambriconPytorch这一步骤。

-name:yolov5_detection_output//算子名称

use_mlu_dispatcher:custom//分发类型,unboxed_only为标准化算子,custom为客制化算子

derived_type:cnml//派生类型

schema_string:torch_mlu::yolov5_detection_output//用于算子注册

arguments://参数

-name:alpha_data//参数名称

type:constat::Tensor&//参数类型

-name:beta_data

type:constat::Tensor&

-name:gamma_data

-name:anchor_data

type:torch::List

-name:num_classes

type:int64_t

-name:num_anchors

-name:img_height

-name:img_width

-name:conf_thres

type:double

-name:nms_thres

-name:maxBoxNum

type:int64_treturn_type:at::Tensor//函数返回类型

2)添加OpMethods基类中的CPU实现。

//op_methods.h

virtualat::Tensoryolov5_detection_output(constat::Tensor&alpha_data,constat::Tensor&beta_data,constat::Tensor&gamma_data,torch::Listanchor_data,int64_tnum_classes,int64_tnum_anchors,int64_timg_height,int64_timg_width,doubleconf_thres,doublenms_thres,int64_tmaxBoxNum);

//op_methods.cpp因为在这里并没有添加CPU实现,直接抛出异常

at::TensorOpMethods::yolov5_detection_output(

constat::Tensor&alpha_data,constat::Tensor&beta_data,

constat::Tensor&gamma_data,torch::Listanchor_data,

int64_tnum_classes,int64_tnum_anchors,int64_timg_height,int64_timg_width,

doubleconf_thres,doublenms_thres,int64_tmaxBoxNum){

//Todo:cpukernel

throwstd::invalid_argument("TodoforCPU");

3)添加wrapper

推理算子或训练算子会优先分发到wrapper中。wrapper是对算子kernel的封装,每个算子对应一个wrapper。根据模板生成的wrapper头文件cnml_kernel.h,添加wrapper的实现。

//cnml_kernel.h

at::Tensorcnml_yolov5_detection_output(constat::Tensor&alpha_data,constat::Tensor&beta_data,constat::Tensor&gamma_data,torch::Listanchor_data,int64_tnum_classes,int64_tnum_anchors,int64_timg_height,int64_timg_width,doubleconf_thres,doublenms_thres,int64_tmaxBoxNum);

//yolov5_detection_output.cpp

at::Tensorcnml_yolov5_detection_output(constat::Tensor&alpha_data,

constat::Tensor&beta_data,

constat::Tensor&gamma_data,

torch::Listanchor_data,

int64_tnum_classes,

int64_tnum_anchors,

int64_timg_height,

int64_timg_width,

doubleconf_thres,

doublenms_thres,

int64_tmaxBoxNum){

autoalpha_new=alpha_data;

autobeta_new=beta_data;

autogamma_new=gamma_data;

boolcast_fp32_fp16=(toCnmlDataType(alpha_data.dtype())==CNML_DATA_FLOAT32);

if(cast_fp32_fp16){

alpha_new=cnml_cast_internal(alpha_new,CNML_CAST_FLOAT32_TO_FLOAT16);

beta_new=cnml_cast_internal(beta_new,CNML_CAST_FLOAT32_TO_FLOAT16);

gamma_new=cnml_cast_internal(gamma_new,CNML_CAST_FLOAT32_TO_FLOAT16);

}

returncnml_yolov5_detection_output_internal(alpha_new,

beta_new,

gamma_new,

anchor_data,

num_classes,

num_anchors,

img_height,

img_width,

conf_thres,

nms_thres,

maxBoxNum);

4)添加kernel

Wrapper中通过调用kernel实现算子功能。算子的具体实现主要通过调用CNML库来完成。以下是CNML库的简要逻辑。

//cnml_internal.h

at::Tensorcnml_yolov5_detection_output_internal(constat::Tensor&alpha_data,

int64_tmaxBoxNum);

//yolov5_detection_output_internal.cpp

intbatch_size=alpha_data.size(0);

intinputNum=3;

intoutput_num=2;

intmaskGroupNum=3;

intclassNum=num_classes;

intmaxbox_num=maxBoxNum;

intnet_w=img_width;

intnet_h=img_height;

floatconfidence_thresh=static_cast(conf_thres);

floatnms_thresh=static_cast(nms_thres);

cnmlTensor_tcnml_input_ptr[3];

cnmlTensor_tcnml_output_ptr[2];

//prepareinputcnmltensor

auto*alpha_impl=getMluTensorImpl(alpha_data);

autoalpha_cnml=alpha_impl->CreateCnmlTensor(CNML_TENSOR,

toCnmlDataType(alpha_data.dtype()));

auto*beta_impl=getMluTensorImpl(beta_data);

autobeta_cnml=beta_impl->CreateCnmlTensor(CNML_TENSOR,

toCnmlDataType(beta_data.dtype()));

auto*gamma_impl=getMluTensorImpl(gamma_data);

autogamma_cnml=gamma_impl->CreateCnmlTensor(CNML_TENSOR,

toCnmlDataType(gamma_data.dtype()));

autooutput=at::empty({batch_size,maxbox_num*7+64,1,1},

alpha_data.options());

auto*output_impl=getMluTensorImpl(output);

autooutput_cnml=output_impl->CreateCnmlTensor(CNML_TENSOR,

toCnmlDataType(output.dtype()));

//prepareinputcnmltensorformulticore

intbuf_size=1024*(alpha_data.size(2)*alpha_data.size(3)+

beta_data.size(2)*beta_data.size(3)+

gamma_data.size(2)*gamma_data.size(3));

autotemp_buf=at::empty({batch_size,buf_size,1,1},alpha_data.options());

auto*temp_buf_impl=getMluTensorImpl(temp_buf);

autotemp_buf_cnml=temp_buf_impl->CreateCnmlTensor(CNML_TENSOR,

toCnmlDataType(temp_buf.dtype()));

//EndtheexecutionflowifnotMLUdevice

CHECK_MLU_DEVICE(output);

cnml_input_ptr[0]=alpha_cnml;

cnml_input_ptr[1]=beta_cnml;

cnml_input_ptr[2]=gamma_cnml;

cnml_output_ptr[0]=output_cnml;

cnml_output_ptr[1]=temp_buf_cnml;

//prepareh_arr

std::vectorh_arr_data(64,1);

h_arr_data[0]=alpha_data.size(2);

h_arr_data[1]=beta_data.size(2);

h_arr_data[2]=gamma_data.size(2);

inth_data[]={h_arr_data[0],h_arr_data[1],h_arr_data[2]};

//preparew_arr

std::vectorw_arr_data(64,1);

w_arr_data[0]=alpha_data.size(3);

w_arr_data[1]=beta_data.size(3);

w_arr_data[2]=gamma_data.size(3);

intw_data[]={w_arr_data[0],w_arr_data[1],w_arr_data[2]};

//preparebias_arr

std::vectorbias_arr_data(64,1.0);

floatbias_data[64];

for(inti=0;i

bias_arr_data[i]=(float)anchor_data[i];

bias_data[i]=bias_arr_data[i];

cnmlPluginYolov5DetectionOutputOpParam_tYolov5params;

TORCH_CNML_CHECK(cnmlCreatePluginYolov5DetectionOutputOpParam(&Yolov5params,

batch_size,

inputNum,

classNum,

maskGroupNum,

maxbox_num,

net_w,

net_h,

confidence_thresh,

nms_thresh,

GET_CORE_VERSION,

w_data,

h_data,

bias_data));

cnmlBaseOp_tyolov5_op;

TORCH_CNML_CHECK(cnmlCreatePluginYolov5DetectionOutputOp(&yolov5_op,

Yolov5params,

cnml_input_ptr,

cnml_output_ptr));

//returntoJITifrunningmodeisfuse

CHECK_RETURN_TO_FUSE(yolov5_op,output);

//getqueueandfunc_param

cnrtInvokeFuncParam_tfunc_param;

staticu32_taffinity=0x01;

intdata_parallelism=1;

func_param.affinity=&affinity;

func_param.data_parallelism=&data_parallelism;

func_param.end=CNRT_PARAM_END;

autoqueue=getCurQueue();

//compileallops

TORCH_CNML_CHECK(cnmlCompileBaseOp(yolov5_op,

GET_CORE_NUMBER));

void*input_addrs[3];

void*output_addrs[2];

input_addrs[0]=alpha_impl->raw_mutable_data();

input_addrs[1]=beta_impl->raw_mutable_data();

input_addrs[2]=gamma_impl->raw_mutable_data();

output_addrs[0]=output_impl->raw_mutable_data();

output_addrs[1]=temp_buf_impl->raw_mutable_data();

//computeoperator

TORCH_CNML_CHECK(cnmlComputePluginYolov5DetectionOutputOpForward(yolov5_op,

input_addrs,

3,

output_addrs,

2,

&func_param,

queue));

syncQueue(queue);

TORCH_CNML_CHECK(cnmlDestroyPluginYolov5DetectionOutputOpParam(&Yolov5params));

TORCH_CNML_CHECK(cnmlDestroyBaseOp(&yolov5_op));

returnoutput;

5)重新编译Cambricon-Pytorch

上述步骤操作完,重新编译CambriconPytorch,进入python环境确认是否集成成功,如下:

Python3.5.2(default,Nov122018,13:43:14)

[GCC5.4.020160609]onlinux

Type"help","copyright","credits"or"license"formoreinformation.

>>>importtorch

>>>importtorch_mlu

CNML:7.7.0a414883

CNRT:4.6.0e158c88

>>>torch.ops.torch_mlu.yolov5_detection_output

为什么要量化:量化是将float32的模型转换为int8/int16的模型,可以保证计算精度在目标误差范围内的情况下,显著减少模型占用的存储空间和带宽,加速推理;比如int8模型是指将数值以有符号8位整型数据保存,并提供int8定点数的指数position和缩放因子scale,因此int8模型中每个8位整数i表示的实际值为:value=(i*2^position)/scale。设备在进行在线推理和生成离线模型时仅支持输入量化后的模型。

参数含义:

其中qconfig_spec包括:{‘iteration’:1,‘use_avg’:False,‘data_scale’:1.0,‘mean’:[0,0,0],‘std’:[1,1,1],‘firstconv’:True,‘per_channel’:False}

参考代码:

parser=argparse.ArgumentParser()

parser.add_argument('--cfg',type=str,default='yolov5s.yaml',help='model.yaml')

parser.add_argument('--device',default='cpu',help='cudadevice,i.e.0or0,1,2,3orcpu')

opt=parser.parse_args()

#获取yolov5网络文件

net=yolo.get_model(opt)

#在这里设置firstconv参数为False,因为该模型首层为focus算子,非卷积,无法开启first_conv

qconfig={'iteration':1,'use_avg':False,'data_scale':1.0,'firstconv':False,'per_channel':False}

#调用量化接口

quantized_net=mlu_quantize.quantize_dynamic_mlu(net.float(),qconfig_spec=qconfig,dtype='int8',gen_quant=True)

#设置为推理模式

quantized_net=quantized_net.eval().float()

#读取图片做预处理

img_mat=Image.open("./images/image.jpg")

ifimg_mat.mode!='RGB':

img_mat=img_mat.convert('RGB')

crop=640

resize=640

transform=transforms.Compose([

transforms.Resize(resize),

transforms.CenterCrop(crop),

transforms.ToTensor(),

])

img=transform(img_mat)

im_tensor=torch.unsqueeze(img,0)

im_tensor=im_tensor.float()

#推理生成量化值

quantized_net(im_tensor)

#保存量化后的模型

torch.save(quantized_net.state_dict(),'./yolov5s_int8.pt')

操作步骤:对步骤2生成的量化后的yolov5s_int8.pt进行在线推理测试。对图片进行推理,画出目标框和标注置信度。在yolov5_pytorch_demo/quantize_online目录中,示例如下:

1)逐层模式pythondetect.py

推理后的图片存储在./results目录下

推理过程:

融合模式:被融合的多个层作为单独的运算(单个Kernel)在MLU上运。根据络中的层是否可以被融合,络被拆分为若个络段。MLU与CPU间的数据拷只在各个络之间发。

逐层模式:逐层模式中,每层的操作都作为单独的运算(单个Kernel)在MLU上运,可以将每层结果导出到CPU上,便进调试。

一般来说,在线逐层模式更适用于调试环节,在线融合模式可以查看网络融合情况;

主要步骤:

1)设置:torch.set_grad_enabled(False)#注意:在运行MLU推理融合模式时,这个条件是必须要设置的。

2)获取模型加载权重:

4)如果要运行在线融合模式,需要在运行前向过程前调用jit.trace()接口生成静态图。首先会对整个网络运行一遍逐层模式,同时构建一个静态图;然后对静态图进行优化(包括去除冗余算子、小算子融、数据块复用等)得到一个优化后的静态图;之后会根据输入数据的设备类型进行基于设备的优化,生成针对当前设备的指令:

5)最后根据推理结果为图片加框和标记置信度

parser.add_argument('--jit',type=bool,help='fusion',default=False)

parser.add_argument('--save',type=bool,default=False,help='selectionofsave*.cambrcion')

#获取yolov5网络并加载量化后的权重

net=yolo.get_empty_model(opt)

quantized_net=torch_mlu.core.mlu_quantize.quantize_dynamic_mlu(net)

state_dict=torch.load('yolov5s_int8.pt')

quantized_net.load_state_dict(state_dict,strict=False)

#转移到MLU上进行推理

device=ct.mlu_device()

quantized_net.to(ct.mlu_device())

#读取图片

img_mat=cv2.imread('images/image.jpg')

#调用预处理函数做预处理

img=letter_box(img_mat)

#设置融合模式,save选项表示是否生成离线模型,因为在进行在线融合推理时,可以生成离线模型

ifopt.jit:

ifopt.save:

ct.save_as_cambricon('yolov5s')

torch.set_grad_enabled(False)

ct.set_core_number(4)

trace_input=torch.randn(1,3,640,640,dtype=torch.float)

trace_input=trace_input.to(ct.mlu_device())

quantized_net=torch.jit.trace(quantized_net,trace_input,check_trace=False)

#推理

detect_out=quantized_net(img.to(ct.mlu_device()))

#关闭生成离线模型

ct.save_as_cambricon("")

detect_out=detect_out.to(torch.device('cpu'))

#为原图添加框、检测类别和置信度

box_result=get_boxes(detect_out)

draw_boxes(box_result)

注意:原始的yolov5网络可以对输入的图片做自适应的预处理,使预处理后的图片可以有不同的大小。而在当前demo中,为了能够满足在线融合推理和离线推理必须是固定大小的要求,将预处理都改成了固定大小为640*640。

1)生成离线模型

操作步骤:

生成离线模型与在线推理代码相似,在yolov5_pytorch_demo/quantize_online目录中,示例如下:

pythondetect.py--jitTrue--saveTrue

会在当前目录生成离线模型yolov5s.cambricon和离线模型信息文件yolov5s.cambricon_twins

2)离线推理

对一张图片进行离线推理,画出目标框和置信度。

示例图片放置在yolov5_pytorch_demo/offline/yolov5_offline_simple_demo/data目录下,离线模型放置在model目录下。执行make.sh在src目录下生成可执行文件,执行run.sh对一张图片进行推理,在result目录下生成推理后的图片。

THE END
1.离线模型和在线模型有什么区别,cache里面有什么内容是在线模型runtime/python/onnxruntime/demo_vad_online.py中vad模型的调用每次都需要传个in_cache进去,如果我要将vad模型封装成一个http的接口,这样就需要知道每次调用这个接口缓存了哪些状态。 如果我不用online模型,只用offline模型,vad和模型的online版本会有哪些效果上的差异吗? https://github.com/modelscope/FunASR/issues/1824
2.强化学习离线模型离线模型和在线模型强化学习离线模型 离线模型和在线模型 在推荐算法领域,时常会出现模型离线评测效果好,比如AUC、准召等指标大涨,但上线后业务指标效果不佳,甚至下降的情况,比如线上CTR或CVR下跌。 本文尝试列举一些常见的原因,为大家排查问题提供一点思路。 1. 离线、在线特征不一致https://blog.51cto.com/u_14499/11815202
3.总结一下模型工程化部署的几种方式腾讯云开发者社区在企业中,我们所做的AI项目,从大的方面来分,可以分成在线模型和离线模型两种,每一种类型的模型根据业务场景的不同会有不同的选择,例如,我们在推荐系统中,很多任务并不是要求实时得出结果的,尤其是在做召回的这个阶段,有时候一天做一次召回,有时候可能一周做一次召回都可以,针对于这类的模型,我们就没有必要去关注https://cloud.tencent.com/developer/article/1625640
4.模型小型化和融合技术,大幅度降低企业落地成本大模型小型化文章浏览阅读797次,点赞25次,收藏8次。通过模型小型化和大小模型融合方式帮助企业实现降本,小型化技术,可以在硬件上降低成本(比如可以在消费级别算力运行并推理),大小模型融合可以在架构上降低成本。_大模型小型化https://blog.csdn.net/bjspzc/article/details/139804501
5.13模型服务:如何把离线模型部署到线上?线上服务篇第5讲,个人第16篇学习笔记~ 摘要实验室demo和工业生产中,最大的gap就是是否上线。模型在线上运行, 实时地根据用户请求生成模型的预估值,这就是模型服务。内容目前业界主流的模型服务方式有4种,接下…https://zhuanlan.zhihu.com/p/561803690
6.数字孪生底层技术框架数字孪生是一种将现实世界中的物理实体、过程或系统数字化并映射到计算机模型中的方法。它在数学建模与仿真方面具有重要作用,为了实现数字孪生,以下是一些底层技术框架和方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.https://maimai.cn/article/detail?fid=1826290656&efid=hpIw6vgQ8Jel0X1z_fTlkQ
7.基于FPGA的高动态被控系统模型仿真零部件模型库中模型是完全公开的,用户可以针对具体项目需求进行调整,也可以由dSPACE提供工程服务。 2. 模型的扩展 由于模型完全开放,用户不仅可以自由调整模型,也可以在模型中扩展自己特性的模型组件。 3. 离线及在线仿真 支持在线仿真的同时,该模型库支持基于离线模型仿真的控制算法开发。相同的模型及参数可以无缝贯穿整个开发https://auto.vogel.com.cn/c/2012-08-28/686789.shtml
8.OMG参数离线模型转换模型转换应用开发模型轻量化(可选) 概述 无训练量化 插件式量化 网络结构搜索训练 示例 常见问题 模型收益 AIPP(可选) 概述 AIPP参数 AIPP配置文件说明 AIPP集成方式 异构(可选) 可变data_type(可选) 模型转换 离线模型转换 OMG参数 模型转换前准备 模型转换示例 IR在线模型构建 集成准备 内存零拷https://developer.huawei.com/consumer/cn/doc/hiai-Guides/overall-parameter-0000001052966900
9.谷歌浏览器插件Lucidchart离线图表谷歌浏览器插件 在线和离线绘制流程图、实体模型、UML、思维导图与更多图表的最便捷方式。 Lucidchart 是一种可视化协作工具,可使图表的绘制快速而轻松。在您安装完毕后,即可轻松在线或离线创建和编辑图表!在线时可轻松与他人分享图表,以便体验实时协作,所作更改瞬间即https://www.chajian5.com/lucidchart.html
10.AI面试第七弹(模型部署相关知识)一、离线模型(Offline) 离线模型存在于很多业务场景中,其中最常见的业务场景就是用在推荐系统的召回阶段,由于在推荐系统中,召回并不要求是实时的,可以根据业务的需要,调整https://www.jianshu.com/p/0e966d8ef2ce
11.模型评估方法与指标评估方法:为保证客观地评估模型,对数据集进行的有效划分实验方法。 1.1 离线和在线评估方法 评估方法可以分为离线和在线两种。 离线方法 模型评估通常指离线方法。 在线方法-A/B测试 A/B测试是目前在线测试中最主要的方法。 A/B 测试是为同一个目标制定两个方案。让一部分用户使用A方案,另一部分用户使用B方案,https://www.douban.com/note/845419278/
12.污水处理综合性在线预测模型的建立方法及预测预警方法.pdf污水处理综合性在线预测模型的建立方法及预测预警方法.pdf,本发明公开了污水处理综合性在线预测模型的建立方法及预测预警方法,首先,在建模过程中,利用污水处理设施的历史数据和补充实验数据建立和校准离线模型;再将该离线模型与污水处理信息化平台之间数据互通,使离线https://m.book118.com/html/2023/0530/5320011133010214.shtm
13.智能感知与人机协同教育部重点实验室多项研究成果入选NeurIPS极端数据异构下联邦学习——离线模型与在线模型的合作学习 数据异质性问题是联邦学习中的关键问题,目前尚无一个通用的算法框架可以解决多种异质性问题。针对这一挑战,本研究提出了基于模型合作的算法框架,并设计了用户内和用户间的知识迁移机制,从而更好地利用本地和全局知识。神经正切核理论证明这一算法比已有的算法Fehttps://www.shanghaitech.edu.cn/2023/1228/c1001a1087388/page.htm
14.机器学习术语表:机器学习基础知识MachineLearningGoogle经常或持续执行的操作。 在机器学习中,“动态”和“在线”是同义词。以下是机器学习中动态和在线的常见用法: 动态模型(或在线模型)是指经常或持续进行再训练的模型。 动态训练(或在线训练)是指频繁或连续训练的过程。 动态推理(或在线推理)是指根据需要生成预测的过程。 https://developers.google.cn/machine-learning/glossary/fundamentals?hl=zh-cn
15.在线仿真和离线仿真的建模机理由这些数学模型得出站场提供的动能和热能,并真实地反映正确的工艺流程.延西管道首站离线模型和实际站场的工艺流程基本一致,在离线模型中建立了实际站场内所拥有的泵,阀门,油罐,并且工艺流程走向也与实际站场一致,这就是离线建模的"白箱"理论.2建立在线模型的"黑箱"理论在线实时仿真流程(图1)为:现场的压力变送器,https://www.docin.com/p-1475030125.html
16.屏南县公安局信息化采购项目附件▲5.平台应内置包括规则模型、关联模型、统计模型、情报模型、离线模型等在内的≥5大类安全分析模型,各类内置分析模型总条目数应不少于1300条;(投标人需提供相关截图证明进行佐证) 6. 模型可通过串并联方式组合编排,前一个模型的输出可以作为后一个模型的输入,支持分析模型编排层级>5层; 7. 支持与不同品 牌的网http://zfcg.czj.ningde.gov.cn/upload/document/20200807/9d142b566de140818484e071d457a4c2.html
17.京东搜索在线学习探索实践离线模型提供 周/日 级别的周期模型校正。 实时特征和样本处理 实时特征收集的目标是承接搜索在线预估系统所发出的特征数据,对下游屏蔽掉缓存、去重、筛选、分页等搜索系统特有的业务逻辑,提前滤除掉下游一定不会使用的数据,构建出标准 Schema 的原始特征流。该组件承接来自于搜索召回、排序、相关性等模块的实时特征,每https://www.infoq.cn/article/Z6lL9VNskAH3BCxZS1A7
18.除了这个以外,离线使用大模型这个解决了很多人的痛点,之前和做科研除了这个以外,离线使用大模型这个解决了很多人的痛点,之前和做科研的学长和一些已经就业的校友聊天,说大模型有一个问题是开源,因此把他们的数据传上去,会泄密,因此他们选择不用。用大模型的时候,比如让它分析科研数据(科研),让它分析专家纪要的文本(金融),让它https://xueqiu.com/1614824153/271176979
19.pai通过离线训练获得的离线模型。基于不同框架会得到不同格式的模型,通常与Processor一起部署,从而获得模型服务。 Processor 包含在线预测逻辑的程序包,通常与模型文件一起部署,从而获得模型服务。针对常用的PMML、TensorFlow(Saved Model)及Caffe模型,EAS提供了预置的官方Processor。 自定义processor EAS预置Processor无法满足所有https://help.aliyun.com/knowledge_list/113696.html
20.TopazVideoAIv5.5.1/v2.6.4/v1.6.1集成最新在线模型文件视频无损放大软件(ai视频修复软件) Topaz Video AI v5.5.1 集成OFX插件绿色版 + 离线模型包 视频无损放大软件(ai视频修复软件) Topaz Video AI v3.2.9 中文破解版 Topaz Video Enhance AI v2.6.4 / v1.6.1 集成最新在线模型文件完整破解版 (绿色便携版)https://www.4fb.cn/soft/pc/1773.html
21.支持sso登录,多租户/多项目组,数据资产对接,notebook在线开发模型离线推理, 模型部署 媒体分布式处理: 分布式媒体下载, 视频提取图片, 视频提取图片 模型训练算子自定义支持算子自定义,通过web界面操作将自定义算法代码镜像,注册为可被他人复用的pipeline算子 模型训练自动学习面向非AI背景的用户提供自动学习服务,用户选择某一个场景之后,上传训练数据即可自动开始训练和模型部署,支持https://gitee.com/data-infra/cube-studio
22.中文三维模型资源库:伍全TOHATSU在线选型,SolidworkCreoNX均伍全官方授权创建3D CAD数字化智能选型电子目录,发布于产品数据资源共享和推广平台PARTcommunity,提供中文在线选型,充分满足了工程师、设计师和采购人员的个性化数据需求,实现快速高效选型。 点击上图或这里免费下载 客户可以随时随地在线访问伍全全线产品的3D CAD模型信息及其元数据、2D图纸、PDF数据表,快速进行交互式3D产品https://www.linkable.cn/newsinfo/6666014.html
23.阿里定向广告新一代主模型:基于搜索的超长用户行为建模范式传统的如 LSTM、Transformer 等序列建模的技术,普遍适用于序列数据长度在 100 以内的情况,当序列长度提高一个数量级达到 1000 以上时,都会存在困难;此外,即使离线模型能够处理,如何将模型部署到实际生产系统,在时延和吞吐上都达到工业级标准,更是极具挑战的难题。18 年我们团队研发上线、19 年在 KDD 上披露的http://baijiahao.baidu.com/s?id=1670999675488973729&wfr=spider&for=pc
24.首个基于深度学习的端到端在线手写数学公式识别模型Fig 5 是对 Hybrid Attention 整体在一个手写数学公式实例上的可视化。 Fig 6 列出了一个手写数学公式在线和离线模态互补性的实例,由于存在倒笔现象,单纯的在线模型无法正确识别该例子,而通过离线模型的融合辅助最终使得这个公式例子被正确识别(由于符号定义过多,更详细的内容请参考原文,链接附后)。 https://www.elecfans.com/d/1075538.html
25.BDIP协同平台首页BDIP建筑数据集成平台 BDIP系统,全名Building data integrate platform,建筑数据集成平台。该平台是由毕埃慕(上海)建筑数据技术股份有限公司开发的一款基于BIM模型https://www.ruanfujia.com/software/177848/
26.电子导盲犬可能要来了!相关研究在我国取得新突破该成果证明了离线具身智能导盲犬代替传统导盲犬的可能性,同时验证了离线具身智能范式的可行性,使大模型具身智能机器人可以脱离互联网,应用在无网或网络信号不佳的工况环境,提供更加实时的智能响应以及更好的人机交互体验。 未来,团队将进一步优化具身智能导盲犬技术方案,与电信星辰大模型相结合,探索在线与离线相融合的分https://www.jfdaily.com/staticsg/res/html/web/newsDetail.html?id=729708&sid=11
27.开发工具开发工具CANN商用版8.0.RC1开发文档参数概览 总体约束 在进行模型转换前,请务必查看如下约束要求: 如果要将Faster RCNN等网络模型转成适配昇腾AI处理器的离线模型,则务必参见定制网络修改(Caffe)先修改prototxt模型文件。 支持原始框架类型为Caffe、TensorFlow、MindSpore、ONNX的模型转换: 当原始框架https://www.hiascend.com/document/detail/zh/canncommercial/80RC1/devaids/auxiliarydevtool/atlasatc_16_0039.html