<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ColdWindHA的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ColdWindHA</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ColdWindHA]]></copyright><item><title><![CDATA[Poisoning Attack in Adversarial Machine Learning]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/114394866</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/114394866</guid><author>ColdWindHA</author><pubDate>Fri, 05 Mar 2021 14:20:40 +0800</pubDate><description><![CDATA[Poisoning Attack in Adversarial Machine Learning
Data Poisoning攻击区别于Evasion攻击，是攻击者通过对模型的训练数据做手脚来达到控制模型输出的目的，是一种在训练过程中产生的对模型安全性的威胁。Data Poisoning，即对训练数据“下毒”或“污染”。这种攻击手段常见于外包模型训练工作的场景，例如我们常常将模型训练任务委托给第三方云平台（如Google Colab等等），此时第三方平台就掌握了我们的所有训练数据，很容易在训练数据上做手脚，]]></description><category></category></item><item><title><![CDATA[Evasion Attack in Adversarial Machine Learning]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/114394686</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/114394686</guid><author>ColdWindHA</author><pubDate>Fri, 05 Mar 2021 14:17:01 +0800</pubDate><description><![CDATA[Evasion Attack in Adversarial Machine Learning
Evasion Attack旨在不干涉模型任何训练的基础上，设计出让训练好的模型无识别的test case，我们称之为inference-phase adversarial attack，又称为adversarial examples。从分类的角度上，evasion attack可以分为两大类，一类是ℓp\ell_pℓp​ attack​，另一类是Non-ℓp\ell_pℓp​ attack。区别在于，前者在一张正]]></description><category></category></item><item><title><![CDATA[Visual SLAM 笔记——李群和李代数详解]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108816328</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108816328</guid><author>ColdWindHA</author><pubDate>Sat, 26 Sep 2020 20:06:50 +0800</pubDate><description><![CDATA[李群和李代数
问题的引入
当我们估计出相机姿态[R,t][R, t][R,t]了以后，估计的结果和实际的相机姿态肯定会有一些不一致性，因而我们需要对估计出来的结果进行优化。优化方法一般都采用迭代优化的方法，每次迭代都更新一个位姿的增量Δ\DeltaΔ，使得目标函数最小。这个Δ\DeltaΔ就是通过误差函数对T\mathbf{T}T或者R\mathbf{R}R求微分得到的，也就是说我们需要对变换矩阵T\mathbf{T}T以及旋转矩阵R\mathbf{R}R求导。
但是，旋转矩阵并没有良好定义的加法，即R1R]]></description><category></category></item><item><title><![CDATA[C++干货系列——谈谈在变量中使用auto]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108779110</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108779110</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 17:26:41 +0800</pubDate><description><![CDATA[用作变量类型推演的关键字auto可能是C++11最著名的特性了，所以这篇文章我长话短说，简单写一下我认为比较重要的使用法则。
怎么用 auto
这一节我会写得尽可能短，因为我默认大家都已经用过auto了。如果有谁没用过的话，有大量的书和文章来替我讲这方面的知识。
我们都是用auto这个关键字来代替一个具体变量的类型定义，让编译器自己去寻找和从它的初始化过程中来推演这个变量的类型。最著名的关于auto的用法恐怕莫过于用它来躲开一堆长长的类型名，比如STL容器的iterator，但是它也可以有其他用处：
std]]></description><category></category></item><item><title><![CDATA[C++干货系列——强枚举到底有多“强”]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768758</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768758</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:41:28 +0800</pubDate><description><![CDATA[强枚举到底有多“强”
传统枚举类型以及其特性在开发上的弊端已逐渐显露，C++11标准对原有枚举类型进行了加强和补充，从而衍生出了"强枚举"。本文不仅旨在讲清楚强枚举是如何在弱枚举上进行改进，更希望阐明弱枚举的种种不足是如何对开发造成不利影响的；以及同时C++11"新标准"（早已不新）是如何对98的枚举进行补充的。
枚举无处不在
在工程代码当中，只要和数据打交道，基本上就离不开枚举类型——这是因为单纯的字符串类型在一份合格的工程代码中是不应该出现的，所有的字符串都应以枚举或常量的形式定义。举个例子，如果我们有]]></description><category></category></item><item><title><![CDATA[C++干货系列——右值引用与移动语义]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768710</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768710</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:40:27 +0800</pubDate><description><![CDATA[引子——左值持久；右值短暂
在C++11以前，所有引用都是左值引用(lvalue reference)——对左值的引用。lvalue这个词来自于C语言，指的是可以放在赋值表达式左边的对象，这些对象都是在对上或栈上分配的命名对象，他们有明确的内存地址。相对应的右值rvalue，如文字常量和临时变量，指的是可以出现在赋值表达式右侧的对象。左值引用只能绑定在左值上，右值就会编译错误：
int&amp; i = 419;	// Compile Error

好吧，这个错误有点蠢，应该也不会有人会这样用。但是我们通常]]></description><category></category></item><item><title><![CDATA[C++干货系列——起底万能指针void*]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768687</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768687</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:39:18 +0800</pubDate><description><![CDATA[从一个惨案说起
在一个项目中，我们开发的同学需要调用算法同学提供的一个接口，这个函数除了所有必要的参数之外，最后还有一个“多余的“参数void*类型，即一个可以指向任何类型的指针。这个参数之所以存在，是因为这个接口是一个算法过程的入口，在算法的最后会自动调用一个回调函数callBack，回调函数是我们自己定义的，可以用来回收所传进去的void*参数所开辟的内存，整个过程实现了算法和主流程的异步处理。其中算法可抽象成：
void func_with_void_pointer(int par1, char pa]]></description><category></category></item><item><title><![CDATA[C++干货系列——用了这么久，你真的懂nullptr吗？]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768665</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768665</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:38:36 +0800</pubDate><description><![CDATA[你是否在混着用NULL和nullptr？
你是否分不清这二者到底有什么区别？
滥用NULL到底会带来什么不可思议的错误？
今天，我们就来讨论讨论nullptr这个空指针的救世主。在C++11之前，几乎所有人写代码时对NULL又爱又恨，爱是因为他确实能够起到空指针的作用，恨是刚躲过了这个坑，又遇见了那个妖，魑魅魍魉怎么它就这么多。还好，C++11给我们带来了希望的曙光——nulltpr。
什么是NULL？
这个问题想要回答好还真是不容易。从定义上来看，NULL是一个宏，它被定义为0（也就是int型的零），或者]]></description><category></category></item><item><title><![CDATA[C++干货系列——C++17新特性之std::optional]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768640</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768640</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:37:49 +0800</pubDate><description><![CDATA[C++ 17 在 STL 中加入了许多新的"vocabulary types"，这些类型时用在不同组件的接口处的。MSCV也在Visual Studio2017中添加了对诸如std::optional,std::any和std::variant的支持。在这篇文章中，我们就来看一下std::optional解决了哪些问题，以及如何正确使用它。
表达“有时存在”
在程序中，有时我们需要变量来表达“nothing”的意思，比如你怎么写一个函数来“有可能“返回一个值？就好像给我找出一段文字中的第一个偶数，如果有的话]]></description><category></category></item><item><title><![CDATA[C++干货系列——override和final让你的虚函数更安全]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768614</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768614</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:36:47 +0800</pubDate><description><![CDATA[今天我想谈谈override和final，这一对在C++11中不太引人注意的特性，相比于C++11其他特性而言也更简单。这两个特性都能让我们的程序在继承类和覆写虚函数时更安全，更清晰。
覆写（override）虚函数
你有没有像我一样遇到过这种情况：在子类中，本来你想覆写虚函数，结果虚函数却没有被正确地调用呢？或者更惨的是，你有时不得不去修改父类虚函数的声明。在所有的子类中查找重载的函数这件事可真的是很麻烦，而且墨菲定律告诉你：你永远会忘掉你搞错了的那一个子类。不管怎么样，看下边这个例子吧：
 struct]]></description><category></category></item><item><title><![CDATA[C++干货系列——从编译期常量谈到constexpr（三）]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768570</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768570</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:35:52 +0800</pubDate><description><![CDATA[使用constexpr进行编译期运算
在上面两篇文章我分别介绍了什么是编译期常量以及C++03标准中的编译期运算。这篇文章我将围绕在constexpr这个关键字展开。
C++03中编译期运算的限制
我在上篇文章中所举的例子，要么非常简单，要么就是和模板元编程有关。非模板元编程的方法往往是一行就结束了，难以实现复杂的运算。此外我们还不能复用代码，无论在哪里我们都要再复制粘贴一遍，不符合我们设计代码的准则。模板元编程往往又非常的复杂，可读性也不高，虽然在C++14标准中我们有了可变参数模板，它能适当地改善模板元]]></description><category></category></item><item><title><![CDATA[C++干货系列——从编译期常量谈到constexpr（二）]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768534</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768534</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:35:00 +0800</pubDate><description><![CDATA[C++11标准前的编译期运算
在第一篇文章中，我把主要精力放在了什么是编译期常量，以及编译期常量有什么作用上。在这一篇文章中，我将更详细地介绍编译期常量是如何产生的。之所以要把编译期常量了解的这么透彻，是因为他是编译期运算的基础。在这篇文章中还会讲解我们在C++11 标准前都可以用做哪些**编译期运算（**compile-time calculations），通过了解这些比较原始的方法，我们能够更好地理解C++11标准为编译期运算方面所做的工作。
编译期常量都从哪里来？
在我们的经验中，大部分编译期常量的来]]></description><category></category></item><item><title><![CDATA[C++干货系列——从编译期常量谈到constexpr（一）]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768466</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108768466</guid><author>ColdWindHA</author><pubDate>Thu, 24 Sep 2020 10:33:59 +0800</pubDate><description><![CDATA[从编译期常量谈起
C++20都支持虚函数的constexpr了，我打算用三篇读文章讲清楚编译期常量和constexpr这个东西和编译期常量的关系，即为什么需要他来辅助解决这个问题。最后帮助读者在实际编码过程中能够有意识地去运用他们，这才是终极目标。这篇文章中会讲到隐藏在日常编程中的各种编译期常量，以及他们存在的意义。
什么是编译期常量
想要用编译期常量就要首先知道它们是什么，一般出现在哪里和运行期常量有什么区别，因此我打算用第一篇文章重点分析编译期常量以及使用他们有什么好处。
编译期常量(Compile-t]]></description><category></category></item><item><title><![CDATA[在github.io中使用LaTeX编辑数学公式]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/108763643</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/108763643</guid><author>ColdWindHA</author><pubDate>Wed, 23 Sep 2020 22:47:13 +0800</pubDate><description><![CDATA[在github.io中使用LaTeX，如果使用的也是Jekyll的模板，可以在_layouts/default.html的最后粘贴以下代码：
&lt;script type="text/x-mathjax-config"&gt;
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$','$'], ['\\(','\\)']],
processEscapes: true
}
});
&lt;/script&gt;
&lt;script src="https://cd]]></description><category></category></item><item><title><![CDATA[C++干货系列——一文完美解析“顶层”和“底层“ const]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/107436540</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/107436540</guid><author>ColdWindHA</author><pubDate>Sat, 18 Jul 2020 22:33:17 +0800</pubDate><description><![CDATA[C++ 顶层 const 和底层 const
从 const 指针开始说起。const int* pInt; 和 int *const pInt = &amp;someInt;，前者是 *pInt 不能改变，而后者是 pInt 不能改变。因此指针本身是不是常量和指针所指向的对象是不是常量就是两个互相独立的问题。用顶层表示指针本身是个常量，底层表示指针所指向的对象是个常量。
更一般的，顶层 const 可以表示任意的对象是常量，这一点对任何数据类型都适用；底层 const 则与指针和引用等复合类型有关，比较特]]></description><category></category></item><item><title><![CDATA[Spring学习日记【4】——事务、隔离性和@Transactional]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874902</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874902</guid><author>ColdWindHA</author><pubDate>Sat, 20 Jun 2020 17:12:29 +0800</pubDate><description><![CDATA[事务、隔离性和@Transactional
什么是事务
事务主要是逻辑上的一组操作，主要是对数据库 i读/o写的操作，或是对数据库增删改查的操作。但并不是所有这样的操作都能称为事务：事务至少要包含以下四个特性：

原子性：事务中的操作，要么全做成，要么都不做，事务是不可拆分的，事务必须是以commit和rollback结束。任何一项操作失败都将导致整个事务失败，同时其他已经被执行的操作都将被撤销并回滚，只打所有的操作全部成功，整个事务才算是成功完成。
一致性：事务的一致性是指事务的执行不能破坏数据库数据的完]]></description><category></category></item><item><title><![CDATA[Spring学习日记【3】——配置文件Xml的命名空间]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874840</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874840</guid><author>ColdWindHA</author><pubDate>Sat, 20 Jun 2020 17:10:03 +0800</pubDate><description><![CDATA[Spring Bean配置文件——Xml的命名空间
下面是一份非常常见的xml文件。
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.o]]></description><category></category></item><item><title><![CDATA[Spring学习日记【2】——Spring Bean注入方式的汇总及使用配置类进行bean的配置]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874633</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874633</guid><author>ColdWindHA</author><pubDate>Sat, 20 Jun 2020 17:01:14 +0800</pubDate><description><![CDATA[Spring Bean的注入方式汇总


@Component完成bean的注入
@Configuration用于定义配置类，可替换xml配置文件，被注解的类内部包含有一个或多个被@Bean注解的方法，这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描，并用于构建bean定义，初始化Spring容器。
@Configuration可以和@Component等（@Controller、@Ser]]></description><category></category></item><item><title><![CDATA[Spring学习日记【1】——对IOC容器和控制反转的理解]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874486</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/106874486</guid><author>ColdWindHA</author><pubDate>Sat, 20 Jun 2020 16:51:50 +0800</pubDate><description><![CDATA[对Spring IOC容器的理解与控制反转的理解
控制反转
当我们把web的每个任务都视作对外界请求的服务的响应，有了容器bean以后，我们就可以将业务与被管理的对象的生命周期相隔离，真正实现业务只操心业务的事情，而不管被管理的对象的生死存亡。这句话怎么去理解呢？
业务即我们需要提供的服务，或者我们需要实现的功能，而被管理的对象可以分为方法（接口）和实例化的模型对象两种，下边用两个例子来说明这种所谓的控制反转的逻辑。

当被管理的对象是实例化模型的时候：
把我们提供的服务视作做一道菜的过程，那么其中必定要用]]></description><category></category></item><item><title><![CDATA[图像处理黄金算子：Canny算子手写体！！]]></title><link>https://blog.youkuaiyun.com/ColdWindHA/article/details/84329606</link><guid>https://blog.youkuaiyun.com/ColdWindHA/article/details/84329606</guid><author>ColdWindHA</author><pubDate>Wed, 21 Nov 2018 21:01:33 +0800</pubDate><description><![CDATA[首先写算法 推荐 听 周杰伦 的 歌，本人 亲身 体验，周杰伦 的 歌会提供最多  的 灵感。

其实不是闲，因为老师让写。

还是只讲干货，但这次由于算子原理很牛B，讲下原理和我的理解。

首先，高斯滤波直接 用FS函数生成核，直接在时域滤波就OK了，因为整个程序下来都不涉及频域的计算，所以还是比较顺利，改了半个小时的bug就跑好了。

然后，使用sobel求梯度（幅值和角度，这是两张图）。

...]]></description><category></category></item></channel></rss>