sift算法源码python_算法小白的学习路线(二):

在学习路线(一)中我们开了头介绍了算法工程师的一些分类以及一些小白同学需要掌握的应付校招的技术栈。这篇文章我就从自己学习角度提供一些技术学习路线的介绍,其中会推荐大家一些我亲身阅读过的好书,好博客以及好的开源项目,并且给一些我自己的读后感。由于笔者主要接触过计算机视觉,推荐广告算法,对于 nlp 和风控只能是勉强入门,所以后面介绍更多从我自身了解的去做介绍,也希望能和对这些方向有更加深刻的了解的大佬多多交流。由于本人水平有限,仅供参考,欢迎大家加我微信 zyws_2020,与我交流。

https://u.wechat.com/MCA2LDu6UOLIma06gy0PZM0 (二维码自动识别)

(1)python 的学习

首先 python 是一门 api 繁多的语言,所以明确记住所有的 api 是一件困难而没必要的事情,我们只需要知道有字典的索引,然后需要的时候可以查到就好了,这里推荐两本字典,一个是廖雪峰老师的官网,一个是菜鸟编程,直接百度输入关键字就可查到。我觉得更重要的是我们脑子里建立索引的这个过程,这个时候我会推荐你这本书:

a47af52f9525cfbf784011b24be55514.png

这本书可以帮助新手小白快速的建立起对于 python 涉及到的内容的知识体系,同时有一些有趣的项目可以提升对于 python 学习的兴趣。当然你不只希望把 python 当做一门简单的工具型语言,而希望建立起对其底层架构和逻辑的理解,我会推荐你下面这本书《流畅的 python》

adab0416cda234123527add997daeb43.png

这本书堪称 python 中的《C++ primer》,这里顺带吐槽一句,如果你要学习 C++,一定记得只用买《C++ primer》而不要买《C++ primer plus》,听上去是 plus,实则质量远不如前者。在《流畅的 python》这本书里面介绍了很多高阶的,一般同学不会注意的概念,python 虽然作为一个脚本语言,但是它实际上是一个编程语言发展的集大成者。在这本书中我们会有意识的关注到 python 基本数据结构底层原理,函数式编程的思想,垃圾回收机制,元编程 ,抽象继承,迭代器,上下文管理器,并发,协程等,十分不错。 当然作为算法的同学学习 python 主要还是为了快速的实现机器学习算法,那么对于一些基本的机器学习相关的库(包括 numpy(scipy),pandas,scikit-learn,matplotlib 的学习)是十分必要的,关于 numpy(scipy),pandas,matplotlib 的学习我会推荐你《利用 python 进行数据分析》这本书,实在太好了,通过这本书可以快速构建对这几个库的基本了解,当然至于深入的一些 api 细节书中没有涉及,不过没关系,索引已经在你的脑海里建成了,剩下的就是去这些库的官网 api 中去查就好了

a530ab231b9b974c74aa259751b5d0b6.png

如果你想学习 scikit-learn 这个库我会推荐你《机器学习实战-基于 scikit-learn 和 Tensorflow》

d1181eb99cf093e231b7dad8f25e840d.png

这里面对于利用 scikit-learn 构建机器学习的 pipeline 有着深入的介绍,这里我还给大家提供两个我认为很好的学习方法,一个是 kaggle 比赛的新手赛,kaggle 有几个祖传的新手赛,即泰坦尼克号,房价预测,minst 数据集图像检测,还有一个基于文本的情感预测,这些新手赛完全 handle 了算法的主流领域,跟着里面的高赞解答去学习,看不懂的英文用有道词典划屏翻译,在这里你会系统的接受到整个机器学习的 pipeline,包括 scikit-learn 的应用以及前面的 EDA(exploratory data analysis),数据清洗或者增强,特征工程以及后续的模型集成等 trick,非常好的入门机器学习的方法。第二个方法是看 scikit-learn 的官方 api 文档,scikit-learn 是我认为见过的 api 文档介绍最详细的库之一,看这里的文档乃至学习其中的源码对于提升对库的熟悉程度以及自己的项目编程能力十分有帮助。

(2)对于机器学习知识的学习。

首先推荐的当然是西瓜书和李航的《统计学习方法》了,这两本书很经典权威,但是公式太多了,容易让人看的枯燥头疼,这个时候我们需要辅助这本书《机器学习实战》,这本书教你用纯纯的 python,而不调用机器学习包的方式去实现机器学习算法。

aa201d892a7d0b9a22ced3599d935aef.png

同时推荐一个 github 即https://github.com/WenDesi/lihang_book_algorithm,里面也是使用纯python来实现《统计学习方法》中的每章内容,当然我们也可以直接参照scikit-learn的源码去学习。为了针对具体的面试,我会推荐大家这本书《百面机器学习》,人称“葫芦书”,这里吐槽一下最近新出的这本书的姊妹篇《百面深度学习》买回来看了之后感觉干货不够,完全没有《百面机器学习》经典。

cdf186f739d2e1d2f1f84d9e1da80da5.png

当然大家在面试的过程中可能会遇到让手撕推导公式,这个时候不看西瓜书就不行了,这里推荐大家南瓜书,这是一本由 datawhale 整理的南瓜书。(https://github.com/datawhalechina/pumpkin-book/releases)这里面整理了西瓜书里面的所有公式的详细推导,相信对于低年级的同学很有帮助。最后就是纯机器学习的话,必然绕不开机器学习大杀器xgboost及其衍生算法lightgbm,catboost,这三大算法在kaggle上统治了很多的比赛。关于这三个方法以及之前关于gbdt的预备知识,网上有很多介绍都对如xgboost如何并行,如何处理样本不平衡等面试常问问题做解答。这里我推荐的链接有https://mp.weixin.qq.com/s/HDEKnIufbW8xQcOgHaXlZw,https://mp.weixin.qq.com/s/a4v9n_hUgxNyKSQ3RgDMLA,以及如果大家想更加深入的学习xgboost,有一本书推荐给大家,可以带你亲身使用xgboost。

625d4581e5fea01615194f5137f3d168.png

当然考虑到很多小伙伴喜欢看视频先打底子,我这里主要推荐这样两位台湾大学老师的机器学习课程,一位是林轩田上的《机器学习基础》和《机器学习技法》,一位是李宏毅老师的《机器学习》。这两位老师的课都很通俗易懂,又相比于吴恩达的课多了深度,其中李宏毅老师不仅讲过《机器学习》还讲过许多其他领域的算法,比如 cnn(cv 领域),bert(nlp 领域),强化学习,Gan。对于一个新的网络架构,如果想快速的了解的话,b 站上搜李老师的视频是一个好办法。

(3)对于深度学习的学习

深度学习的花书即《深度学习》那本不可或缺,就像机器学习中的西瓜书一样经典。这里我再给大家安利几个干货博主的整理,一个是谈神等人整理的深度学习五百问,github 链接https://github.com/scutan90/DeepLearning-500-questions,不知道是不是出书了,但是github上有最新的电子版,里面有挺多干货,很多都是深度学习的面试原题,第二个是amusi这位博主整理的deep learning interview book,github 链接https://github.com/amusi/Deep-Learning-Interview-Book

(4)对于计算机视觉的学习

首先我想提到的是如果你想找计算机视觉算法,那你复习基础计算机知识是十分必要的,至少你需要去看冈萨雷斯的《数字图像处理》,看不明白可以去 b 站找电子科大的有位老师上这门课,因为书非常经典,第一遍看不明白是很正常的,可以多反复回来阅读,接下来可以去看一本名叫《计算机视觉-算法与应用》的一本蓝皮书,如果有时间的话也可以阅读章毓晋老师的《图像分析》上中下三册,总之对图像工程有一个深度(历史发展和演进)和广度(成像原理到 3d 场景理解)的把握是十分必要的。具体到深度学习时代的计算机视觉,可以从 cs231n 李飞飞课题组的那门课开始入门,不得不说国外大学的课非常通俗易懂且重视实操,结合着 pytorch(cv 用 pytorch 最多)的教程中的许多 cv 例子,就可以对深度学习的计算机视觉有一个不错的了解。如果实验室是有计算机视觉方向的,我建议大家从视觉最基础的方向目标检测开始,仔细阅读目标检测的一阶段方法 yolo、ssd 和二阶段方法 faster rcnn 的源码,对源码细节的理解就是你基本功的提现。这里我仍然推荐大家一本书《深度学习之 pytorch 物体检测实战》,这本书写了很多源码的细节,对于检测问题进行了十分细致的梳理,十分值得一看。当然打好计算机视觉基础上对于具体深入细节领域,比如很火的 ocr,视频理解,点云等,我们需要多读论文,follow 相关有源码的工作,不管怎样,follow 最新的工作,多读论文是一位算法工程师的必须该做的事情

20e0c000563f7d563a49bf756ad7696f.png

(5)对于推荐算法和计算广告的学习

其实就笔者了解,大多数的研究生的研究方向并不是推荐算法方向,这主要由于推荐算法本质上是在大数据状态下才能体现价值,这相比于 cv 和 nlp 领域对于实验室的要求更高。推荐系统的入门书籍推荐的是项亮的《推荐系统实践》,这本书很老,里面很多方法已经过时,但却是第一本已知对推荐系统是什么给了全面的介绍的科普书,很多推荐系统的大佬都是从这本书开始了自己的职业生涯。进阶一些的我会推荐《推荐系统与深度学习》以及原 hulu 的王喆老师今年新出的《深度学习推荐系统》,前者成书较早,借着深度学习的浪潮,推荐系统也得到长足的发展,书中附有较多的代码实践,后者是王老师的今年新作,我十分推崇,虽然不涉及到代码,但是的确涉及到许多业内知识的干货,能然没去过业界的小白也能了解到业界的推荐系统是什么样子的生态,当然书中的部分内容在王喆老师知乎号上也有体现,如果不想直接买书的同学可以去知乎上“白嫖”,不过还是建议大家都人手一本。

ac2fe3385533316cf1166f4370e42895.png

37a6e685e203eca397369029ea09e40c.png

关于推荐算法的实操学习,推荐的阿里浅梦的 deepctr 和 deepmatch 代码复现以及他的公众号浅梦的学习笔记,还有美团文文的小小挖掘机公众号,这两个我都会一直 follow。此外推荐算法是一个与业务 sense 结合紧密的方向,如果你没有机会去实习或者参与到相关的项目,我推荐两本很有业务 sense 的书希望可以对你有帮助,第一本是腾讯实习时 leader 力推的《推荐系统》,很明显可以感到这本书对推荐系统的视角是十分工程化的,有全局视角和业务 sense,还一本是《美团机器学习实践》,通俗易懂帮助学生快速了解业界在发生什么,十分干货。

cdf1863796593146bf84bc319b5327c9.png

af183f9e66d88ebe5577f6501f7e9006.png

关于计算广告的学习,这里推荐两本书,分别是《在线广告》以及刘鹏的《计算广告》。

5bb8c6a13e7dd5240bf1f12ee63df862.png

b7da2034f952d8199b2d6e4c0ae43327.png

当然由于广告在我们实际实验室研究中出现较少,建议大家学习过程还是可以借助阿里天池,datawhale,京东的 JData,腾讯广告大赛的优秀开源的解决方案去学习,这里推荐鱼佬的公众号鱼遇雨欲语与余,大家可以 follow 他的公众号以及微信公众号 Coggle 数据科学(鱼佬是连续两年的腾讯广告大赛的冠军)。

(6)对于 sql,大数据工具 hive,spark 的学习:

事实上在我的实习生活中我发现这三项技术用的十分之多,所以常常算法工程师也被戏称为 sql boy or sql girl。关于 sql,我推荐一本书《sql 必知必会》,书里面主要是以 mysql 数据库的 sql 语法做了介绍,在 hive sql 中略有不同,但区别不大。

066491d46cedad971d20b176a16faa6a.png

关于 hive 的学习推荐《Hive 编程指南》

2d293fa5621d6f506a0e9f41467ab84f.png

spark 分为 pyspark 和 scala 实现的两个主流版本,关于 scala 实现的版本,推荐《spark 快速大数据分析》

98d7e4a4d8ef99900b4c2081ba6e0eb1.png

关于提供 python 兼容接口的 pyspark 推荐

c8e13b783571a1c30b3cf40098e2a170.png

如果你在使用 spark 的过程中需要对 spark 性能进行调优,推荐美团技术文章 https://tech.meituan.com/2016/04/29/spark-tuning-basic.html https://tech.meituan.com/2016/05/12/spark-tuning-pro.html,也推荐一本介绍spark底层机制的书

98f9fb266433a70ef1c10e6d232b3626.png

(7)对于系统设计的学习

系统设计似乎对于挺多开发的同学十分爱考,作为算法同学我想也有必要做一定了解,推荐这本

cf5d496237766be5751b83451bc03a40.png

(8)对于数据结构与算法的学习

数据结构与算法是算法秋招中的重中之重,首先它有明确的应试作用,正所谓 talk is cheap, show me the code, 基本互联网公司面试如果 coding 写不出来就会挂掉,如果写的不好不快就也很难拿到 special 的 offer,代码能力能够显著的检测出一个同学的逻辑能力,思维严密度和对语言的熟悉度。以前我一直觉得 leetcode 在工作中用不到,直到实习时才发现其实有很多实际场景背后的思维就是数据结构算法的题目,其中一个是我在做大数据的采样的时候为了提高速度采用了蓄水池抽样,一个是在分配多路召回队列的 item 数时把它作为一个经典的“背包”问题解决。 关于数据结构与算法的学习,首先我推荐像和我一样跨专业没有基础的同学先去学习清华大学的邓俊辉老师的数据结构与算法全套课程,是我遇到的少数能讲课如此好的国内课程之一,配套的还有教材和习题,可以在淘宝上搜到,买回来练习一下。如果你觉得视频学习太慢,想尽快进入状态,这里我推荐你看这本剑指 offer,这本书相信大家都知道。

2df3b264c2e8fa9697420373e4a88d50.png

接下来大家可以开始刷 leetcode 题目,注意这里一定要按照 tag 来刷,即按照题目类型来刷,而不是按照先后顺序来刷,就我了解的情况一般大家都会刷 250 道左右的 leetcode,最初做 leetcode 会非常痛苦,会觉得智商被碾压,不要灰心,这是正常的,基本上据我了解除了本科做过 acm 训练的同学做起 leetcode 会得心应手之外,大多数同学,包括名校科班出身的同学初做 leetcode 都会觉得吃力。这里重要强调的是两点,一个是量变带来质变,真的当你做到一定数量的时候,你会朦朦胧胧感受到这些题目是存在套路和模板的;第二点就是要学会总结套路,最好可以模板化下来,这里我推荐 labuladong 这个公众号,这个博主据说也是跨专业的同学,自身总结 了一些非常好的套路,包括对于一些常见的面试会考的智力问题,如“高楼扔鸡蛋”问题都做了很细致的总结。此外如果大家时间充裕给大家推荐左程云老师的这本书。左老师是我知道的唯一一位把刷 leetcode 做成事业的前辈,当然里面有很多自己沉淀的精华所在。这本书主要用 java 实现的,讲了许多经典题目,但是客观而言相比于他自身在牛客上上的课,书里的套路总结不够明晰,可能由于书和课程组织目录的角度不同,我个人购买了牛客的课程,且更加喜欢课程的目录组织方式,当然这门课有点小贵,几百人民币吧,可以去看牛客,当然还有一些你懂的方式。

a27ef142e02a9fdaa68414281667d1a3.png

此外关于刷 leetcode 的语言问题,这里我就自己的观察给出的建议如下,如果你是做 cv 的,那么就用 C++吧,推荐 grandyang 的刷题指南,直接百度可以搜到,如果你是别的方向的,建议用 python,这个用 python 真的不是一个很丢人的事情,我以前有这种误区,但是我后来发现在一个比较成熟的算法团队,大家平常如果不写线上代码的话,写的最多的还是 python,而且 python 有一个好处就是 api 很多,同样的时间,你可以更快更好的完成代码,给面试官一种你很聪明的感觉,尤其是在笔试的时候,C++的调试复杂 n 倍,花费大量的时间在面对复杂的 C++语法上是很亏的(当然需要强调的是 python 使用 api,你要注意把握分寸,不能别人让你写快排,你直接一个 sort()就完事了,这很明显违背了考察者的本意了)。

(9)关于其他知识的学习:

由于本人基础不好,所以在研究生期间也偶尔会补习一些计算机基础知识,以及由于之前一度对职业生涯方向有过迷茫,所以对一些别的算法领域也有一点入门。所以这里就统一总结下我认为对自己帮助很大的书单给大家学习用。 关于计算机基础:这本 csapp 必看

b056138e25a5bf24526d0c72d56bd0dd.png

关于风控,推荐梅子行老师的两本书,顺带说一句本人之前在七月在线买过梅子行老师的风控课程,感觉质量不错,这里我多说一句,有同学觉得在网上买课程是很不划算的事情,其实不然,个人觉得如果有一个机会和领域内深耕多年的专家交流,那区区几百块钱对于算法行业的工资来说实在算不了什么。

a732f02d4cb8236e8ef0b3e3afae34de.png

a9047749874d0e5e04eb5add297c2749.png

关于自然语言处理,我在网上也买过挺多书籍,但我发现里面的知识都不够新,不能 cover 到最新的 nlp 发展近况,所以书就没什么推荐的,这里推荐大家两门课程,一个就是 CS224N,是斯坦福的一个老教授的课程,注意大家在 b 站上找的时候一定要找最新年份的,因为 b 站上有一门 17 年的是没有涉及到 transformer 及 bert 后时代的内容,最新的课程中是邀请到了 transformer 的作者来讲解 transformer,很与时俱进,另一门课程就是李宏毅的《自然语言处理》,也是非常的与时俱进。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未使用包,python源码实现。 SIFT 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所发表,2004年完善总结。 其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。 此算法有其专利,专利拥有者为英属哥伦比亚大学。 局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。 SIFT算法的特点有: 1. SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性; 2. 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配; 3. 多量性,即使少数的几个物体也可以产生大量的SIFT特征向量; 4. 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求; 5. 可扩展性,可以很方便的与其他形式的特征向量进行联合。 SIFT算法可以解决的问题: 目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。而SIFT算法在一定程度上可解决: 1. 目标的旋转、缩放、平移(RST) 2. 图像仿射/投影变换(视点viewpoint) 3. 光照影响(illumination) 4. 目标遮挡(occlusion) 5. 杂物场景(clutter) 6. 噪声 SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。 Lowe将SIFT算法分解为如下四步: 1. 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。 2. 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。 3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。 4. 关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。 本文沿着Lowe的步骤,参考Rob Hess及Andrea Vedaldi源码,详解SIFT算法的实现过程。 未使用包,python源码实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值