Category: Computer Vision (机器视觉)

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少,而且没有自动驾驶的小车也没有大卡车。

MXNet C++ Deployment

iOS上的Deployment的sample code, https://github.com/pppoe/WhatsThis-iOS, 介绍: http://haoxiang.org/2016/01/ios-mxnet-demo/

MXNet训练得到的模型有两个文件,XX.json描述网络,XX.params存网络参数。部署的时候最方便的方式是用Amalgamation: https://github.com/apache/incubator-mxnet/tree/master/amalgamation
Amalgamation可以把整个MXNet里Prediction相关的代码写到一个很大的C源文件,部署的时候只需要这个C源文件和对应的一个头文件就可以了。

Sample code 在这里 https://github.com/pppoe/mxnet-Cpp-Deployment-Wrapper-Demo