刚刷了一部分网络题,又出了个模板类编程。没人能从面试中得到自己想要的方法,只能得到能看得到的结果!!!
一 概率图模型
贝叶斯模型,真是推导不出来了!贝叶斯函数貌似也写不出来了!
参考:斯坦福概率图模型-贝叶斯网络 -https://blog.csdn.net/wishchin/article/details/14136257
贝叶斯网络,是一个有向无环图的网络,其中节点表示的是随机变量,可以是观测变量、隐性变量或者参数等。
马尔科夫性,来源于自动化领域随机过程的概念。马尔科夫决策过程(Markov Decision Process),动态规划(Dynamic Programming)的基础都是马尔科夫性质/无后效性。
简言之,*未来与过去无关,只和现在有关 *
即: P ( X n + 1 ∣ X 0 , . . . , X n ) = P ( X n + 1 ∣ X n ) P({X_{n+1}|X_0, . . . , X_n}) = P({X_{n+1}|X_n} ) P(Xn+1∣X0,...,Xn)=P(Xn+1∣Xn),
HMM网络,隐马尔科夫网络。是一种结构最简单的动态贝叶斯网的生成模型,为马尔科夫网络添加一个隐层,参考:HMM模型,训练算法有前向,后向,以及著名的维比特算法。
CRF,条件随机场,是遵循马尔科夫性的概率图网络,是一个典型的有向图网络,CRF是一个判别式模型。
HMM模型训练最终会收敛到一个稳定的转移矩阵。CRF模型用于图像分割,即(CRF)用于pixel-wise的图像标记。最小化CRF图像标记gIbbs能量得到的势函数,即完成最优分割的过程。
参考:ANN-生成式模型-https://blog.csdn.net/wishchin/article/details/45101251
参考:Time Analsisy HMM-model :https://blog.csdn.net/wishchin/article/details/51594271
参考:从感知机到深度网络-https://blog.csdn.net/wishchin/article/details/45067177
参考:神经网络进行降维--https://blog.csdn.net/wishchin/article/details/45287125
CRF模型作为经典的传统分割方法,曾得到广泛的应用。在DeepLab中也使用了CRF方法作为精细调整。
生成式模型是06年深度学习的讨论基础,通过大量数据预训练,学习出波尔兹曼机参数,得到的生成结构,是结构学习的基础。但此后的深度学习并没有在此路径上取得好的成果,指导2012年的Alexnet在CNN上的巨大成功,才引领学习模型从传统方法到深度方法的演进。
二 模板类
PCL算法库几乎完全使用模板库编程,以适应各种类型的点云数据,使用PointT代替PointRGBAX...之类的;
以RanSac为例,SampleConsensus 貌似是一个抽象类
template <typename PointT>
class RandomSampleConsensus : public SampleConsensus<PointT>
{
typedef typename SampleConsensusModel<PointT>::Ptr SampleConsensusModelPtr;
public:
typedef boost::shared_ptr<RandomSampleConsensus> Ptr;
typedef boost::shared_ptr<const RandomSampleConsensus> ConstPtr;
using SampleConsensus<PointT>::max_iterations_;
using SampleConsensus<PointT>::threshold_;
using SampleConsensus<PointT>::iterations_;
using SampleConsensus<PointT>::sac_model_;
using SampleConsensus<PointT>::model_;
using SampleConsensus<PointT>::model_coefficients_;
using SampleConsensus<PointT>::inliers_;
using SampleConsensus<PointT>::probability_;
/** \brief RANSAC (RAndom SAmple Consensus) main constructor
* \param[in] model a Sample Consensus model
*/
RandomSampleConsensus (const SampleConsensusModelPtr &model)
: SampleConsensus<PointT> (model)
{
// Maximum number of trials before we give up.
max_iterations_ = 10000;
}
/** \brief RANSAC (RAndom SAmple Consensus) main constructor
* \param[in] model a Sample Consensus model
* \param[in] threshold distance to model threshold
*/
RandomSampleConsensus (const SampleConsensusModelPtr &model, double threshold)
: SampleConsensus<PointT> (model, threshold)
{
// Maximum number of trials before we give up.
max_iterations_ = 10000;
}
/** \brief Compute the actual model and find the inliers
* \param[in] debug_verbosity_level enable/disable on-screen debug information and set the verbosity level
*/
bool computeModel (int debug_verbosity_level = 0);
};
}