Factfulness

最近读了这本 Factfulness (事实),感觉挺有趣的。作者介绍了十个思考工具以应对我们常见的思维误区。也是因为作者经历丰富,无论是正面还是反面都以自己的生动的经历为例,读起来完全不觉得枯燥,时常感觉有所启发。

一分为二就是一个常见的误区,非黑即白通常是片面的论断、事物处在的阶段不会是只有低和高,一定有中间的过渡状态。而事实上处于中间状态的可能是大多数。这里作者以发展中国家和发达国家举例,虽然这个概念大家经常提,但是从各个维度看各个国家的指标,其实大多数国家是处于两者之间的。作者提到可以尝试把两段改成四段,不仅限于这个概念,常常会让我们注意到大多数所处的位置。

书里面强调的比较多的一个思维误区是负面思维。按照作者观点,其实大多数人对世界所处的状态的估计是比实际情况更加负面的。其中一个重要的成因是媒体的选择性宣传,或者说媒体本质上就是倾向于报道事故、悲剧、矛盾等等有话题性的事件。打破既有印象的方式,可以是通过数据客观的看到事情的变化方向。同时承认事情可以处于目前依然很坏,但已经一直在变好的状态。书里面有很多例子,数据来支撑“世界正在变好”这个论点,有好些数字确实和我自己认为的大相径庭。有一个用来表明大家生活普遍在变好的指标比较有趣。作者用人均拥有吉他数随着这些年的一个上升趋势来说明世界正在变好。2014年差不多每100个人里面就有1个人有吉他。这个比例还真是挺高的,差不多是现在美国新冠的阳性率了 XD

另外映象比较深的是作者讲的自己的故事,都是作为反面例子说明思维误区的负面影响。一个是埃博拉在非洲爆发期间,作者在情急之下没有考虑全面提出的封城决定,间接导致几个人的死亡。另一个是过去作者曾经按照当时的正确做法让仰卧的婴儿俯卧,增大了婴儿可能窒息的概率。

读到这两个故事的时候我很惊讶于作者的坦诚,也很敬佩他能够把这些作为实例分享出来的勇气。其实严格说,作者并没有做错什么,但是放在这里作为例子确直接把作者的决定和事情的结果联系起来,想来他自己应该也曾经为此颇有内疚吧。

总的来说,很有趣很好读的一本书。

Header-only JPEG Save/Load

部署项目的时候偶尔会遇到这类需求,不能使用OpenCV之类的库来读写图片,比如需要部署到嵌入式环境之类的。网上找了一阵,发现对于jpeg的读写,这两个库很方便。

一个是NanoJPEG,有人做了一个C++版本。用来读jpeg文件。另一个是TinyJPEG,用来输出到文件。

都是header-only,只需要include头文件就可以用了。也没有标准库以外的依赖。

写了一个例子放在这里: Example-HeaderOnly-JPEG

  vector<uint8_t> image;
  int width, height;
  if (load_jpg_data(argv[1], image, width, height)) {
    cout << "size " << width << " x " << height << endl;

    vector<uint8_t> rotated_image(height*width*3);
    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++) {
        rotated_image[x*height*3+y*3+0] = image[y*width*3+x*3+0];
        rotated_image[x*height*3+y*3+1] = image[y*width*3+x*3+1];
        rotated_image[x*height*3+y*3+2] = image[y*width*3+x*3+2];
      }
    }
    tje_encode_to_file(argv[2], height, width, 3, rotated_image.data());
  } else {
    cout << "Failed to open file " << argv[1] << endl;
  }

ICCV 2019 Notes

去年10月份参加的ICCV,这次主要关注的几个方向:

– Efficient DNN Inference
– 3D Vision, especially 6DOF pose estimation
– Fundamental improvements in DNN representation learning
– Applications on Human/Face

Efficient DNN Inference 

Low-Power Computer Vision Workshop: 这个Workshop组织了一个竞赛叫Low-Power Image Recognition Challenge (LPIRC)。定义指标里不仅仅考量模型的精度,也同时考量模型运行时的能耗。这个Workshop里有部分报告来自竞赛的优胜队伍,分享一些技术上的技巧,也有一些来自业界和学界的报告。

Prof. Soonhoi Ha  讲了 Software-Hardware Co-Design,期间也分享了一些提高比赛分数的技巧。

Image

Image

另一个印象比较有印象的 来自 Qualcomm 的 Edwin Park 的报告。他们做在芯片中的Vision算法对能耗特别敏感,而且是一个always-on的应用场景。

Image

我感觉考虑能耗还是需要和硬件结合起来做,软件层面有些改进是直接提高分数的,比如更好的loss。但是涉及到网络结构和inference方式的改进基本上都需要权衡速度和精度。虽然目前这个Workshop中最好的方法从数值上看结果还不够好,但这个方向还是很有意义的。只是考虑到目前硬件以及深度学习编译器的发展,可能评测的方式得有所改进。

主会逛poster也看到了一些相关的文章:

3D Vision, especially 6DOF pose estimation

这个方向上主要是听了一个Workshop on Recovering 6D Object Pose。比较完整的听完了Eric Brachmann的Talk。他的思路是大体按照传统方法分步做物体的姿态估计,但是利用deep learning把中间的一些部分弄成可微的,然后用训练得到的组件替换之前的传统方法。很合理的思路,看起来效果也不错。他的slides也是公开的

Image

后来 Matthias Nießner 也讲了他最近的SCAN2CAD,其实是他们CVPR 2019的工作。这个方向我觉得很好,不是单纯的分割。分割出来其实还是要做语义上的分析,而且实际应用中有CAD模型的场景并不少见,是个很好方向。

 

主会逛poster看到的一些相关的文章:

Xu Chen, Jie Song, Otmar Hilliges, Monocular Neural Image Based Rendering With Continuous View Control  这篇的生成新视角的效果很好,现场看到的图分辨率很高也很真实)

Fundamental improvements in DNN representation learning 相关的一些文章:

Applications on Human/Face 相关的一些文章:

第一次参加ICCV。和CVPR相比,会议安排日程相对宽松,还预留了半天休息的时间。Poster区域被围绕在参展的厂商的展台中间。可能是参会的人比较多,感觉Poster区域还是太小了,通道里人挤人。在ICCV参展的厂商明显比CVPR少,而且没有自动驾驶的小车也没有大卡车。