Where Are Pixels? -- a Deep Learning Perspective

Technically, an image is a function that maps a continuous domain, e.g. a box $[0, X] \times [0, Y]$, to intensities such as (R, G, B). To store it on computer memory, an image is discretized to an array array[H][W], where each element array[i][j] is a pixel.

How does discretization work? How does a discrete pixel relate to the abstract notion of the underlying continuous image? These basic questions play an important role in computer graphics & computer vision algorithms.

This article discusses these low level details, and how they affect our CNN models and deep learning libraries. If you ever wonder which resize function to use or whether you should add/subtract 0.5 or 1 to some pixel coordinates, you may find answers here. Interestingly, these details have contributed to many accuracy improvements in Detectron and Detectron2.

Deep Learning Experiments and Claims

这几年来, 学习到的最多的是对待 research 的态度. 因此说说写 paper 和做实验的体会.

实验与 claims

实验是为了证明或强化文章里给出的 claim / hypothesis 的.

Ross ICCV 2019 tutorial 最后谈了谈怎么写 paper. 第126页说, 文章中所有的 claim, 理想情况下都应该要么是文献中已有的 claim, 要么是有实验能够证明的 claim.

写House3D渲染的时候踩过的坑

House3D 是一个用于research的交互式3D环境. 用户可以载入一个来自SUNCG数据集的房子的模型,然后在里面走来走去,并获得first-person view的图片输入.

我写了House3D的渲染代码,过程中踩到了不少神奇的坑,坑踩的多了就觉得干脆记下来吧.

Unawareness of Deep Learning Mistakes

TL;DR: People are hardly aware of any deep learning mistakes they made, because things always appear to work, and there are no expectations on how well they should work. The solution is to try to accurately reproduce settings & performance of high-quality papers & code.

Exploration & Exploitation

1

一眨眼就已经毕业了, 在CMU呆了一年半, 大概只做了三件事情.

  • 第一个学期又看了一点geometry, 然后趁机把全景拼接 整体上做的科学了. 尤其是写了BA之后, 能把理论上该拼好的图都拼好了.

  • 写了一个tensorpack. 主要是离开了贵司之后发现基本找不到可用的炼丹炉前端, 就在TensorFlow发布之后开始造了一个. 当然现在还是缺很多feature(以及背后的system), 不能满意的scale起来, 最多只能跑跑ImageNet.

  • 赢了ViZDoom的比赛并且发了篇paper, 搞了个小新闻.

如果说还有一点什么成绩, 那就是做了一些低精度网络的东西.但这些都是次要的, 很惭愧, 就做了一点微小的工作.

About Research

这个领域里,什么都特别快.

三个月前看到Bengio组的BinaryConnect. 脸草的同事都很喜欢模型加速/压缩的主题,因此立刻就重现了结果开始改进. 当时就说要做成Binary Activation,并且搞一个GPU runtime. 正当同事们回家过年,我在yy这学期parallel大作业要不就写这个runtime的时候,昨天看到Bengio新的paper挂出来,已经都做完了. 更夸张的是,在前天arxiv挂了另一篇文章,方法基本一样.

三个月,能专心做的话并不难,然而我要应付作业,要去oculus写代码,还有其他好玩的东西在分心. 想着有空慢慢做的时候,别人已经不等你了.

Program Efficiency: Algorithm Doesn't Matter So Much - SIGMOD 2014

上学期组团参加了SIGMOD Programming Contest 2014, 进入了Finalist. 因此6月23日至26日, 我在Utah州Snowbird度假村参加ACM SIGMOD/PODS 2014会议.

每年的比赛题目跟ACM-ICPC比较像, 就是给输入, 产生确定的输出. 比赛形式的不同在于, ICPC中选手要尽量快的写出一个运行速度可以接受的程序, 而在SIGMOD比赛里, 我们需要在一个 多月时间里写出一个在给定机器上运行速度尽量快的程序, 而且可以用任何手段(并行, 汇编, SIMD, 文件读写).

最终结果与之前的online测试结果基本一致, 获得了第四名. 听了其他选手的报告, 深深的感觉到, 压榨程序效率时, 算法并不怎么重要.