前两天firefox 3发布,创下了单日下载的纪录。
今天试用了一下,确实改进不少,速度,界面,以及一些用户体验都很好。辅以一些必备addin,如theme, gbookmark, downloadthemall等,使用体验胜于IE7。之前用IE7主要是因为速度快,在Vista下也很好用,不过FF3似乎有胜于它的趋势,也就重新支持FF3了。
2008年6月21日星期六
2008年6月19日星期四
盖茨退休 留给全球商界意味深长的遗产
关于盖茨创业的经历,有本书写得很好 -- "Hard Drive: Bill Gates and the Empire of Microsoft"
转自: http://www.cnbeta.com/articles/58422.htm
一个在不朽的IT事业中寻求到历史庇护的人,他就是比尔·盖茨.比尔·盖茨已经在人类商业群星闪耀的天空中留下痕迹——有学界人士认定,今后的100年里,人们定会像谈论洛克菲勒、卡耐基和福特一样谈论比尔·盖茨.盖 茨代表了PC(个人电脑)时代IT领域个人能取得的最高成就,一个垄断了“世界首富”长达13年之久的人,而他即将于今年的6月27日正式退休.毋庸置疑,他是一个天才.但天才不足以成为传奇,在一系列的必然背后,存在着大量无法复制的偶然.是必然和偶然,共同造就了比尔·盖茨.
微软传奇
尽管苹果公司的史蒂夫·乔布斯出名更早,甚至是当年比尔·盖茨的偶像.但比尔·盖茨的作派引领着IT英雄的时尚,在他所谓“软件天才”的光环下,无数个导致其崛起的重要因素被大众忽略.
他穿着随便,头发蓬乱,具备高智商,尤善数学和计算机,显得独来独往,是个工作狂,他喜欢舒适地坐在电脑前,一边吃比萨饼,一边喝可乐,一边彻夜不眠地编写电脑程序.尤其酷的是,他从哈佛辍学,这成为站在IT英雄顶峰的“必备资历”.
累了的时候,他就躺在一张乱糟糟的床上,用毯子盖在头上,盖茨至今仍保持着这个习惯,当他坐飞机时,他常用一条毯子盖在头上,然后在整个航程中酣睡不止.
他的生活极其紧张,三天不睡觉对他来说如同家常便饭.他通常36个小时不睡觉,然后倒头便睡上十来个小时.
1974年,当盖茨认为创办公司的时机尚未成熟而继续在哈佛大学上二年级时,他开始了玩桥牌,疯狂地玩,扑克和计算机消耗了他的大部分时间.他与未来的微软CEO鲍尔默在玩一种游戏,看谁用最少的时间去上课从而获得最好的成绩,他们几乎从不上课,然而依靠考前突击,却总能得到A.
比尔·盖茨的传记作家詹姆斯·华莱斯曾采访过跟比尔约会的几个女生,她们说比尔一见到她们总是问,你的学术能力考试成绩怎样?
除了个人禀赋,盖茨如此的成功还离不开他有个好家庭和好爸爸.比尔·盖茨本名叫威廉·亨利· 盖茨三世,他们家族在美国是中上阶层,因此盖茨生活无忧,可以上最好的学校,永远不用担心房租从哪儿来.他的祖母留给他100万美元的信托基金,他的父亲早早为他买了一栋90万美元的房子.
盖茨的爸爸老盖茨是西雅图最好的律师之一,并且对盖茨的创业和微软有潜在的巨大影响.老盖茨给了比尔·盖茨经济资助,也让其能够轻松放弃哈佛学位,更重要的是帮助比尔·盖茨与其他公司对抗,搞定了BASIC授权等一个个险中取胜的法律问题,让比尔·盖茨拿到第一桶金.微软正是按照这种软件授权方式发展起来的,在微软经历的无数起法律纠纷中,几乎都有老盖茨的身影.最近一次与老盖茨有关的事件是 ——微软收购雅虎的谈判曾在其律所秘密进行.
最重要的是,盖茨与时代的撞击,他遇到了PC时代的开启阶段.1969年当比尔·盖茨上高中时,私立湖滨中学签了一个影响比尔终身命运的特别协议,一家卫星公司通过电报交换机连接,向学校提供电脑让师生用.年轻的比尔被这台原始电脑所能做的一切迷住了,从此他一有空就钻进电脑房.
事实上,哈佛大学并不缺乏天才,盖茨曾因自己的数学而自负,但却在哈佛发现了比他更为强大的一群数学天才,他因此弃数学而取新兴的计算机,应该算是个嗅觉灵敏的聪明学生.
而且,比尔还“获赠”一个创业伙伴——一样沉迷于电脑的比他高一个年级的保罗·艾伦.1974年12月,艾伦在哈佛广场买到一份杂志,封面刊登一家公司的广告,是一台Altair 8800微机电脑问世,他立即找了比尔,两人对于个人电脑时代的来临产生了感觉.
1975年夏天,19岁的比尔·盖茨和他的伙伴保罗创建了微软公司.相信自己眼光精准的比尔·盖茨就准备全身心投入这项事业中去,他在哈佛大学三年级的时候中途退学.他的梦想是让每个人桌面都有电脑——而下半句话藏在他的心中——让每个电脑里都有微软的软件.一个PC时代将由盖茨33年的工作推向造富和造梦的顶峰.
“偶然”帝国
回顾微软的历史,一些导致微软成功的事实无法回避,微软的成长,也离不开对手的帮助.微软帝国的三大基石,Windows操作系统、Office办公软件和IE网络浏览器,都是在利用对手的轻率,或是在残酷的法律和商业绞杀中取得的成功.
而且,微软的三大产品都不属于原创性创新,而都是基于现有产品的启发,继续进行开发.
比尔·盖茨最初的商业尝试是为当时的Altair 8800电脑设计出了第一个BASIC语言解译器,Altair 8800是MITS公司陷入困境之下发明的.盖茨和艾伦在哈佛阿肯计算机中心没日没夜地干了8周,此前从未有人为微机编过BASIC程序,这是一种简单易用的计算机程序设计语言.盖茨和艾伦开辟了PC软件业的新路,奠定了软件标准化生产的基础.
1975年春天,艾伦进入MITS,担任软件部经理.念完二年级课程,盖茨也飞往MITS,加入艾伦从事的工作.微软“寄生”于MITS之上.后来在盖茨父亲及其律师朋友的帮助下,盖茨侥幸在软件所有权上获胜.这就是微软颇不寻常的起步,如果输掉这场官司,盖茨不得不从头再来,今日微软的历史就得改写.
艾伦回忆道:“这场官司让人心有余悸,如果我们输了,我们就得从头再来,比尔让他老爸出点子,我们一直如坐针毡.”
凭借从BASIC项目上拿到的版权费,比尔·盖茨与保罗·艾伦 (Paul Allen)在新墨西哥州中部城市Albuquerque一同创建了微软,后来移到西雅图.
当时,他们了解到计算机巨头IBM需要为自己的个人电脑产品寻找合适的、基于英特尔 X86系列处理器的操作系统.于是微软就向Tim Patterson公司购买了他们的QDOS操作系统使用权,将其改名为Microsoft DOS (“微软磁盘操作系统”),并进行了部分的改写工作,最终通过IBM公司在1981年推向了市场,微软的BASIC便逐渐成为了公认的市场标准,而IBM 完全有能力自己开发,其对于操作系统的忽视,帮助了盖茨崛起,IBM成为微软又一块巨大的垫脚石.
当时最伟大的程序设计员之一,基尔代尔设计的CP/M系统是上世纪70年代末、80年代初最具影响的PC操作系统.但是,基尔代尔错过了与IBM合作的天赐良机.比尔·盖茨母亲良好的社会关系,在他初期事业中也起了重大的作用.比尔经她介绍,认识了IBM的总裁.
接下来,微软也没取得领先.1981年8月发行的Microsoft DOS 1.0没有图形界面,全靠命令进行输入,操作起来极其不方便,而当时苹果公司的麦金托什Macintosh操作系统具有了图形用户界面.直到1983年,微软才正式开始设计Windows,定位是一个为个人电脑用户设计的图形界面操作系统.开始的设计工作花费了55个开发人员一年的时间,并于1985年 11月20日正式发布,售价100美元,当时也不是最好的软件.
1985年6月,微软和IBM达成协议,联合开发操作系统.根据协议,IBM在自己的电脑上可随意安装,几乎分文不取,并允许微软向其他电脑厂商收取使用费.当时IBM在PC市场拥有绝对优势.兼容机份额极低,IBM的决策者几乎不假思索地同意了.而到了1989年,兼容机市场已达到80%的份额.微软在操作系统的许可费上,短短几年就赢利20亿美元——这是IBM在微软身上犯下无数个大错中的一个.
随后,在电脑销售方面IBM也很快丧失原来的优势.当其他公司纷纷推出比IBM产品更便宜的电脑时,微软能够向他们提供同样的操作系统.如微软就借康柏卖出了大量的授权,在PC市场奠定了基业.
对微软的创新进行总结的结果会颠覆很多人的固有印象:微软起家的BASIC并不是自己原创发明的,DOS也是从其他公司买来改造的,Windows用的是施乐与苹果的图形和鼠标技术,网络浏览器也是在网景的压力下开发的……
微软是个“偶然帝国”.借助强大的市场优势和金钱实力,微软屡屡将许多其他公司创造的新技术新功能纳入自己的产品,尤其是在Windows之中.这种形势下,小软件公司已经无法与微软一起竞争.10年后的1995年8月,Windows 95发布,正式把微软推向PC的巅峰.
“所有这些事情都可能使你懒惰,让你觉得无所不知,让你觉得自己比其他人聪明,而这总会导致严重的错误.”比尔·盖茨自我总结认为,当微软成长的时候有许多大公司,但它们都没有最终坚持下来,因为它们在这个产业的转型期迷失了方向.它们曾是伟大的公司,但是成功促使它们规模增大,也使它们在前进的路途中错过了转折方向.即使是最大的IBM公司,也错过了许多关键的事情.“我们必须学习新事物.”
微软成立五年了,公司里都是技术人员,没有管理人员.1980年,即比尔·盖茨创建微软的第六个年头,盖茨聘请鲍尔默担任总裁个人助理.在盖茨的游艇上以5万美元的年薪和7%股份的合同聘用了鲍尔默.
鲍尔默成为微软第一位非技术受聘者.从此,鲍尔默就开始了他在微软至今28年的职业生涯.
鲍尔默不会跟盖茨一团和气,他会针锋相对.他一上来招募新员工就会和盖茨争得面红耳赤.因为他想立即从30人规模招募到80人,盖茨则声称,公司不能负债经营,银行必须有足够维持公司一年的钱.
两人各不相让,最后还是盖茨让了步.
盖茨雇用鲍尔默之后,他们的友谊也经历了严峻的考验和磨合.传言1985年春,微软没能在最后期限前研制出Windows软件时,盖茨曾气愤地说,如果视窗软件不能在年底前上柜台销售,他就要鲍尔默走人.
鲍尔默回忆说,那时他负责研制视窗操作系统.当时Windows1.0失败了,Windows2.0也不成功,直到推出了Windows3.0,微软才大获全胜.盖茨可以指出一行代码里有什么错误,而鲍尔默可以指出某个软件是否具有市场潜力.
“我历来就是拉拉队长,管理着一群天才.”鲍尔默表示.1998年7月,鲍尔默出任微软总裁的职位,除了首席技术官继续向盖茨汇报外,包括首席运营官在内的高管都开始向他汇报.
2000年1月时年44岁的比尔·盖茨把自己担任了19年的微软CEO的职位交给同样年纪的好友史蒂夫·鲍尔默,自己仍任董事长,以及新头衔“首席软件架构设计师”.
盖茨当时本人的表示是:“现在Steve是一把手,我是二把手,我提出的建议举足轻重,但做决定的得是Steve.”
一些微软管理人士说,鲍尔默向来不太懂得下放权力.但盖茨也是一个控制狂.“他根本不可能放弃对微软的控制,那个公司是他的心肝宝贝.”盖茨的好友巴菲特说.
盖茨自己也承认,整个2000年,两人的关系一直比较紧张.这种紧张关系一直持续到2001年.
这一次,盖茨又对自己进行了反省,他知道,鲍尔默将心思都放在团队和为实现共同目标而努力上,他的结论是,自己才是最需要改变的人.
了解了这些之后,盖茨开始迅速作出改变.他在会议上保留他的不同意见,在重要决策上尊重鲍尔默的意见.这真正地帮助了“奶妈”鲍尔默在微软帝国建立自己的权威.
转自: http://www.cnbeta.com/articles/58422.htm
一个在不朽的IT事业中寻求到历史庇护的人,他就是比尔·盖茨.比尔·盖茨已经在人类商业群星闪耀的天空中留下痕迹——有学界人士认定,今后的100年里,人们定会像谈论洛克菲勒、卡耐基和福特一样谈论比尔·盖茨.盖 茨代表了PC(个人电脑)时代IT领域个人能取得的最高成就,一个垄断了“世界首富”长达13年之久的人,而他即将于今年的6月27日正式退休.毋庸置疑,他是一个天才.但天才不足以成为传奇,在一系列的必然背后,存在着大量无法复制的偶然.是必然和偶然,共同造就了比尔·盖茨.
微软传奇
尽管苹果公司的史蒂夫·乔布斯出名更早,甚至是当年比尔·盖茨的偶像.但比尔·盖茨的作派引领着IT英雄的时尚,在他所谓“软件天才”的光环下,无数个导致其崛起的重要因素被大众忽略.
他穿着随便,头发蓬乱,具备高智商,尤善数学和计算机,显得独来独往,是个工作狂,他喜欢舒适地坐在电脑前,一边吃比萨饼,一边喝可乐,一边彻夜不眠地编写电脑程序.尤其酷的是,他从哈佛辍学,这成为站在IT英雄顶峰的“必备资历”.
累了的时候,他就躺在一张乱糟糟的床上,用毯子盖在头上,盖茨至今仍保持着这个习惯,当他坐飞机时,他常用一条毯子盖在头上,然后在整个航程中酣睡不止.
他的生活极其紧张,三天不睡觉对他来说如同家常便饭.他通常36个小时不睡觉,然后倒头便睡上十来个小时.
1974年,当盖茨认为创办公司的时机尚未成熟而继续在哈佛大学上二年级时,他开始了玩桥牌,疯狂地玩,扑克和计算机消耗了他的大部分时间.他与未来的微软CEO鲍尔默在玩一种游戏,看谁用最少的时间去上课从而获得最好的成绩,他们几乎从不上课,然而依靠考前突击,却总能得到A.
比尔·盖茨的传记作家詹姆斯·华莱斯曾采访过跟比尔约会的几个女生,她们说比尔一见到她们总是问,你的学术能力考试成绩怎样?
除了个人禀赋,盖茨如此的成功还离不开他有个好家庭和好爸爸.比尔·盖茨本名叫威廉·亨利· 盖茨三世,他们家族在美国是中上阶层,因此盖茨生活无忧,可以上最好的学校,永远不用担心房租从哪儿来.他的祖母留给他100万美元的信托基金,他的父亲早早为他买了一栋90万美元的房子.
盖茨的爸爸老盖茨是西雅图最好的律师之一,并且对盖茨的创业和微软有潜在的巨大影响.老盖茨给了比尔·盖茨经济资助,也让其能够轻松放弃哈佛学位,更重要的是帮助比尔·盖茨与其他公司对抗,搞定了BASIC授权等一个个险中取胜的法律问题,让比尔·盖茨拿到第一桶金.微软正是按照这种软件授权方式发展起来的,在微软经历的无数起法律纠纷中,几乎都有老盖茨的身影.最近一次与老盖茨有关的事件是 ——微软收购雅虎的谈判曾在其律所秘密进行.
最重要的是,盖茨与时代的撞击,他遇到了PC时代的开启阶段.1969年当比尔·盖茨上高中时,私立湖滨中学签了一个影响比尔终身命运的特别协议,一家卫星公司通过电报交换机连接,向学校提供电脑让师生用.年轻的比尔被这台原始电脑所能做的一切迷住了,从此他一有空就钻进电脑房.
事实上,哈佛大学并不缺乏天才,盖茨曾因自己的数学而自负,但却在哈佛发现了比他更为强大的一群数学天才,他因此弃数学而取新兴的计算机,应该算是个嗅觉灵敏的聪明学生.
而且,比尔还“获赠”一个创业伙伴——一样沉迷于电脑的比他高一个年级的保罗·艾伦.1974年12月,艾伦在哈佛广场买到一份杂志,封面刊登一家公司的广告,是一台Altair 8800微机电脑问世,他立即找了比尔,两人对于个人电脑时代的来临产生了感觉.
1975年夏天,19岁的比尔·盖茨和他的伙伴保罗创建了微软公司.相信自己眼光精准的比尔·盖茨就准备全身心投入这项事业中去,他在哈佛大学三年级的时候中途退学.他的梦想是让每个人桌面都有电脑——而下半句话藏在他的心中——让每个电脑里都有微软的软件.一个PC时代将由盖茨33年的工作推向造富和造梦的顶峰.
“偶然”帝国
回顾微软的历史,一些导致微软成功的事实无法回避,微软的成长,也离不开对手的帮助.微软帝国的三大基石,Windows操作系统、Office办公软件和IE网络浏览器,都是在利用对手的轻率,或是在残酷的法律和商业绞杀中取得的成功.
而且,微软的三大产品都不属于原创性创新,而都是基于现有产品的启发,继续进行开发.
比尔·盖茨最初的商业尝试是为当时的Altair 8800电脑设计出了第一个BASIC语言解译器,Altair 8800是MITS公司陷入困境之下发明的.盖茨和艾伦在哈佛阿肯计算机中心没日没夜地干了8周,此前从未有人为微机编过BASIC程序,这是一种简单易用的计算机程序设计语言.盖茨和艾伦开辟了PC软件业的新路,奠定了软件标准化生产的基础.
1975年春天,艾伦进入MITS,担任软件部经理.念完二年级课程,盖茨也飞往MITS,加入艾伦从事的工作.微软“寄生”于MITS之上.后来在盖茨父亲及其律师朋友的帮助下,盖茨侥幸在软件所有权上获胜.这就是微软颇不寻常的起步,如果输掉这场官司,盖茨不得不从头再来,今日微软的历史就得改写.
艾伦回忆道:“这场官司让人心有余悸,如果我们输了,我们就得从头再来,比尔让他老爸出点子,我们一直如坐针毡.”
凭借从BASIC项目上拿到的版权费,比尔·盖茨与保罗·艾伦 (Paul Allen)在新墨西哥州中部城市Albuquerque一同创建了微软,后来移到西雅图.
当时,他们了解到计算机巨头IBM需要为自己的个人电脑产品寻找合适的、基于英特尔 X86系列处理器的操作系统.于是微软就向Tim Patterson公司购买了他们的QDOS操作系统使用权,将其改名为Microsoft DOS (“微软磁盘操作系统”),并进行了部分的改写工作,最终通过IBM公司在1981年推向了市场,微软的BASIC便逐渐成为了公认的市场标准,而IBM 完全有能力自己开发,其对于操作系统的忽视,帮助了盖茨崛起,IBM成为微软又一块巨大的垫脚石.
当时最伟大的程序设计员之一,基尔代尔设计的CP/M系统是上世纪70年代末、80年代初最具影响的PC操作系统.但是,基尔代尔错过了与IBM合作的天赐良机.比尔·盖茨母亲良好的社会关系,在他初期事业中也起了重大的作用.比尔经她介绍,认识了IBM的总裁.
接下来,微软也没取得领先.1981年8月发行的Microsoft DOS 1.0没有图形界面,全靠命令进行输入,操作起来极其不方便,而当时苹果公司的麦金托什Macintosh操作系统具有了图形用户界面.直到1983年,微软才正式开始设计Windows,定位是一个为个人电脑用户设计的图形界面操作系统.开始的设计工作花费了55个开发人员一年的时间,并于1985年 11月20日正式发布,售价100美元,当时也不是最好的软件.
1985年6月,微软和IBM达成协议,联合开发操作系统.根据协议,IBM在自己的电脑上可随意安装,几乎分文不取,并允许微软向其他电脑厂商收取使用费.当时IBM在PC市场拥有绝对优势.兼容机份额极低,IBM的决策者几乎不假思索地同意了.而到了1989年,兼容机市场已达到80%的份额.微软在操作系统的许可费上,短短几年就赢利20亿美元——这是IBM在微软身上犯下无数个大错中的一个.
随后,在电脑销售方面IBM也很快丧失原来的优势.当其他公司纷纷推出比IBM产品更便宜的电脑时,微软能够向他们提供同样的操作系统.如微软就借康柏卖出了大量的授权,在PC市场奠定了基业.
对微软的创新进行总结的结果会颠覆很多人的固有印象:微软起家的BASIC并不是自己原创发明的,DOS也是从其他公司买来改造的,Windows用的是施乐与苹果的图形和鼠标技术,网络浏览器也是在网景的压力下开发的……
微软是个“偶然帝国”.借助强大的市场优势和金钱实力,微软屡屡将许多其他公司创造的新技术新功能纳入自己的产品,尤其是在Windows之中.这种形势下,小软件公司已经无法与微软一起竞争.10年后的1995年8月,Windows 95发布,正式把微软推向PC的巅峰.
“所有这些事情都可能使你懒惰,让你觉得无所不知,让你觉得自己比其他人聪明,而这总会导致严重的错误.”比尔·盖茨自我总结认为,当微软成长的时候有许多大公司,但它们都没有最终坚持下来,因为它们在这个产业的转型期迷失了方向.它们曾是伟大的公司,但是成功促使它们规模增大,也使它们在前进的路途中错过了转折方向.即使是最大的IBM公司,也错过了许多关键的事情.“我们必须学习新事物.”
微软成立五年了,公司里都是技术人员,没有管理人员.1980年,即比尔·盖茨创建微软的第六个年头,盖茨聘请鲍尔默担任总裁个人助理.在盖茨的游艇上以5万美元的年薪和7%股份的合同聘用了鲍尔默.
鲍尔默成为微软第一位非技术受聘者.从此,鲍尔默就开始了他在微软至今28年的职业生涯.
鲍尔默不会跟盖茨一团和气,他会针锋相对.他一上来招募新员工就会和盖茨争得面红耳赤.因为他想立即从30人规模招募到80人,盖茨则声称,公司不能负债经营,银行必须有足够维持公司一年的钱.
两人各不相让,最后还是盖茨让了步.
盖茨雇用鲍尔默之后,他们的友谊也经历了严峻的考验和磨合.传言1985年春,微软没能在最后期限前研制出Windows软件时,盖茨曾气愤地说,如果视窗软件不能在年底前上柜台销售,他就要鲍尔默走人.
鲍尔默回忆说,那时他负责研制视窗操作系统.当时Windows1.0失败了,Windows2.0也不成功,直到推出了Windows3.0,微软才大获全胜.盖茨可以指出一行代码里有什么错误,而鲍尔默可以指出某个软件是否具有市场潜力.
“我历来就是拉拉队长,管理着一群天才.”鲍尔默表示.1998年7月,鲍尔默出任微软总裁的职位,除了首席技术官继续向盖茨汇报外,包括首席运营官在内的高管都开始向他汇报.
2000年1月时年44岁的比尔·盖茨把自己担任了19年的微软CEO的职位交给同样年纪的好友史蒂夫·鲍尔默,自己仍任董事长,以及新头衔“首席软件架构设计师”.
盖茨当时本人的表示是:“现在Steve是一把手,我是二把手,我提出的建议举足轻重,但做决定的得是Steve.”
一些微软管理人士说,鲍尔默向来不太懂得下放权力.但盖茨也是一个控制狂.“他根本不可能放弃对微软的控制,那个公司是他的心肝宝贝.”盖茨的好友巴菲特说.
盖茨自己也承认,整个2000年,两人的关系一直比较紧张.这种紧张关系一直持续到2001年.
这一次,盖茨又对自己进行了反省,他知道,鲍尔默将心思都放在团队和为实现共同目标而努力上,他的结论是,自己才是最需要改变的人.
了解了这些之后,盖茨开始迅速作出改变.他在会议上保留他的不同意见,在重要决策上尊重鲍尔默的意见.这真正地帮助了“奶妈”鲍尔默在微软帝国建立自己的权威.
2007年11月1日星期四
Champion of RoboCup2007@Home
Good News: Autonomous Robot Group of Shanghai Jiao Tong University, won the Champion of RoboCup2007@Home--China Open!
Equipped with many sensors, including :


Equipped with many sensors, including :
- a front usb camera
- an omni-directional camera
- a Sick laser
- odometers
- recognizing many different objects;
- tracking people according to special color patterns;
- self-positioning with vision technology;
- measuring distance and avoiding obstacles.
- object recognition
- color tracking with camshift
- 3D positioning in omnivision system


2007年10月27日星期六
Farewell to TOEFL and GRE
终于考完了~~~
算起来正好是一个月内考了两次,TOEFL & GRE,人生算是又完整了一些。想想还是有点成就感的,觉得自己还是有些毅力和耐心的,呵呵。
本无心考这些,不过当初被师姐"训"一了顿:不能平平淡淡,想做了,自然就能做到。
现在想想确实如此,有了追求,才有动力。人生不就是一场自我折腾嘛。
A little tired, however, a sense of self-satisfaction ^_^
算起来正好是一个月内考了两次,TOEFL & GRE,人生算是又完整了一些。想想还是有点成就感的,觉得自己还是有些毅力和耐心的,呵呵。
本无心考这些,不过当初被师姐"训"一了顿:不能平平淡淡,想做了,自然就能做到。
现在想想确实如此,有了追求,才有动力。人生不就是一场自我折腾嘛。
A little tired, however, a sense of self-satisfaction ^_^
2007年9月3日星期一
SIFT Implementation
SIFT is perhaps the most popular invariant local feature detector at present, and has been applied succefully in many occasions, such as object recognition, image match and registration, SFM & 3D reconstruction, vSLAM, image panorama, etc.
Previously, I've developped some versions of SIFT algorithm, as well as Lowe's object recognition system mentioned in the paper(IJCV04). One of the version, named Harris-SIFT, works quite well and fast in my previous vision system--RTL(Real-time Tracking and Localization). In fact, it's a simplified SIFT and retains virtues of the original algorithm.
Recently, I've foud someone mentioned that Andrea Vedaldi(UCLA) had developped a good version of SIFT, named siftpp. I looked deep into it and found its performance quite like that of Lowe's demo. More important, that code strictly follows steps in Lowe's paper, thus is easy to read or study Lowe's algorithm. However, it runs slow and has some bugs. I'd like to opimize the code so that it can be applied in other occasions.
Other codes I refered, including Rob Hess's sift and iLab Neuromorphic Vision C++ Toolkit. The former is implemented in c and uses OpenCV. In fact, his implementation, in some sense, is more correct than siftpp. However, the code is not very efficient due to some redundant processes, and the not-well-organized feature structure. Further more, personally I favor C++ than C, for the reason that C++ provides many advanced features, powerful, useful and convenient for us to write robust codes, esepcially true for algorithm or libraries. The later is an excellent vision library designed for modeling human's neuron vision model. It's still under developping and CVS verion is available. I prefer the structure of this library and it is implemented with moden C++ language, such as meta-template, and some kind of design pattens. A SIFT-based object recognition framework is nested in the library, which can be a good reference.
So now, above are the main sources of my references. That's quite enough. Recently, I spent 3 days to rewrite the SIFT algorithm, and it is finished now. Main properties as follows :
1. Correct and Accurate
Algorithm routines of the code strictly conforms to Lowe's paper, and the result is quite similar to Lowe's demo.
In fact, both the feature location, scale, orientation, and the descritptor, are approximately same as that from Lowe's demo. For example, below are two sets of sample features extracted with my code and Lowe's demo respectively. There are only small differences between them :
##### my code : (x and y's position are different as that of Lowe's)
183.749 279.852 16.3574 4.86277
0 27 53 26 39 37 5 0 16 19 19 18 44 32 23 35 115 72 8 1
2 3 14 52 30 13 3 22 26 17 7 2 27 112 115 14 4 1 1 1
115 47 22 12 6 2 27 99 70 28 37 7 1 2 53 102 24 20 22 44
92 26 3 20 57 30 7 1 2 18 102 29 115 79 47 28 1 3 12 33
15 81 115 78 4 5 10 9 7 101 115 39 36 11 1 2 8 0 1 3
4 86 115 18 14 10 9 10 7 43 86 37 3 13 15 36 56 37 42 3
14 50 55 31 12 2 2 10
##### Lowe's demo :
279.57 183.61 16.34 -1.453
0 20 44 24 43 43 6 0 20 23 20 16 40 32 22 36 116 77 8 1
1 2 11 46 23 12 3 25 29 16 7 1 22 105 116 16 5 0 0 1
116 45 21 11 7 2 27 100 73 28 38 8 0 1 49 100 22 19 24 42
96 31 3 18 56 36 10 1 1 12 91 27 116 88 45 28 0 1 11 30
15 75 116 86 4 4 10 8 6 99 116 40 31 11 0 1 9 0 0 1
2 74 116 20 17 11 9 9 5 41 85 40 2 11 13 33 55 36 47 4
14 46 55 30 15 2 1 10
sample feature images : (left- my imp. right - Lowe's demo)




2. Fast
I've done a lot efforts to optimize the code. Needless to say, SIFT is very time-consuming, due to a serial times of Gauss blur when constructing scale space, and multiple times of loops when genrating descriptors. Convolution and complex arithmatic operations dealing with float-point datas, such as exp, floor, sin, cos, are known to be time-consuming. Thus it is surely impossible for SIFT to attain real-time performance on current CPU(The fast implementation I know--a comerical produce--can run 10fps for 320x240 video stream, qute marvelous!). Someone tries to quicken SIFT with the help of GPU and has achieved good results. I think this is a good idea. However, first I'd like to implement a correct, good, as well as fast version by myself. In my opinion, two ways are possible for speed--simplification and code optimization, which I have all tried and obtained moderate satisfying results.
First I'd like to mention Harris-SIFT, a modification by me. It reduces the complexity of SIFT a lot while maintaining its good quality. Now it can run 4~5fps with 320x240 video stream and offers good performance on object recognition. Demos can be seen in my previous blogs.
Second, the new implementation, speed up mainly though code optimization. A lot of methods are introduced, such as fast algorithm for exp, floor; loop vectorization; parallel computing; OpenMP, SIMD ... Besides, I also used some excellent tools, such as Intel's C++ Compiler, IPP, Vtune. For the optimization skills and tricks, I recommend the excellent book--The Software Optimization Cookbook, Intel Press.
Below are some of the results : (HT P4 2.8G, 1G Mem, Winxp, sp2)
(Harris-SIFT and My IMP are two of my implementations)
Previously, I've developped some versions of SIFT algorithm, as well as Lowe's object recognition system mentioned in the paper(IJCV04). One of the version, named Harris-SIFT, works quite well and fast in my previous vision system--RTL(Real-time Tracking and Localization). In fact, it's a simplified SIFT and retains virtues of the original algorithm.
Recently, I've foud someone mentioned that Andrea Vedaldi(UCLA) had developped a good version of SIFT, named siftpp. I looked deep into it and found its performance quite like that of Lowe's demo. More important, that code strictly follows steps in Lowe's paper, thus is easy to read or study Lowe's algorithm. However, it runs slow and has some bugs. I'd like to opimize the code so that it can be applied in other occasions.
Other codes I refered, including Rob Hess's sift and iLab Neuromorphic Vision C++ Toolkit. The former is implemented in c and uses OpenCV. In fact, his implementation, in some sense, is more correct than siftpp. However, the code is not very efficient due to some redundant processes, and the not-well-organized feature structure. Further more, personally I favor C++ than C, for the reason that C++ provides many advanced features, powerful, useful and convenient for us to write robust codes, esepcially true for algorithm or libraries. The later is an excellent vision library designed for modeling human's neuron vision model. It's still under developping and CVS verion is available. I prefer the structure of this library and it is implemented with moden C++ language, such as meta-template, and some kind of design pattens. A SIFT-based object recognition framework is nested in the library, which can be a good reference.
So now, above are the main sources of my references. That's quite enough. Recently, I spent 3 days to rewrite the SIFT algorithm, and it is finished now. Main properties as follows :
1. Correct and Accurate
Algorithm routines of the code strictly conforms to Lowe's paper, and the result is quite similar to Lowe's demo.
In fact, both the feature location, scale, orientation, and the descritptor, are approximately same as that from Lowe's demo. For example, below are two sets of sample features extracted with my code and Lowe's demo respectively. There are only small differences between them :
##### my code : (x and y's position are different as that of Lowe's)
183.749 279.852 16.3574 4.86277
0 27 53 26 39 37 5 0 16 19 19 18 44 32 23 35 115 72 8 1
2 3 14 52 30 13 3 22 26 17 7 2 27 112 115 14 4 1 1 1
115 47 22 12 6 2 27 99 70 28 37 7 1 2 53 102 24 20 22 44
92 26 3 20 57 30 7 1 2 18 102 29 115 79 47 28 1 3 12 33
15 81 115 78 4 5 10 9 7 101 115 39 36 11 1 2 8 0 1 3
4 86 115 18 14 10 9 10 7 43 86 37 3 13 15 36 56 37 42 3
14 50 55 31 12 2 2 10
##### Lowe's demo :
279.57 183.61 16.34 -1.453
0 20 44 24 43 43 6 0 20 23 20 16 40 32 22 36 116 77 8 1
1 2 11 46 23 12 3 25 29 16 7 1 22 105 116 16 5 0 0 1
116 45 21 11 7 2 27 100 73 28 38 8 0 1 49 100 22 19 24 42
96 31 3 18 56 36 10 1 1 12 91 27 116 88 45 28 0 1 11 30
15 75 116 86 4 4 10 8 6 99 116 40 31 11 0 1 9 0 0 1
2 74 116 20 17 11 9 9 5 41 85 40 2 11 13 33 55 36 47 4
14 46 55 30 15 2 1 10
sample feature images : (left- my imp. right - Lowe's demo)




2. Fast
I've done a lot efforts to optimize the code. Needless to say, SIFT is very time-consuming, due to a serial times of Gauss blur when constructing scale space, and multiple times of loops when genrating descriptors. Convolution and complex arithmatic operations dealing with float-point datas, such as exp, floor, sin, cos, are known to be time-consuming. Thus it is surely impossible for SIFT to attain real-time performance on current CPU(The fast implementation I know--a comerical produce--can run 10fps for 320x240 video stream, qute marvelous!). Someone tries to quicken SIFT with the help of GPU and has achieved good results. I think this is a good idea. However, first I'd like to implement a correct, good, as well as fast version by myself. In my opinion, two ways are possible for speed--simplification and code optimization, which I have all tried and obtained moderate satisfying results.
First I'd like to mention Harris-SIFT, a modification by me. It reduces the complexity of SIFT a lot while maintaining its good quality. Now it can run 4~5fps with 320x240 video stream and offers good performance on object recognition. Demos can be seen in my previous blogs.
Second, the new implementation, speed up mainly though code optimization. A lot of methods are introduced, such as fast algorithm for exp, floor; loop vectorization; parallel computing; OpenMP, SIMD ... Besides, I also used some excellent tools, such as Intel's C++ Compiler, IPP, Vtune. For the optimization skills and tricks, I recommend the excellent book--The Software Optimization Cookbook, Intel Press.
Below are some of the results : (HT P4 2.8G, 1G Mem, Winxp, sp2)
(Harris-SIFT and My IMP are two of my implementations)
Algorithm | Image Size | Feat. num | Time(s) |
Lowe’s Demo | 640x480 | 4160 | ~4 |
Harris-SIFT | 640x480 | 2647 | 1.124 |
My IMP | 640x480 | 3041 | 1.4 |
Siftpp | 640x480 | 3667 | 5.25 |
siftFeat | 640x480 | 3604 | 3.793 |
Algorithm | Image Size | Feat. num | Time(s) |
Lowe’s Demo | 320x240 | 1126 | ~1 |
Harris-SIFT | 320x240 | 838 | 0.323 |
My IMP | 320x240 | 809 | 0.366 |
Siftpp | 320x240 | 977 | 1.21 |
siftFeat | 320x240 | 987 | 1.032 |
2007年8月16日星期四
RTL--Real Time Tracking and Localization Based on Object Recognition
In previous article, I mentioned that I had developed a real-time localization system with a single USB camera, which is featured as real-time tracking and localization, robust object recognition. Video demos can be found here.
Recently, I've advanced the previous work and developed the RTL system(Real-time Tracking and Localization based on Object Recognition, or Recognition-Tracking-Localization), which incorporates recognition, real-time tracking and localization. Features of the system are as following :
At present, visual localization and mapping is a very active research topic. Davison's MonoSLAM, in some sense, provides a new approach to vSLAM by combining tracking , EKF, sparse map and active vision to achieve real-time performance and localization accuracy. R O Castle,etc, promoted MonoSLAM by incorporating object recognition, enabling MonoSLAM to re-localize itself and to eliminate accumulating errors of the tracking system. My RTL, inspired by their work, on the other hand, focuses on the real-time active tracking and localization, but not SLAM. So I choose KLT and SIFT-based recognition system, instead of EKF, sparse map and active vision, for fast tracking and robust object recognition. Below is the comparison between RTL and Castle's recent result(BMVC 2007) :
RTL demo running on P4 2.8G, dual core CPU, 1G memory, Winxp
Image Size: 640x480, video frame rate: 20fps
Note: location information is not revealed in the video demo as that of MonoSLAM, since it may take me some time and efforts to develop such a GUI with opengl. Maybe I'll do it later.
1
4
visual landmarks used
in the video demo :










Recently, I've advanced the previous work and developed the RTL system(Real-time Tracking and Localization based on Object Recognition, or Recognition-Tracking-Localization), which incorporates recognition, real-time tracking and localization. Features of the system are as following :
- Accurate and fast recognition
- Active tracking
- 3D pose estimation for coplanar objects
- Real-time performance
- Re-localization and no accumulating error
- Multi-object RTL
- Purely based on visual landmarks
- Only for coplanar visual landmarks
- Distance should be measured when taking landmarks
- Occasional mis-tracking, thus false localization
- Improve localization algorithm, considering SFM, invert depth, etc
- GUI based on OpenGL as that of MonoSLAM
At present, visual localization and mapping is a very active research topic. Davison's MonoSLAM, in some sense, provides a new approach to vSLAM by combining tracking , EKF, sparse map and active vision to achieve real-time performance and localization accuracy. R O Castle,etc, promoted MonoSLAM by incorporating object recognition, enabling MonoSLAM to re-localize itself and to eliminate accumulating errors of the tracking system. My RTL, inspired by their work, on the other hand, focuses on the real-time active tracking and localization, but not SLAM. So I choose KLT and SIFT-based recognition system, instead of EKF, sparse map and active vision, for fast tracking and robust object recognition. Below is the comparison between RTL and Castle's recent result(BMVC 2007) :
| RTL | MonoSLAM |
Image Size | 640x480 | 640x480 |
SIFT Features | 500 | 500 |
Extracting Time | 250ms | 700ms |
Matching Time | 30ms | 100ms |
Tracking Points | 50(average) | 20 |
Tracking Time | 12.5ms | 10ms |
Object Models | 14 | 16 |
Database Capacity | 33,010 | 32,000 |
RTL demo running on P4 2.8G, dual core CPU, 1G memory, Winxp
Image Size: 640x480, video frame rate: 20fps
Note: location information is not revealed in the video demo as that of MonoSLAM, since it may take me some time and efforts to develop such a GUI with opengl. Maybe I'll do it later.
1














2007年7月16日星期一
proxy for GPGPU
find a http proxy for www.gpgpu.org, follow instructions below :
create a profile, such as proxy.inf, fill following lines :
function FindProxyForURL(url,host){
if(dnsDomainIs(host, ".blogspot.com")){
return "PROXY 72.14.219.190:80";
}
if(dnsDomainIs(host, "www.gpgpu.org")){
return "PROXY 66.98.238.8:3128";
}
}
for firefox, open tool->option->advanced->network->setting->automatic proxy url, input
file:///path:/proxy.inf
that's all, enjoy it !
create a profile, such as proxy.inf, fill following lines :
function FindProxyForURL(url,host){
if(dnsDomainIs(host, ".blogspot.com")){
return "PROXY 72.14.219.190:80";
}
if(dnsDomainIs(host, "www.gpgpu.org")){
return "PROXY 66.98.238.8:3128";
}
}
for firefox, open tool->option->advanced->network->setting->automatic proxy url, input
file:///path:/proxy.inf
that's all, enjoy it !
订阅:
博文 (Atom)