mxnet里im2rec的坑

用了一下mxnet,感觉速度上确实比Tensorflow快不少。之前试过部署到Moible端[LINK],也挺方便的。
mxnet训练的时候可以通过ImageDataIter从预处理过的rec文件里读图。rec基本上就是一个打包了label和image的大文件。用rec文件配合DataIter做训练,GPU利用率很高。

遇到两个问题,废了些时间。

1.用im2rec.py生成rec的时候,输入文件格式是,图片序号+Label+图片路径。之间必须用\t分隔,不然会有奇怪的报错。
2.im2rec.py生成图片的时候是用OpenCV读的图,然后从BGR转RGB。图读出来是HxWxC,需要转成CxHxW。不然结果自然会差很多。

送几本书

第一次来美国的时候带过来了几本书,都是当年本科在读的时候奉为经典的大部头。这些年,搬家毕业带来带去,敝帚自珍,却也没有真的好好读过。

如果你在湾区,请联系我,找个方法我把书给你。


Code Complete: 豆瓣介绍


算法导论: 豆瓣介绍


深入理解计算机系统: 豆瓣介绍


深入理解LINUX内核(第三版): 豆瓣介绍


UNIX编程艺术: 豆瓣介绍

Cardboard VR

上次开会的时候排队尝试了Google的Cardboard和Oculus,虚拟现实(VR)的体验很真实。于是也不难理解现在VR/AR的火热程度了。Facebook有Oculus,Google有Cardboard,微软有HoloLens,还有Magic Leap的神秘兮兮又牛叉哄哄的演示,也是醉了。大家都看好这个市场,虚拟现实(VR)和增强现实(AR)的市场规模可能会达到1,500亿美元…

为了紧跟社会潮流,果断去大Amazon淘了一个Cardboard来玩,就长这样。
http://www.amazon.com/Pro-Compatible-Instructions-Construction-Experience/dp/B00Q1FITMO

Amazon上有各种Cardboard,大都支持Google Cardboard的Apps。Cardboard主体就一张纸板,还有两个镜片,折了几折就成了前面图上的样子。把你的手机放上去做屏幕就可以体验VR了!

这基本上应该是最经济方便的体验VR的方式了。Cardboard支持很多大屏幕手机,我用的iPhone 6没有问题。用的时候需要凑近镜片去看屏幕。因为近视的关系,我起初比较担心戴着眼镜看不是很方便,实际上把眼镜摘了也看得很清楚。因为其实看到的不是真的3D…屏幕就在眼前不远,不是上千度的近视的话,当然应该看得清楚。

目前各种VR设备面临的一个重要问题是晕动病 (VR motion sickness)。wiki上的对晕动病的解释是:

晕动病或运动病,生活中通常被称为晕车、暈機和晕船,是一种平衡失调的疾病。当人眼所见到的运动与前庭系統感觉到的运动不相符时,就会有昏厥、恶心、食欲减退等症状出现。严重者会呕吐。

这个和有些同学打CS会头晕或者开极品飞车就也能开吐了是相同的原理。可能的一个原因是显示屏的刷新率不够高,我自己用的时候也能不时地感觉到屏幕的刷新率跟不上头的移动。这个时候就会有点“跳戏”的感觉 🙂 据说只有一小部分人是很幸运的天生没有晕动症这个问题的。所以,如何解决这个问题也是VR厂商们面前的一个难题。当然大家也在积极的寻找对策。简单的解决方法据说是喝点酒… 也有研究科学家表示,在画面中增加一个虚拟的鼻子也可以缓解晕动症 ._.

我自己用Cardboard的时候也没有感觉到这个问题,可能是因为看的时间不是很久。毕竟Cardboard只是用来体验VR的,需要用手托住Cardboard来看,不适合长时间的看。不知道是不是iPhone 6屏幕的问题,看的时候感觉画面不是特别的锐利,有一种显示的分辨率不够高的感觉。但是整体的体验还是很赞的。iOS上的VR Apps不如Andriod上的多。在这里推荐几个值得试试的应用。

Google Carboard
这个是Google官方的应用,可以先通过这个应用体验一下基本的功能。其中有一个街景的功能,可以体验站在各个著名景点现场环视四周的感觉。

InMind VR
这是一个VR的游戏,画面不错,挺有代入感。用头部的动作来完成射击任务,时间不长,值得一试。

VRSE
这个App里提供了不少很有意思的VR电影,影片时间长短合适,非常推荐。有些是记录片,有些是软广,但是通过VR来看,都挺有代入感。
类似的App还有:RYOT

暂时就发现这么几个,试试看吧 🙂

补充:

GermBuster
一个非常有趣的游戏,用泡泡攻击细菌。最有趣的是细菌也会吐泡泡攻击你,快被打到的时候3D感特别明显,有种被直接打到脸上的感觉…

PhD们的总结

感叹一下,牛人们不但paper写得好,也很善于总结经验。
一早(好像也不早了…)在Facebook上看到行内CMU牛人田渊栋的PhD生涯总结,行文流畅,条理清晰。不在这里贴全文了,可以在这里看到:

[1] 博士五年总结 (一) – 田渊栋
[2] 博士五年总结 (二) – 田渊栋
[3] 博士五年总结 (三) – 田渊栋 

写得太好了,值得花时间好好读一读。

也可以对比之前比较火的MIT的Philip Guo的Ph.D Grind看看:
Ph.D Grind – Philip Guo 

rlwrap – 命令行下readline的封装

发现了rlwrap这个好东西。

在Mac OS和Linux下一直都用bash,bash下命令的输入都是通过readline这个库来处理的。也就是说,上下箭头查看历史命令,Ctrl+r反向查找匹配历史输入,以及Ctrl+w, Ctrl+a等等操作都是由readline提供的。rlwrap提供了readline的封装!

rlwrap runs the specified command, 
intercepting user input in order to provide readline's line editing, 
persistent history and completion.

也就是说rlwrap提供一个输入环境,在这个输入环境下可以使用readline的各种功能。如果一个程序在命令行下接受输入,那么用rlwrap直接就可以得到像在bash下输入那样的效果。

比如一个简单的反转输入行的程序

#include 
#include 
#include 

int main(int argc, char **argv)
{
    using namespace std;
    string str;
    cout << "[I] ";
    while (getline(cin,str))
    {   
        reverse(str.begin(), str.end());
        cout << "[O] " << str << endl;
        cout << "[I] ";
    }   
    return 1;
}

编译之后执行

$./a.out 
[I] a + b + c + d
[O] d + c + b + a
[I]

输入完一行,按上箭头是没有回滚到上一条命令这种效果的,更不用说行头行尾跳转了。

如果通过rlwrap输入

$rlwrap ./a.out 
[I] a + b + c + d
[O] d + c + b + a

再试试上下箭头,就和其他使用了readline的程序一致了!

对于一些没有提供readline操作的程序,rlwrap就是必备工具!
以后再写需要交互的bash脚本或者命令行程序就会非常轻松了 :]

橡皮鸭调试法

偶然在StackOverflow上看到Rubber duck debugging (wiki) 这个概念,有点儿意思,不过直译成橡皮鸭调试法好像比较弱啊。

按照wiki上的说法

传说中程序大师调试代码的时候会在桌上放上一只玩具橡皮鸭,调试的时候他会不断地,详细地,向鸭子解释自己的代码…

如果没有玩具小鸭子也可以考虑向其它东西倾诉..比如桌上的花花草草,键盘鼠标 (汗)。

好吧,正经地说这也是软件工程里的一个概念,一边阐述修改代码的意图一边做调试,就会更容易发现自己的错误。

类似的,有一种现象叫做Cone of Answers,不知道如何翻译这个词。这是一个常见的现象。你的朋友跑来问你一个问题,但是当他自己把问题说完,或者说到一半的时候就想出了答案走了,留下一脸茫然的你。是的,这个时候你就起到了那只橡皮鸭子的作用…

相似的概念还有不少,前面的wiki页面底部列出了好几个。总的来说,在你试图表述自己的想法的过程中,自然地在促使自己去整理思路,重新考虑问题。Thinking out loud 可能是一种不错的做法。

TEDxUW Why you will fail to have a great career

还是应该时不时地看看TED的演讲,总能接触到一些有意思的想法和观点。
TEDxUW是本地的TED类似的组织,Larry Smith是UW的老师。
虽然不认同他所有的观点,但还是有些感触,就是这个: 热情(Passion)和兴趣(Interest)是不同的。

Why you will fail to have a great career

I asked, do you have passion? You say, I have interest. … Passion, Interest is not the same thing, are you really gonna go to your sweetie to say, Marry me! You are interesting 囧…