此篇为第⑤篇,多目标跟踪系列文章:
基础demor入门①②;公式推导③④;深入分析初始化参数的影响⑤;
① Matlab Kalman滤波例子——小球跟踪解析 :matlab官方例子,单目标跟踪。匀速模型和匀加速模型
②Matlab Kalman Filter based Multiple object Tracking 官方例子 多目标跟踪_hello world-CSDN博客matlab官方例子,多目标跟踪。注意有匈牙利轨迹分配算法,且其中的距离计算公式为观测与预测的马氏距离,这个来源于1987年的作者的著作中。 
③kalman滤波——公式推导_hello world-CSDN博客_卡尔曼滤波递推公式
理解马氏距离的公式! 理解残差和残差协方差!
④多目标跟踪——阶段性进展_hello world-CSDN博客_多目标跟踪 多目标综述、Kalman滤波公式推导
⑤kalman简单例子——初始化参数对kalman性能的影响_hello world-CSDN博客
⑥多目标跟踪中的目标是否静止判断_hello world-CSDN博客 判断是否静止,如何计算速度
CheckStatic代码原理解析,数学公式推导。
其它优秀的博客参考:
⑦多目标跟踪(MOT)入门 - 知乎 比较好的多目标MOT综述!
⑧《Towards Real-Time Multi-Object Tracking》论文翻译 - 知乎
⑨ 视频轨迹跟踪分析——他山之石_hello world-CSDN博客


一、简单功能实现

一维信号的,匀速运动,位移预测。有观测Yn+1(S)。状态为Posx和vx。有过程噪声Vn,观测噪声Wn。具体数学模型如下:

代码来源:卡尔曼滤波_周先森爱吃素的博客-CSDN博客_卡尔曼滤波的步骤

  注意:第34行和第35行的代码区别。34行为矩阵点乘,不是矩阵乘法。

第一个为点乘,第二个为矩阵乘法。

    # p_predict = f * p * f.T + qp_predict = (f.dot(p)).dot(f.T) + q

图1

1.1 代码如下:

"""
Author: Zhou Chen
Date: 2020/3/27
Desc: 使用卡尔曼滤波进行状态预测
"""import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')# 创建位置观测矩阵,表示0-99的位移
z_observed = np.arange(100)
# 创建高斯噪声矩阵np.random.seed(0)
z_noise = np.random.normal(0, 1, 100)
z = z_observed + z_noise
# 创建初始状态矩阵Xn|n
x = np.array([[0, ], [0, ]])
# 创建初始状态协方差矩阵P,这里的1也可以是一个较为合适的较大数字 Pn|n
p = np.array([[1, 0], [0, 1]])
# 创建状态转移矩阵,采样频率为1秒,所以△t为1 Fn transition
f = np.array([[1, 1], [0, 1]])
# 创建状态转移协方差矩阵,协方差较小  Qn
q = np.array([[1e-6, 0], [0, 1e-6]])
# 创建观测矩阵 Hn
h = np.mat([1, 0])
# 创建观测噪声的协方差矩阵 Rn
r = np.mat([1])for i in range(100):# 迭代,计算5大步骤x_predict = f * x# p_predict = f * p * f.T + qp_predict = (f.dot(p)).dot(f.T) + qkalman = (p_predict * h.T) / (h * p_predict * h.T + r)x = x_predict + kalman * (z[i] - h * x_predict)p = (np.eye(2) - kalman * h) * p_predictplt.plot(x[0, 0], x[1, 0], 'bo')plt.xlabel("location")
plt.ylabel("speed")
plt.savefig("rst.png")
plt.show()

二、残差分析

此处的:X=(posx, Vx)一维情况,x的位置,x方向的速度。

观测 vx=1. Yn+1 = x + vx * Δt + noise
状态 X=(posx, vx)
初始化:Pn|n, Xn|n,Hn, Fn, Qn=1e-6, Rn=1 

图2

图3

图4

图5

从上图可以看出:
① kalman校正的(蓝色点)更加接近真实值。这也是观测越来越权重小的表现
②观测Yn+1(绿色点) 由于观测误差Rn=1,值太大了。所以观测误差较大
③速度的估计情况(红色点)速度的估计误差要远小于位移的估计误差。
因为速度的协方差更小,而位移的观测协方差较大一些。

2.1 Pn|n误差协方差的变化情况

Pn|n 残差协方差的变化情况。位置残差 >> 速度残差

观测噪声协方差为E(WnWn^T)=1,>>>   过程噪声1e-6。   意味着观测十分不准。
可以调节观测噪声协方差 MeasurementNoiseCov的值,确定观测到底准不准,来调节收敛速度?

,对角线上值的变化情况,反对角线上的位置的值是相同的,在上述表格中可以看出来。所以Pn+1|n+1是实对称矩阵的。

位移残差的协方差是在不断减小的,速度残差的协方差也在减小。但是位移比速度的协方差大一些

图6

原因:位移残差 >> 速度残差的原因。

图7

2.2 增益的变化情况

 2.3 初始化分析

---------------------------

三. 参数改变

3.1 将观测噪声变小

观测噪声减少之后,kalman收敛速度大大加快!!!

z_noise = np.random.normal(0, 0.1, 100)
r = np.mat([0.1])

图8             将观测噪声标准差改为0.1之后,normal(0,0.1) 收敛大大加快

3.2 状态噪声Qn变大

将Qn变为[1e-3,0;0 1e-3],Rn=1。Vn~N(0,Qn),这样Vn的范围就为:小数点后两位波动

问题:为什么Kxv=0速度增益为0了,而速度预测还是震荡状态?

  • v=v预测+kvx*观测。kvx=0,那就只有预测就是不准的。

  • x就是不准的。不准就是:Vn的原因,就是状态噪声导致的。Vn在小数点后两位波动,那么得到的速度v就一直在速度1上加减一个Vn,所以就是上面所示的抖动状态!!!!! 破案了

3.3 为什么Kvx增益部分为0,怎么着都会为0

 
 这是一个很有意思的问题!!!!!!

上面的代码部分:x_predict=2×1矩阵,kalman增益2×1,但是h是1×2,h*x_predict=1×2 * 2×1=1×1,所以是一个数。然后kalman×数=2×1,那么x=(posx, vx),怎么就加上了观测z[i]呢!!!!!!

其实是这样的!!!!   最后的kalman增益(Kx, Kvx)的第二项Kvx会迭代为0,v=常数了,所以速度会迭代到1。所以这个公式是完全没有问题的!!!!!!!!!不用怀疑Kalman*常数的问题!!!!

四. 一些问题思考

  1. 即使观测噪声很大,E(WnWn^T)=1,过程噪声1e-6,仍然可以实现收敛后,完全依赖于kalman校正。不用太担心依赖于观测。参考上方的图5
  2. 如果状态噪声比较大的话,Qn比较大。就会影响K的值,kalman校正的结果的权重变小。观测的权重会上升。Qn变大,K会变大。
  3. Rn变大,收敛慢了。参考上面图8
    Qn较小,就算观测Rn变大。最后都会依赖于预测。只不过收敛的速度变慢了。

4.1 如果速度过快怎么办?

之前v=1,相对于Δt=1,现在v=2,看一下有什么不同?

① 速度的收敛速度,变化不大!

② 差别在于:达到收敛需要的数据条数是一样的,导致速度快的,收敛需要的时间久一些!

4.2 怎么加快收敛?尽快的让预测更准?

① 减少观测噪声——让每一次的观测尽可能准确

4.3 如果噪声估计和实际观测不符会导致什么结果?

① 若实际观测噪声很大,但是估计的噪声协方差小了。会导致怎样的后果?
如下面代码所示:观测噪声为5,但估计噪声协方差为1

z_noise = np.random.normal(0, 5, 100)
r = np.mat([1])

噪声估计过小,影响不是太大! 除了Pn|n错误估计的太低了。对posx和vx的估计影响不是很大

② 噪声估计过小,影响也很小

测试代码如下:

"""
Author: Zhou Chen
Date: 2020/3/27
Desc: 使用卡尔曼滤波进行状态预测
"""import numpy as np
import matplotlib.pyplot as pltplt.style.use('fivethirtyeight')vx = 2
# 创建位置观测矩阵,表示0-99的位移
z_observed = np.arange(0, 200, vx)  # 观测 vx=1. Yn+1 = x + vx * Δt + noise
# 创建高斯噪声矩阵np.random.seed(0)
z_noise = np.random.normal(0, 1, 100)
z = z_observed + z_noise  # 观测
# 创建初始状态矩阵Xn|n=[posx, vx]
x = np.array([[0, ], [0, ]])
# 创建初始状态协方差矩阵P,这里的1也可以是一个较为合适的较大数字 Pn|n
p = np.array([[1, 0], [0, 1]])  # Pn|n=[resx,0;0 resVx]
# 创建状态转移矩阵,采样频率为1秒,所以△t为1 Fn transition
f = np.array([[1, 1], [0, 1]])
# 创建状态转移协方差矩阵,协方差较小  Qn=[σx^2 0;0 σvx^2]
q = np.array([[1e-6, 0], [0, 1e-6]])
# 创建观测矩阵 Hn
h = np.mat([1, 0])
# 创建观测噪声的协方差矩阵 Rn = E(WnWn^T)=E(z_noise),normal(0,1)均值为0,方差为1
r = np.mat([5])plt.figure(figsize=(12,8))for i in range(100):# 迭代,计算5大步骤x_predict = f * x# p_predict = f * p * f.T + qp_predict = (f.dot(p)).dot(f.T) + qkalman = (p_predict * h.T) / (h * p_predict * h.T + r)x = x_predict + kalman * (z[i] - h * x_predict)p = (np.eye(2) - kalman * h) * p_predictax1 = plt.subplot(2,2,1)# x[0,0]为预测位置,posx,x[1,0]为vxplt.plot(z_observed[i], x[1, 0], 'bo', linewidth=1.0)# 这里的真是画图应该为:(t, posx, posx-gt) (t, vx, vx-gt=1)# (t, Pn+1|n=1残差变化情况)  (t, Kn+1)增益依赖Yn+1观测的变化情况if i == 0:p_stack = pk_stack = kalmanx_pos = x[0, 0]x_speed = x[1, 0]else:p_stack = np.hstack((p_stack, p))k_stack = np.hstack((k_stack, kalman))x_pos = np.vstack((x_pos, x[0, 0]))x_speed = np.vstack((x_speed, x[1, 0]))# 平滑滤波对当前进行滤波
Filter_wid = 11
smooth_res = np.zeros(100)
for i in range(Filter_wid+1,100):tmpSum = 0for j in range(i - Filter_wid, i):tmpSum = tmpSum + z[j]smooth_res[i-1-5] = tmpSum / Filter_widplt.xlabel("location")
plt.ylabel("correct speed")
plt.title("correct speed $X_{V_x}$")
plt.legend()
# plt.savefig("rst.png")# plt.figure()
# plt.plot(z_observed, x_pos, 'o', color='blue', label='kalman correcnt')
# plt.plot(z_observed, z_observed, 'x', color='green', label='posx ground truth')
# plt.legend()
# plt.show()ax2 = plt.subplot(2, 2, 3)
# 这个就是预测,没毛病
plt.plot(z_observed, x_pos.reshape(100) - z_observed, 'o', color='blue', label='$X_{n+1|n+1}-X_{real}=Res$')
plt.plot(z_observed, z - z_observed, 'o', color='green', label='$Y_{n+1}-X_{real}=Observ_error$')
plt.plot(z_observed, smooth_res - z_observed, 'o', color='yellow', label='smooth filter')
plt.ylim(-8, 3)
plt.legend()
# 设置坐标轴范围
# plt.show()t = np.arange(100)
ax3 = plt.subplot(2, 2, 2)
plt.title("$P_{n+1|n+1}$")
plt.ylim(0,1)
plt.plot(z_observed, np.array(p_stack[0, ::2]).reshape(100), 'go', label='${\sigma_{Resx}}^2$')
plt.plot(z_observed, np.array(p_stack[1, 1::2]).reshape(100), 'bo', label='${\sigma_{Res_{Vx}}}^2$')
plt.legend()
# plt.show()# plt.figure()
ax4 = plt.subplot(2, 2, 4)
plt.title("$K_{n+1|n+1}$")
plt.ylim(0,1)
plt.plot(z_observed, np.array(k_stack[0, ]).reshape(100), 'go', label='${\sigma_{Resx}}^2$')
plt.plot(z_observed, np.array(k_stack[1, ]).reshape(100), 'bo', label='${\sigma_{Res_{Vx}}}^2$')
plt.legend()
plt.show()plt.figure()
plt.plot(z_observed, x_pos.reshape(100) - z_observed, 'o', color='blue', label='$X_{n+1|n+1}-X_{real}=Res$')
plt.plot(z_observed, z - z_observed, 'o', color='green', label='$Y_{n+1}-X_{real}=Observ_error$')
plt.plot(z_observed, x_speed.reshape(100) - vx, 'ro', label='$Xv_{n+1|n+1} - Xv_{real}=correct speed error$')
plt.ylim(-5, 5)
plt.legend()
plt.show()a = a +1

4.4 如果出现了误匹配

可能的解决方法:

  1. 判断检测detection与上一帧预测的位置的欧氏距离。以及,此帧预测 与 上帧估计的距离。
    如果这两个距离相差很大,那说明观测出现了很大问题。至于为什么会匹配,肯定是因为匹配除了问题。用于判断匹配的结果到底是否正确!!!
  2. 剔除匹配,此帧还是按照预测来!!!在match中再去判断一下是否匹配,可以筛选出很离谱的匹配。甚至可以通过方向来判断,角度;也可以通过速度来判断,是否突然加速了那么多!!!
    1. metric:欧氏距离、速度、方向;进一步剔除误匹配的
    2. 漏匹配的靠:预测维持!

出现误匹配,就是偶尔有Yn+1的观测值非常离谱。

z[:10] += 5 前11个数据出现了变化。 所以,相当于是,速度出现了突变!!!

速度估计出现了较大的偏差,后面慢慢修正回来。蓝色的曲线的误差也很大。
所以最开始有了错误的观测,模型收敛阶段影响较大,要较长的时间才能收敛到正确的值上。

①若某一个数值,如第10个数值出现了偏差,只是对最初的预测有影响。但是长期还是不变的。

②若第50个数据出现了小偏差。已经收敛了,影响更不大了

③ 若第50个数据出现了巨大偏差。那么相当于是速度突变了。就会产生巨大影响

如果一旦允许了错误的数据匹配,产生的影响将是较大的。

4.5 低帧率的情况下,增加Δt=2

Δt从1,到2,到4。 P,K的值变高了。

-------------------------------------------

五. 代码如下:

"""
Author: Zhou Chen
Date: 2020/3/27
Desc: 使用卡尔曼滤波进行状态预测
"""import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')# 创建位置观测矩阵,表示0-99的位移
z_observed = np.arange(100)    # 观测 vx=1. Yn+1 = x + vx * Δt + noise
# 创建高斯噪声矩阵np.random.seed(0)
z_noise = np.random.normal(0, 1, 100)
z = z_observed + z_noise        # 观测
# 创建初始状态矩阵Xn|n=[posx, vx]
x = np.array([[0, ], [0, ]])
# 创建初始状态协方差矩阵P,这里的1也可以是一个较为合适的较大数字 Pn|n
p = np.array([[1, 0], [0, 1]])  # Pn|n=[resx,0;0 resVx]
# 创建状态转移矩阵,采样频率为1秒,所以△t为1 Fn transition
f = np.array([[1, 1], [0, 1]])
# 创建状态转移协方差矩阵,协方差较小  Qn=[σx^2 0;0 σvx^2]
q = np.array([[1e-6, 0], [0, 1e-6]])
# 创建观测矩阵 Hn
h = np.mat([1, 0])
# 创建观测噪声的协方差矩阵 Rn = E(WnWn^T)=E(z_noise),normal(0,1)均值为0,方差为1
r = np.mat([1])for i in range(100):# 迭代,计算5大步骤x_predict = f * x# p_predict = f * p * f.T + qp_predict = (f.dot(p)).dot(f.T) + qkalman = (p_predict * h.T) / (h * p_predict * h.T + r)x = x_predict + kalman * (z[i] - h * x_predict)p = (np.eye(2) - kalman * h) * p_predict# x[0,0]为预测位置,posx,x[1,0]为vxplt.plot(z_observed[i], x[1, 0], 'bo',linewidth=1.0)# 这里的真是画图应该为:(t, posx, posx-gt) (t, vx, vx-gt=1)# (t, Pn+1|n=1残差变化情况)  (t, Kn+1)增益依赖Yn+1观测的变化情况if i==0:p_stack = pk_stack = kalmanx_pos = x[0, 0]x_speed = x[1, 0]else:p_stack = np.hstack((p_stack, p))k_stack = np.hstack((k_stack, kalman))x_pos = np.vstack((x_pos, x[0,0]))x_speed = np.vstack((x_speed, x[1,0]))plt.xlabel("location")
plt.ylabel("correct speed")
plt.title("correct speed $X_{V_x}$")
plt.legend()
# plt.savefig("rst.png")
plt.show()
plt.figure()
plt.plot(z_observed, x_pos, 'o', color='blue', label='kalman correcnt')
plt.plot(z_observed, z_observed, 'x', color='green',label='posx ground truth')
plt.legend()
plt.show()plt.figure()
plt.plot(z_observed, x_pos.reshape(100)-z_observed, 'o', color='blue', label='$X_{n+1|n+1}-X_{real}=Res$')
plt.plot(z_observed, z-z_observed, 'o', color='green', label='$Y_{n+1}-X_{real}=Observ_error$')
plt.ylim(-5,5)
plt.legend()
# 设置坐标轴范围
plt.show()plt.figure()
plt.title("$P_{n+1|n+1}$")
plt.plot(z_observed, np.array(p_stack[0,::2]).reshape(100), 'go', label='${\sigma_{Resx}}^2$')
plt.plot(z_observed, np.array(p_stack[1,1::2]).reshape(100), 'bo', label='${\sigma_{Res_{Vx}}}^2$')
plt.legend()
plt.show()plt.figure()
plt.plot(z_observed, x_pos.reshape(100)-z_observed, 'o', color='blue', label='$X_{n+1|n+1}-X_{real}=Res$')
plt.plot(z_observed, z-z_observed, 'o', color='green', label='$Y_{n+1}-X_{real}=Observ_error$')
plt.plot(z_observed, x_speed.reshape(100) - 1, 'ro', label='$Xv_{n+1|n+1} - Xv_{real}=correct speed error$')
plt.ylim(-5,5)
plt.legend()
plt.show()a = a + 1

六、其他kalman滤波的简单例子

6.1 kalman滤波与平滑滤波

文章来源:卡尔曼滤波的理解以及参数调整_张京林要加油的技术专栏-CSDN博客_卡尔曼滤波参数

最主要是将kalman与平滑滤波(窗口平均)作对比

"""
Author: Zhou Chen
Date: 2020/3/27
Desc: 使用卡尔曼滤波进行状态预测
"""import numpy as np
import matplotlib.pyplot as pltplt.style.use('fivethirtyeight')# 创建位置观测矩阵,表示0-99的位移
z_observed = np.arange(100)  # 观测 vx=1. Yn+1 = x + vx * Δt + noise
# 创建高斯噪声矩阵np.random.seed(0)
z_noise = np.random.normal(0, 1, 100)
z = z_observed + z_noise  # 观测
# 创建初始状态矩阵Xn|n=[posx, vx]
x = np.array([[0, ], [0, ]])
# 创建初始状态协方差矩阵P,这里的1也可以是一个较为合适的较大数字 Pn|n
p = np.array([[1, 0], [0, 1]])  # Pn|n=[resx,0;0 resVx]
# 创建状态转移矩阵,采样频率为1秒,所以△t为1 Fn transition
f = np.array([[1, 1], [0, 1]])
# 创建状态转移协方差矩阵,协方差较小  Qn=[σx^2 0;0 σvx^2]
q = np.array([[1e-6, 0], [0, 1e-6]])
# 创建观测矩阵 Hn
h = np.mat([1, 0])
# 创建观测噪声的协方差矩阵 Rn = E(WnWn^T)=E(z_noise),normal(0,1)均值为0,方差为1
r = np.mat([1])for i in range(100):# 迭代,计算5大步骤x_predict = f * x# p_predict = f * p * f.T + qp_predict = (f.dot(p)).dot(f.T) + qkalman = (p_predict * h.T) / (h * p_predict * h.T + r)x = x_predict + kalman * (z[i] - h * x_predict)p = (np.eye(2) - kalman * h) * p_predict# x[0,0]为预测位置,posx,x[1,0]为vxplt.plot(z_observed[i], x[1, 0], 'bo', linewidth=1.0)# 这里的真是画图应该为:(t, posx, posx-gt) (t, vx, vx-gt=1)# (t, Pn+1|n=1残差变化情况)  (t, Kn+1)增益依赖Yn+1观测的变化情况if i == 0:p_stack = pk_stack = kalmanx_pos = x[0, 0]x_speed = x[1, 0]else:p_stack = np.hstack((p_stack, p))k_stack = np.hstack((k_stack, kalman))x_pos = np.vstack((x_pos, x[0, 0]))x_speed = np.vstack((x_speed, x[1, 0]))# 平滑滤波做对比
Filter_wid = 11
smooth_res = np.zeros(100)
for i in range(Filter_wid+1,100):tmpSum = 0for j in range(i - Filter_wid, i):tmpSum = tmpSum + z[j]smooth_res[i-1-5] = tmpSum / Filter_widplt.xlabel("location")
plt.ylabel("correct speed")
plt.title("correct speed $X_{V_x}$")
plt.legend()
# plt.savefig("rst.png")
plt.show()
plt.figure()
plt.plot(z_observed, x_pos, 'o', color='blue', label='kalman correcnt')
plt.plot(z_observed, z_observed, 'x', color='green', label='posx ground truth')
plt.legend()
plt.show()plt.figure()
plt.plot(z_observed, x_pos.reshape(100) - z_observed, 'o', color='blue', label='$X_{n+1|n+1}-X_{real}=Res$')
plt.plot(z_observed, z - z_observed, 'o', color='green', label='$Y_{n+1}-X_{real}=Observ_error$')
plt.plot(z_observed, smooth_res - z_observed, 'o', color='yellow', label='smooth filter')
plt.ylim(-10, 10)
plt.legend()
# 设置坐标轴范围
plt.show()plt.figure()
plt.title("$P_{n+1|n+1}$")
plt.ylim(0,1)
plt.plot(z_observed, np.array(p_stack[0, ::2]).reshape(100), 'go', label='${\sigma_{Resx}}^2$')
plt.plot(z_observed, np.array(p_stack[1, 1::2]).reshape(100), 'bo', label='${\sigma_{Res_{Vx}}}^2$')
plt.legend()
plt.show()plt.figure()
plt.plot(z_observed, x_pos.reshape(100) - z_observed, 'o', color='blue', label='$X_{n+1|n+1}-X_{real}=Res$')
plt.plot(z_observed, z - z_observed, 'o', color='green', label='$Y_{n+1}-X_{real}=Observ_error$')
plt.plot(z_observed, x_speed.reshape(100) - 1, 'ro', label='$Xv_{n+1|n+1} - Xv_{real}=correct speed error$')
plt.ylim(-5, 5)
plt.legend()
plt.show()a = a +1
  • 注意,没错的:kalman的就是预测,不用再左移或者右移的!!!!!!!!!
  • 平滑滤波只能是滤波,不能预测!!!!!!!!!他本来就要利用后面的,只能做滤波的

6.2 opencv kalman例子,鼠标跟踪程序等

学习OpenCV2——卡尔曼滤波(KalmanFilter)详解_Markala的博客-CSDN博客_kalmanfilter opencv

之前看过鼠标的例子的。

预测 & 观测 & 校正后的对比!

7. 优化失败的问题

在初始化阶段,目标就随意的切换速度,进行速度突变。违背了kalman模型。
因为数据关联成了影响轨迹是否成功的关键因素!!!

博客中引用的视频数据,多目标跟踪中的失败案例-C++文档类资源-CSDN下载

由于此处kalman的速度还在初始化阶段,并不是依赖于kalman的预测来做的分配。
而是根据distance metric来进行的强行分配!!!!

所以企图用kalman的速度来进行判断,是徒劳的。

kalman简单例子——初始化参数对kalman性能的影响相关推荐

  1. 负反馈元器件参数对功放性能的影响

    负反馈网络是宽带功率放大器中常用到的部分,它的作用一般包含改善增益平坦度以及提高电路的稳定性.常见的负反馈网络一般由RC串联而成. 负反馈网络对指标的影响 图一的方案中,在功放管的漏极和栅极之间串入R ...

  2. MySQL相关参数配置及性能优化

    MySQL及其优化 文章目录 MySQL及其优化 数据库相关概念 事务的四大特性ACID 影响mysql数据库性能的几个方面 数据库性能优化的重点 CentOS系统参数优化 内核相关参数(/etc/s ...

  3. som神经网络聚类简单例子_深度聚类的可视化解释

    作者:Amit Chaudhary 编译:ronghuaiyang 导读 视觉上的自监督学习方法,结合聚类,将无监督转变为有监督. 许多自监督方法使用[pretext tasks](https://a ...

  4. jvm默认的初始化参数_您是否应该信任JVM中的默认设置?

    jvm默认的初始化参数 如今,JVM被认为是智能的. 预期配置不多-只需设置要在启动脚本中使用的最大堆,您就可以进行了. 所有其他默认设置都很好. 大概我们当中有些人误以为. 实际上,在运行时期间发生 ...

  5. 计算机网络性能常见参数,计算机网络参数及其对网络性能的影响

    计算机网络参数及其对网络性能的影响 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机网络参数及其对网络性能的影响计算机网络参数及其 ...

  6. Oracle 初始化参数详解

    Oracle数据库系统根据初始化参数文件init.ora中设置的参数来配置自身的启动,每个实例在启动之前,首先读取这些参数文件中设置的不同参数. Oracle系统中的参数,根据系统使用情况可以简单分为 ...

  7. oracle -- Oracle初始化参数详解

    oracle -- Oracle初始化参数详解 Oracle数据库系统根据初始化参数文件init.ora中设置的参数来配置自身的启动,每个实例在启动之前,首先读取这些参数文件中设置的不同参数. Ora ...

  8. lammps计算聚合物例子_(从examples的简单例子,到完成自己的科研课题)LAMMPS分子动力学技术与应用专题...

    1 分子动力学模拟入门理论--掌握LAMMPS的in文件中各命令的意义 1.1系综理论1.2主要算法介绍1.3积分步长的选取1.4温度和压力控制1.5周期性边界条件1.6分子动力学模拟流程 2 LAM ...

  9. sap oracle 内存参数,ORACLE 25个需要深思熟虑重要的初始化参数

    此内容摘自 ORACLE 11gR2性能调整与优化一书,做为一个自己的笔记 1 MEMORY_TARGET : 这个初始化参数设定分配给PGA和SGA 的所有内存(11g 新参数).设置了MEMORY ...

最新文章

  1. Go 语言编程 — 高级数据类型 — Map 集合
  2. 七牛云上传文件之表单上传文件
  3. titanium开发教程-03-02自定义tab group
  4. C# 代码生成二维码方法及代码示例(QRCoder)
  5. 深入探索 Java 热部署
  6. opencv检测相交点_OpenCV:曲线的检测与提取-0
  7. 没有什么多模态任务是一层Transformer解决不了的!
  8. 数据结构期末复习之散列表的查找
  9. python面向对象和面向过程_python--什么是面向对象和面向过程,对象的进化,什么是对象...
  10. 【推荐实践】阿里文娱面向用户增长的信息流分发机制
  11. CentOS Bash 命令补全增强软件包 bash-completion
  12. 剑指offer_两个链表的第一个公共结点
  13. Windows Mobile 5.0编程—奥运场馆速查
  14. mysql校对集工具_mysql字符集和校对规则(Mysql校对集)
  15. nvidia 3d vision kit + opengl + 立体视觉程序开发
  16. 程序员如何提高自己的逻辑思维和技术水平
  17. 操作系统-消费者生产者代码C++Windows实现
  18. 若依微服务框架ruoyi-cloud使用手册(持续更新中)
  19. ByteBuf 读取字节数组数据
  20. 明星也有被「老赖」羁绊的困扰?

热门文章

  1. 微信小程序主包超2M打包发布成功等相关配置
  2. 自考深圳大学计算机专业难吗,深圳大学自考难吗
  3. matlab矩阵[](:)使用方法
  4. Java和Julia谁更快_Julia和Java性能比较
  5. 从零开始的ASR(语音识别)之旅(附项目案例程序与环境配置过程)
  6. ROS语音交互(三)科大讯飞语音在ROS平台下使用
  7. arrays shot JAVA_Apache Flink 1.3-SNAPSHOT 中文文档: Java 8
  8. CTF 关于ZIP解题过程
  9. checkmarx : Input path not canocalized 问题解决方法
  10. MyBatis之如何解决数据库数据加密解密