<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Artyze的博客]]></title><description><![CDATA[图像识别算法工程师，darknet]]></description><link>https://blog.youkuaiyun.com/Artyze</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Artyze]]></copyright><item><title><![CDATA[Transformer量化部署初步探讨]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/125947008</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/125947008</guid><author>Artyze</author><pubDate>Sat, 23 Jul 2022 15:51:48 +0800</pubDate><description><![CDATA[transformer部署探讨]]></description><category></category></item><item><title><![CDATA[量化精度与数据分布关系大吗？]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/125945607</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/125945607</guid><author>Artyze</author><pubDate>Sat, 23 Jul 2022 12:27:17 +0800</pubDate><description><![CDATA[conv的weights分布对于量化精度的影响大不大的探讨]]></description><category></category></item><item><title><![CDATA[windows下Cannot load onnxruntime.capi. Error: ‘DLL load failed‘]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/119037584</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/119037584</guid><author>Artyze</author><pubDate>Fri, 23 Jul 2021 15:56:51 +0800</pubDate><description><![CDATA[问题描述：

出现这个问题基本代表你的windows的版本比较落后了，然后vc的版本小于2015



解决方法：

vs下载链接

到此处下载最新的vc环境，安装好之后即可
]]></description><category></category></item><item><title><![CDATA[onnxruntime生成静态链接库libonnxruntime.a]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/117084351</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/117084351</guid><author>Artyze</author><pubDate>Thu, 20 May 2021 17:20:50 +0800</pubDate><description><![CDATA[如果通过源码编译会在build文件夹下得到一系列的.a库，但是onnxruntime默认将其链接成动态链接库，可以通过如下方式生成静态链接库

在build文件夹里创建文件merge.mri


create libonnxruntime.a
addlib /workspace/ygao/software_backup/onnxruntime/build/Linux/RelWithDebInfo/libonnxruntime_common.a
addlib /workspace/ygao/software_]]></description><category></category></item><item><title><![CDATA[解决问题：C++创建map及使用时报错：no matching function for call to ‘Ort::Value::Value()“]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/116757248</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/116757248</guid><author>Artyze</author><pubDate>Thu, 13 May 2021 17:22:51 +0800</pubDate><description><![CDATA[解决问题：C++创建map及使用时报错：no matching function for call to 'Ort::Value::Value()"

问题描述：

首先我需要创建一个std::unordered_map&lt;std::string, Ort::Value&gt;,同时插入键值对到map里，之后再进行访问测试。

代码如下：


创建map
std::unordered_map&lt;std::string, Ort::Value&gt; ort_output_map;

填入一个...]]></description><category></category></item><item><title><![CDATA[onnx优化系列 - 获取onnx每层输出及shape]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/116270215</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/116270215</guid><author>Artyze</author><pubDate>Thu, 29 Apr 2021 15:32:30 +0800</pubDate><description><![CDATA[如何获取onnx每层输出及shape
问题描述
onnx作为中间转换标准键，我们需要确保模型转换前后的精度完全一致，否则就失去了模型转换的最基本要求。但是在以下两种情况下，我们通常会遇到一点问题：

我们需要获取模型特定节点的输出
我们需要获取每一层的output shape，而由onnx标准api： onnx.shape_inference得到的shape信息错误

解决方法
我们知道获取onnx输出的官方工具即是onnxruntime，通常我们会采用如下的方法获取output：
    model = ]]></description><category></category></item><item><title><![CDATA[darknet 训练CUDA Error: an illegal memory access was encountered]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/115306835</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/115306835</guid><author>Artyze</author><pubDate>Mon, 29 Mar 2021 17:31:37 +0800</pubDate><description><![CDATA[darknet 训练CUDA Error: an illegal memory access was encountered CUDA Error: an illegal memory access was encountered:success
问题在于cfg文件中yolo层的random设置成了1，直接改为0即可

]]></description><category></category></item><item><title><![CDATA[解决问题：“error: src refspec master does not match any.”]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/109135607</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/109135607</guid><author>Artyze</author><pubDate>Sat, 17 Oct 2020 17:13:37 +0800</pubDate><description><![CDATA[通过命令行去push git 的时候遇到了问题:
error: src refspec master does not match any.
push 命令：　git push -u origin master
修改命令：　git push -u origin main
原因嘛，还不是因为美国那边黑命贵，导致都不敢用master这个曾经代表资本主义的词，改成了main即可

...]]></description><category></category></item><item><title><![CDATA[解决问题： Pyinstaller打包后出现问题：“No such file or directory: ‘/tmp/_MEI4YU7IA/astor/VERSION‘]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/109027189</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/109027189</guid><author>Artyze</author><pubDate>Mon, 12 Oct 2020 14:39:32 +0800</pubDate><description><![CDATA[这个问题出现的主要原因是在于astor模块把VERSION版本信息写在名为VERSION的文件里，在打包后，运行到__init__时候突然发现没有这个文件，就报错了。
ROOT = os.path.dirname(__file__)
with open(os.path.join(ROOT, 'VERSION')) as version_file:
    __version__ = version_file.read().strip()

解决方法

在打包好的可执行文件同级下创建一个site-packag]]></description><category></category></item><item><title><![CDATA[Tengine Convert Tools代码走读-图优化篇]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/108980446</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/108980446</guid><author>Artyze</author><pubDate>Fri, 09 Oct 2020 21:09:15 +0800</pubDate><description><![CDATA[为了与TVM进行对比，笔者决定同时看一下Tengine是如何做的。首先还是从图优化入手。
Tengine的整体架构

根据架构以及代码发现，Tengine将模型转换分离出来了，叫做Tengine-Convert-Tools
Tengine-Convert-Tools Github
有一说一，看的出来，Tengine的开发团队应该不是特别多，时间紧任务重，几乎所有的函数都没有注释（同时也没文档），虽然靠函数名也能猜出来，但是对于刚开始看的同学来说确实不太友好，对比来说，TVM或者任何其他的框架都做的要好很多。]]></description><category></category></item><item><title><![CDATA[TVM系列 - 图优化 - 算子融合]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/108796250</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/108796250</guid><author>Artyze</author><pubDate>Mon, 28 Sep 2020 15:44:43 +0800</pubDate><description><![CDATA[TVM系列 - 图优化 - 算子融合
图优化综述
声明一下，本文所有的理解都是基于个人理解。
图优化算是一个推理框架前端比较成熟的操作了，一般来说，针对模型做图优化有两个目的（对于通用框架来说，就加速减少计算一个目的了）：

减少Node的数量， 不管是算子融合，还是无效节点去除，共同的目的就是减少整个graph中node的数量，因为对于框架来说，从一个node到另一个node之间就意味着数据的搬运。举个例子，我们知道算子合并最经典的就是将BN层融合到Conv层，我们姑且不论融合后计算量的减少，单单是减少了]]></description><category></category></item><item><title><![CDATA[TVM系列 - 量化]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/108776522</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/108776522</guid><author>Artyze</author><pubDate>Fri, 25 Sep 2020 14:27:03 +0800</pubDate><description><![CDATA[TVM系列 - 量化TVM量化原理TVM量化现状TVM量化原理介绍TVM量化代码解析
TVM量化原理
关于量化的方式其实已经有足够的文章去了解目前最主流的两种：离线量化及训练时量化（大家应该能理解，其实就是伪量化），而tvm的作者之一也对这些文章有一个初步的汇总：tvm作者关于量化方式的讨论，这部分不做过多讨论，直接进入tvm量化的部分
TVM量化现状
事实上，可能tvm团队将主要精力放到了autotvm，以框架整体的优化上（毕竟这部分才是tvm的特点呀），tvm的单纯量化效果并不理想，不仅精度有所下降，正]]></description><category></category></item><item><title><![CDATA[torch注册自定义算子并导出onnx(Enet, Centernet)]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/107642358</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/107642358</guid><author>Artyze</author><pubDate>Tue, 28 Jul 2020 18:43:21 +0800</pubDate><description><![CDATA[torch注册自定义算子定义算子计算函数编译生成.so文件测试是否注册成功1. 定义算子的由input到output的计算函数**(op_custom.cpp)**2. 将函数注册到torch中**(op_custom.cpp)**3. 创建setup.py4. 开始编译5. 进行测试-&gt;加载模型**(test.py)**第一种：第二种：6. 进行测试-&gt;将算子通过symbol注册到torch/onnx(test.py)7. 进行测试-&gt;导出模型到onnx(test.py)8. 查看onn]]></description><category></category></item><item><title><![CDATA[onnx优化系列 - 获取中间Node的inference shape的方法]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/107403191</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/107403191</guid><author>Artyze</author><pubDate>Fri, 17 Jul 2020 10:49:58 +0800</pubDate><description><![CDATA[ONNX获取中间Node的inference shape的方法需求描述原理代码
需求描述
很多时候发现通过tensorflow或者pytorch转过来的模型是没有中间的node的shape的，比如下面这样：

但是碰到一些很奇怪的算子的时候，我们又想知道他对上一层feature map的形状影响是怎样的，于是下面的模型看起来会更友好一些

这里之所以看上去和原来的node的分布都不一样，是因为我在这里将pad和biasadd加到conv中了已经。
原理
ONNX本身提供了进行inference的api：
s]]></description><category></category></item><item><title><![CDATA[caffe编译后ImportError: libprotobuf.so.10: cannot open shared object file: No such file or directory+的问]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/107063689</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/107063689</guid><author>Artyze</author><pubDate>Wed, 01 Jul 2020 14:50:05 +0800</pubDate><description><![CDATA[问题：这里的问题非常明显，就是你没有安装protobuf或者安装的protobuf版本不对，而且有很大概率是你的版本不对

甚至有可能在编译的时候报错：


/usr/bin/ld: main.o: undefined reference to symbol '_ZN6google8protobuf8internal11LogFinisheraSERNS1_10LogMessageE'

//usr/lib/x86_64-linux-gnu/libprotobuf.so.9: error adding sy]]></description><category></category></item><item><title><![CDATA[关于L1和L2正则化的考虑]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/87939890</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/87939890</guid><author>Artyze</author><pubDate>Tue, 26 Feb 2019 19:49:48 +0800</pubDate><description><![CDATA[前面通过学习大致知道了L1和L2正则化的作用：

L1正则化：会使权重中的某些值在训练过程中变为0，从而达到使网络稀疏化的效果

L2正则化：极小的概率会使权重变为0，但是同样能够使权重相比他拟合数据集后应该成为的值变得更小，从而减小过拟合的风险，所以从这个角度来看，L1正则化同样具有一定的防止过拟合的效果，毕竟都已经稀疏了。

那么我们就从L1和L2的公式来看一下为什么L1具有稀疏化的作用：

...]]></description><category></category></item><item><title><![CDATA[yolo中增加L1及L2正则化]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/87934826</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/87934826</guid><author>Artyze</author><pubDate>Tue, 26 Feb 2019 15:51:00 +0800</pubDate><description><![CDATA[动量更新：

动量更新的公式为：





首先参考caffe中动量更新的方式：


case Caffe::CPU: {
    //计算公式：data = local_rate * diff + moment * old_data              
    caffe_cpu_axpby(net_params[param_id]-&amp;gt;count(), local_rate,   ...]]></description><category></category></item><item><title><![CDATA[yolo卷积层及其他中间层梯度权值数据可视化]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/84849362</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/84849362</guid><author>Artyze</author><pubDate>Thu, 06 Dec 2018 11:37:08 +0800</pubDate><description><![CDATA[针对有自己训练任务或者模型设计任务的同学来说，训练过程中的参数变化是判断自己模型梯度消失与否的重要评价标准，本文以yolo卷积层的梯度值为例，给出如何进行数据可视化的方法

 对于darknet框架来说，由于不存在内存共享，因此如果有使用到GPU的话，需要使用CUDA的函数将GPU内存中的数据传递到CPU中方可进行访问


cuda_pull_array(l.de...]]></description><category></category></item><item><title><![CDATA[YOLO-Darknet框架 instance segmentation (iseg_layer.c)代码解析]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/82823445</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/82823445</guid><author>Artyze</author><pubDate>Thu, 27 Sep 2018 17:01:04 +0800</pubDate><description><![CDATA[完成上篇博客semantic segmentation的任务之后，一方面继续研究对其精度及性能的提升，另一方面着手处理更加复杂，算法与语义分割也不尽相同的实例分割instance segmentation。由于作者已经给出了源码，话不多说，直接开始上代码，由于算法的复杂性，可能有的地方说的不详细或者不对的，欢迎找我讨论。


	Embedding降维
	
在了解实例分割代码之前，首先需要掌握一种非...]]></description><category></category></item><item><title><![CDATA[Yolo 语义分割Semantic Segmentation代码修改及训练全纪录]]></title><link>https://blog.youkuaiyun.com/Artyze/article/details/82721147</link><guid>https://blog.youkuaiyun.com/Artyze/article/details/82721147</guid><author>Artyze</author><pubDate>Sun, 16 Sep 2018 12:04:51 +0800</pubDate><description><![CDATA[首先说一下，本人由于之后嵌入式开发移植的需求，因此主要改动的框架就是darknet。前面一篇博文主要介绍了我所使用的数据集及其预处理方式，本文我将对darknet中相关语义分割的修改进行介绍，供大家参考，如果大家有兴趣的话可以参考我的github主页：https://github.com/ArtyZe/yolo_segmentation 

 当然，yolo作者也在不断的对...]]></description><category></category></item></channel></rss>