手机指令集:armv7 & armv8 经验总结:手机指令集主要跟芯片相关,如果是c端,就默认是arm芯片了,也只有arm芯片才有armv7和armv8之分。如果上MNN的话,MNN的量化都是做在armv8上的现在c端大部分都是64位APP,对应的架构是armv8。寄存器个数不一样,指令集也不一样。需要针对这些不同重新设计计算的方式。armv7:一般偏低端机才有armv7,而armv7 是可以优化的。模型一般在armv7上跑得较慢,而MNN现在对armv7不能加速。但是据说抖音的都跑在armv7上,且还能加速。armv8:
推理引擎:tnn & ncnn & 自研 经验总结目前开源的框架int推理做的都比较一般,有比较大的优化空间。在我们测试的case下,tnn相对来说会比ncnn好一些。不少大点的公司主要还是基于开源版本,适配自己的模型,针对性优化。其实搞优化大部分时间就是提高缓存命中率,高效利用neon寄存器。...
【美妆】上美妆的全流程与问题定位 上美妆的流程点位 -> 绑妆(素材+配置文件) -> 渲染上妆流程:模型预测给到点位;配置文件对素材进行绑妆(不同素材对应不同的绑妆配置文件);送入同一套渲染引擎(每家都有自己的一套统一代码)进行渲染。绑妆环节的常见错误某个三角面片的点位顺序和整体相反按照统一顺序的面片叫做“正面”,反顺序的就成了“背面”。渲染环节有“背面剔除”原则,只渲染正面,背面不做渲染。因此“背面”区域会呈现皮肤的原色。跳点连接会导致有些面片重叠(互相重叠的,最终渲染效果依照最后渲染的那
【pytorch】ncnn onnx转ncnn完整实现:def onnx2ncnn(self): assert os.path.isfile(simplified_onnx_path) os.system('onnx2ncnn {} {} {}'.format(simplified_onnx_path, param_path, bin_path)) print(' param has been save to {}'.format(param_path)) print(' bin has
【pytorch】tensorboardX 关于自定义runs下为什么不能正常保存tb记录(一直为空)的原因,可以尝试把 SummaryWriter 的如下参数实时打印出来:self.logdir = logdirself.purge_step = purge_stepself._max_queue = max_queueself._flush_secs = flush_secsself._filename_suffix = filename_suffixself._write_to_disk = write_to_diskself.k
【pytorch】tnn 首先确保已经安装了tnn环境:onnx2tnn转tnn:def onnx2tnn(self): assert os.path.isfile(simplified_onnx_path) os.system('cd {}' 'python onnx2tnn.py {} -version=v1.0 -optimize=1 -half=1 -o {} -input_shape input:1,{},{},{}' .format(C.o
【pytorch】onnx pytorch任意形式的model(.t7、.pth等等)转.onnx全都可以采用固定格式:model_dir = './'pth_path = model_dir + 'A.pth'onnx_path = model_dir + 'A.onnx'batch_size = 1input_shape = (3, 112, 112)cfg = Config()cfg.load_from_file(args.model_cfg_file)model = PFLD_SE3_eval(cfg.mo