Hello Next
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
1 | $ hexo new "My New Post" |
More info: Writing
Python 学习第一课
今天开始学习python,用的教程主要是网上的mooc,为了更好地梳理自己的学习思路,特将一些比较重要的点记录下来。
寻找第n个默尼森数
寻找第n个默尼森数。
代码格式如下:
1 | def prime(num): |
题目内容:找第n个默尼森数。P是素数且M也是素数,并且满足等式$M=2^P-1$,则称M为默尼森数。例如,$P=5,M=2^P-1=31$,5和31都是素数,因此31是默尼森数。
输入格式:用input()函数输入,注意如果Python 3中此函数的返回类型
输出格式:int类型
输入样例:4
输出样例:127
时间限制:500ms内存限制:32000kb
模板函数的使用
- 模板函数应该将声明与定义放在一起
看如下例题:对普通函数来说,声明放在头文件中,定义放在源文件中,其它的地方要使用该函数时,仅需要包含头文件即可,因为编译器编译时是以一个源文件作为单元编译的,当它遇到不在本文件中定义的函数时,若能够找到其声明,则会将此符号放在本编译单元的外部符号表中,链接的时候自然就可以找到该符号的定义了。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26//tem.h
#ifndef _TEM_H
#define _TEM_H
template<typename T> T add(T a, T b);
//{
//return a+b;
//}
#endif
//tem.cpp
#include "tem.h"
template <typename T> T add(T a, T b)
{
return a + b;
}
template int add(int, int);//实例化定义,必须放在模板定义的后面
//main.cpp
#include <iostream>
#include "tem.h"
using namespace std;
int main()
{
cout << add(1, 2);
return 0;
}
而对模板函数来说,首先明确,模板函数是在编译器遇到使用模板的代码时才将模板函数实例化的。若将模板函数声明放在tem.h,模板定义放在tem.cpp,在main.cpp中包含头文件,调用add,按道理说应该实例化int add(int,int)函数,即生成add函数的相应代码,但是此时仅有声明,找不到定义,因此此时,它只会实例化函数的符号,并不会实例化函数的实现,即这个时候,在main.o编译单元内,它只是将add函数作为一个外部符号,这就是与普通函数的区别,对普通函数来说,此时的add函数已经由编译器生成相应的代码了,而对模板函数来说,此时并没有生成add函数对应的代码。此时编译main.cpp单元不会报错,但链接就会出现add函数未定义的错误。
因此,我们可以通过显式的实例化定义,即通过加上语句temmplate int add(int,int)
,编译器看到此语句将会生成add方法的int版本,这样的话,再链接就不会报错了。此外,这样做通常也能够提高编译的效率。试想,如果在tem.h文件内定义模板,假如有三个源文件均包含了该头文件且均使用了模板(假定均调用了add模板的int版本),则在这三个源文件内必然都会生成add函数的实例。显然效率不高。而如果像上面那样使用该模板,则只会在tem.cpp文件中实例化。
同理对于类模板和类模板函数亦如此。
关于stringstream 的一些坑
关键点一: 同一个stringstream对象来多次处理数据,每次使用前,使用stream.str(“”);保证数据已清空。
例如:
1 | std::stringstream ss; |
又或者参看下面这段程序:
1 | #include <cstdlib> |
我们发现运行程序前打开任务管理器,过不了几十秒,所有的内存都将被耗尽!
而把stream.str(“”); 那一行的注释去掉,再运行程序,内存就正常了。
看来stringstream似乎不打算主动释放内存(或许是为了提高效率),但如果你要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消耗,因些这时候,需要适时地清除一下缓冲 (用 stream.str(“”) )。
另外不要企图用 stream.str().resize(0),或 stream.str().clear() 来清除缓冲,使用它们似乎可以让stringstream的内存消耗不要增长得那么快,但仍然不能达到清除stringstream缓冲的效果(不信做个实验就知道了,内存的消耗还在缓慢的增长!)
用 LaTeX 排版技术书籍
最近要写技术文档,里面包含大量的数学公式,本来想用markdown,但是
markdown不适合提交到公司,于是想着还是用自己学过的Latex吧。
于是在网上去搜使用Latex写技术文档/技术书籍的模板,还真找到了一篇,即《用 LaTeX 排版技术书籍》。本来他提示使用tex studio编译,但我使用tex studio编译后可以运行,却不能导出pdf,总是提示:
1 | <span style="font-size:18px;">** WARNING ** Obsolete four arguments of "endchar" will be used for Type 1 "seac" operator. |
查了半天原因。最后定位在一个list环境中。查了一下google,一下子就找到了原来也有人犯过同样的毛病。具体的改正方法竟然是将一个“,”移到“}”外面去,结果一下子就编译成功了。
在in实习的日子里
我是个幸运的家伙,我一直在暗暗跟自己说,每一段人生的过往我都和一批快乐的小伙伴一起度过。临到毕业季,我还抓住了毕业的尾巴,来到杭州实习,在in这个温暖的大家庭一起和大家度过了最充实最美好的时光。
我还清楚地记得我刚来实习的那几天。自去年收到in的offer,我就准备抽时间来实习,本来想要在1月1日来实习,可是由于毕业论文的因素一直拖到了2月22日,到了要走的那一天,我挑了一些和图像处理相关的书以及一些衣服就坐上了到杭州的无座火车,当时没买到票,就凑合着和人家挤着坐着混混沌沌地来到了杭州。
来到杭州就联系了我的大学同学邹浩,我们叫“耗子”。耗子帮着我一起找了房子,找了一天的时间,累成狗了,主要我预计实习三个月,所以短租不好找,经过努力,最后还是看上了一家。房子的问题终于解决了,那么我的实习生活也正式拉开帷幕了。
3000fps&SDM方法资源摘录
去年在美图公司实习的时候,研究了一段时间的SDM方法,写了一系列的博客,见《Supervised Descent Method and its Applications to Face Alignment》等,今年来到了杭州,进入了图片社交领域的佼佼者in实习,主要还是做人脸对齐。最近一段时间,一直在研究《Face Alignment at 3000 FPS via Regressing Local Binary Features》这篇文章,也为此搜集了很多资料,特整理在此,以供参考。
paper:
3000fps论文链接:
Face Alignment at 3000 FPS via Regressing Local Binary Features
SDM论文链接:
Supervised Descent Method and its Applications to Face Alignment
Supervised Descent Method for Solving Nonlinear Least Squares Problems in Computer Vision
github code linking:
3000fps:
- luoyetx/face-alignment-at-3000fps(C++)
- freesouls/face-alignment-at-3000fps(C++)
- yulequan/face-alignment-in-3000fps(C++)
- jwyang/face-alignment(matlab)
- jwyang/face alignment in 3000fps with C++
- soundsilence/FaceAlignment
SDM:
- patrikhuber/superviseddescent(C++11)
- patrikhuber/superviseddescent说明
- IntraFace(SDM官网)
- SDM作者主页
- IntraFace说明
- tntrung/impSDM(matlab)
- IntraFace 官方给的代码,可直接运行
other linking
- Face Alignment 最近几年paper收集
- An Empirical Study of Recent Face Alignment Methods
- Heng Yang @ Cambridge
- flandmark : Open-source implementation of facial landmark detector
- Supervised Descent Method Face Alignment 代码下载和算法研究
- 浅谈随机森林在人脸对齐上的应用~
- Face Alignment at 3000 FPS via Regressing Local Binary Features(luoyetx’blog)
- Face alignment at 3000FPS via Regressing Local Binrary features 理解
- C++实现和解读Face Alignment at 3000fps via Local Binary Feature
- SDM ppt
- 3000fps ppt
- Face Alignment at 3000FPS(C++版)工程配置
- Face Alignment at 3000FPS(matlab)工程配置
开源库链接及评价
评价:速度快,可商用,有些时候不太准确
2. CLM-framework: https://github.com/TadasBaltrusaitis/CLM-framework,
新版已经改为OpenFace,见:https://github.com/TadasBaltrusaitis/OpenFace
评价:很准确,不可商用
3. Face Detection, Pose Estimation and Landmark Localization in the Wild :http://www.ics.uci.edu/~xzhu/face/
评价:Very slow (~10 seconds an image after hyper threading on a 8-core CPU), but very accurate when it comes to high pose variations
4. SDM patrikhuber/superviseddescent:https://github.com/patrikhuber/superviseddescent
评价:Nicely written C++ code, though not very robust
5. Robust face landmark estimation under occlusion:http://www.vision.caltech.edu/xpburgos/ICCV13/
评价:Specially designed for handling occlusions(遮挡区域), but slow on account being written in MATLAB.
6. 应用了CLM的项目:https://www.technologyreview.com/s/541866/this-car-knows-your-next-misstep-before-you-make-it/
评价:I actually explored a large number of open-source facial landmark detectors for a project, and found the CLM framework to outperform everything else (in terms of both speed and accuracy). We eventually used it in our project: www.technologyreview.com/news/…
7. clandmark:https://github.com/uricamic/clandmark
8. kylemcdonald/FaceTracker:https://github.com/kylemcdonald/FaceTracker
9. Android app for facial landmark tracking
评价:安装该app需要OpenCV Manager,我已提供链接.。
至于效果,不是很好,需要优化。不过上面提供了编写jni的代码,对于编写C++的API应该会有帮助。
10. kylemcdonald/FaceTracker:https://github.com/kylemcdonald/FaceTracker
11. ofxFaceTracker:https://github.com/kylemcdonald/ofxFaceTracker
参考文献
坚持住,不放弃
这些天很苦恼,做了快一年的研究生工作就要放弃了,我必须要换个题目来做了。为什么要这样,其实这也不是我情愿的,谁想花时间去做一个新的题目呢?
我想诉说,但是又有何用呢?我研二开始做那个题目,期间学习了很多的技术,如Qt,C++,数据结构等等,也靠着这个找到了工作,总算是有些收获。所以还算好,不算亏。
至于为什么换题目呢?原因是我的论文被顶了。我做这个项目是从去年9月份正式开始的,期间学习了很多编程的东西,因此进度比较慢,所以进展也不是很顺利。后来做到今年4月份了,我想去实习,为找工作做准备,后来实习找到了,我也就把之前的项目暂时放一放了,想着回来了以后再做。结果导师把相同的题目给了师兄。后来师兄做完了,我实习结束后也做得差不多了,但是内容、框架都很相似,所以就难以做成我的毕业论文了。
听到这个消息的时候,我真是很难受。毕竟自己做了那么长时间的文章,现在却不能写到自己的毕业论文里,别提有多气愤!不过,现在我也慢慢释然了,毕竟我在上面也学到不少东西,人应该知足。
接下来,还有2个月的时间,我给自己定下一个目标,一定要在过年之前,论文要基本上做出来。我现在还没有找到合适的题目,我还要做找一找,无论是几何、逼近、小波、复变、实变、泛函、数值计算等等,都要找一个题目出来,以做理论推导为主,数值模拟为辅,首先先把范飞龙博士的文章好好读一读,明天早上开始,这些天,我先仔细地读读文章,然后再一边寻找。如果能一次性做两个题目,那是最好的,也能更好地答辩。
我一定要争气,让导师对我刮目相看。
也许命运就是考验我们这些人,我要经得住考验,以后工作也是这样,要随时迎接各方面的转变,我在毕业前深深地明白了这个道理,我一定会好好努力的。
过去的从今晚就开始翻篇了,我也不会再去碰那个程序了。就让它成为一段历史吧。
今后好好努力,在图书馆或者教室自习,奋发图强,一定会成功的。加油,王财勇。
我的求职之路
不经一番寒彻骨, 怎得梅花扑鼻香
一直都想好好总结一下自己的求职之路,一方面系统总结一下自己这几个月的辛酸历程,一方面也以后的学弟学妹们留下一点宝贵的财富。截至今天,我已收到两份offer,一份是厦门美图网科技有限公司的图像算法工程师,另一份是华为深圳研究所的软件工程师。两份offer来之不易,种种心酸,历历在目。