Papers/Graph-Based Object Classification for Neuromorphic Vision Sensing 论文解读

Papers/Graph-Based Object Classification for Neuromorphic Vision Sensing 论文解读

Title

Graph-Based Object Classification for Neuromorphic Vision Sensing

Summary

NVS 可以显著提高采样率,同时显著提高能量效率和对光照变化的鲁棒性。然而 NVS 不使用帧表示图像,所以不能利用最先进的循环神经网络(CNNs)。我们提出了一个基于 NVS 的紧凑的图表示,并使用结合残差网络来做分类,这种残差 Graph CNN 保持了尖峰事件的时空一致性,同时需要较少的计算和存储。 现在所有的图像识别的数据都是来源于 CMOS APS。然而 APS 的传感对于机器学习系统来说是很麻烦的,因为它的帧速率有限,帧间冗余度高,在变化的光照下快门调整缓慢而模糊,并且需要高功率。

阅读更多
Papers/2019 ICCV 最佳论文 -- SINGAN
PyTorch/张量操作与线性回归
计算机网络

计算机网络

OSI 七层协议

  • 应用层 主要是 HTTP 协议

  • 表示层 信息的语法语义表示以及它们之间的关联,如加密解密、转换翻译、压缩解压缩等

  • 会话层 不同机器上的用户之间建立以及管理会话

  • 传输层 接收上一层数据,在必要时把数据进行分割,并把这些数据交给网络层,且保证这些数据段能够有效到达接收端。解决了传输质量的问题。

阅读更多
Java/J.U.C(java.util.concurrent)包的梳理

Java/J.U.C(java.util.concurrent)包的梳理

java.util.concurrent提供了并发编程的解决方案,主要包括两大块: - CAS:是java.util.concurrent.atomic包的基础 - AQS:是java.util.concurrent.locks包以及一些常用类(比如 Semophore、ReentrantLock)的基础

J.U.C 包的分类: - 线程执行器:executor - 锁:locks

阅读更多
Java/Java 集合框架

Java/Java 集合框架

数据结构常见考点

  • 数组和链表的区别
  • 链表的操作:如反转、链表环路检测、双向链表、循环链表以及相关操作
  • 队列、栈的应用
  • 二叉树的遍历以及其递归和非递归的实现
  • 红黑树的旋转
阅读更多
Java/Java异常体系

Java/Java异常体系

Java 从诞生之初就提供了完善的异常处理机制,大大降低了编写和维护可靠程序的门槛。Java 的异常处理机制主要回答了 3 个问题: - What:异常类型回答了什么被抛出 - Where:异常堆栈跟踪回答了在哪里被抛出 - Why:异常信息回答了为什么被抛出

Java异常体系类图
阅读更多
Java/Java 线程池

Java/Java 线程池

在 Java 中,一般都会利用 Executors 创建不同的线程池满足不同场景的需求。

1
Executors.newFixedThreadPool(int nThreads)

指定工作线程数量的线程池,每来一个任务,就创建一个工作线程,如果线程数打到了nThreads,就把任务存放进队列中排队,

1
Executors.newCachedThreadPool()

处理大量短时间工作任务的线程

阅读更多
Java/深入理解 CAS

Java/深入理解 CAS

Java 中的synchronized是一种悲观锁,悲观锁始终假设会发生并发冲突,因此会阻止一切可能违反数据完整性的操作。而 CAS 是一种乐观锁 CAS 全称是 Compare and Swap。乐观锁假设不会发生并发冲突,因此只在提交的时候检查是否违反数据完整性,如果提交失败则会进行重试。

CAS 支持原子更新操作,适用于计数器,序列发生器等场景。CAS 操作失败时由开发者决定是继续尝试,还是执行别的操作。

阅读更多
Papers/Spatial Temporal Graph Convolutional Networks-笔记

Papers/Spatial Temporal Graph Convolutional Networks-笔记

Title

Video to Events: Recycling Video Datasets for Event Cameras

Summary

Event cameras 有 high dynamic range (HDR)、high temporal resolution 和 no motion blur 等优点,在 event data 上的算法已经取得了很好的效果。但是这些应用需要大量数据,而公开的 event data 数据集很少,这篇论文提出一种方法,可以将传统相机采集的视频数据集转换为 event data 数据集。并且在 object recognition 和 semantic segmentation 两个任务上评价了这种方法。有如下两个优点:

  1. 即使在传统摄像图像模糊或曝光过度的场景下,在生成数据训练的模型也可以利用 Event cameras 的优点,在真实事件数据上具有很好的泛化能力。
  2. 在这些转换数据训练出来的模型,可以在真实数据上进行微调,改进分类和语义分割任务的效果。在这些生成的 event data 上训练的模型的效果始终比只在 event data 上训练的模型好,这表明了 event data 包含了全部视觉信息,并且可以用 end to end 的方法来处理这些数据。

SYSTEM OVERVIEW

  1. 改论文首先把 frame 转换为 event,包括两步:frame upsampling 和 event generation。然后再转换成类似于 tensor 的表示形式。
  2. frame upsampling:
    1. 使用的方法来源于 Super SloMo: High quality estimation of multiple intermediate frames for video interpolation。
    2. 虽然使用 ESIM 可以根据 frame 生成任意 temporal resolution 的 event,但是 frame 的采样率太低,因此需要使用上采样将 frame 的采样率提升。而 Super SloMo 方法在智能手机中广泛使用,因此使用这种方法。中间生成的 frame 数量既不能太多(增加计算量),也不能太少(导致亮度信号的混叠)。这里使用 bidirectional optical flow 来计算需要生成的 frame 的数量。
  3. event generation:
    1. 使用的方法来源于 ESIM: an open event camera simulator。
    2. 对于每个像素,通过在视频帧之间进行线性插值来生成时间上的连续强度信号,然后根据强度变化是否超过某个 threshold(C) 来生成 event。由于 C 在不同的传感器上是不一样的,因此在训练集上使用随机化的 C 作为 threshold,在测试集上使用均匀采样来确定 C \(\sim \mathcal{U}\left(C_{\min }, C_{\max }\right)\)。在这个论文中 \(C_{\min }=0.05\)\(C_{\max }=0.5\)
    3. 最后把一个时间窗口内的 event data 转换成 tensor-like representation:EST。这种表示方法把 positive 和 negative event 分为两个 grid,维度为 \(H \times W \times C\),其中 \(C\) 是 temporal bins 的数量,\(C = 15\)

Experiments

进行了两个实验:Object Recognition 和 semantic segmentation。都是基于生成的 event data 来进行模型训练。这些模型可以在真实的 event data 上有很好的泛化能力;在真实数据上进行微调后的效果超过现有的其他模型;可以应用到那些 frame 模糊或者曝光不足的场景。

  1. o=Object c=Classification:使用 N-Caltech101 和 Caltech101 数据集
    1. 首先将 Caltech101 的图片数据转换为视频数据(moving a virtual camera in front of a 2D projection of the sample),然后使用 ESIM 转换为 event data。名字为 sim-NCaltech101。
    2. 模型使用在 ImageNet 上预训练好的 ResNet-34,sim-NCaltech101 作为训练集,真实的 N-Caltech101 作为测试集,准确率为 75.1%。另一个对比实验的训练集和测试集均为 N-Caltech101,准确率为 86.3%。
    3. 由于数据集的样本不平衡,从网上下载了其他数据。准确率最高为 80.7%。
    4. 在 N-Caltech101真实数据集上进行微调之后,准确率为 90.6%,超过其他所有 event-based 的方法,但是没有超过 image-based 的94.7%。
    5. 最后研究了 Frame Upsampling 对模型的提升效果。对每个图片,先用 530 Hz 的采样率记录 300 毫秒的视频,然后降采样,再使用 ESIM 上采样。对比 3 种数据所训练模型的准确率。在 downsampling factor 为 80 时,downsampled 的准确率为 61.8%,经过 ESIM 上采样的模型准确率为 68.7%。
  2. Semantic Segmentation:使用 DDD17 数据集。数据转换过程和上面类似,event data 转换为 tensor 包括两种表示方式:EST 和 6-channel representation。模型使用 UNet。很多配置都是参考 SegNet 论文里的配置,包括 label 的生成方式, 6-channel representation、使用的模型、评价指标(Acc、MIoU)、Time-Of-Window(10、50、250)。
    1. 在生成的 event 数据上的模型的 MIou 为 48.2%,在真实 event 数据上的准确率为 54.8%。
    2. 但是把这个模型在真实 event 数据上经过微调,MIoU 为 56.01%,效果超过其他所有方法。
    3. 最后在 frame-based 上训练的模型在 motion blur 或者 overand under-exposure 的场景下效果不好,而 event-based 的模型依然可以获得好的划分效果。
  3. 这种方法也有限制。如果原始视频中有 blurry frames,那么生成的 frame 也是模糊的,从而生成的 event 带有噪声。对噪声的建模可以作为 future work。

Conclusion

  1. 提出了一个框架,将现有视频数据集转换为event data 数据集,这些数据可以更好地为新的研究提供便利。
  2. 在这些生成的数据集上训练的模型也能够利用 event camera 的特点,可以很好地泛化到真实数据,即使在标准图像模糊或曝光过度的情况下也是如此。
  3. 通过对目标识别和语义分割两个相关视觉任务的实验,表明基于生成的 event 数据训练的模型,可以在真实数据上进行微调,精度超过现有的其他方法。

Notes

  • 在 event 数据集中,classification 的数据集有:(N)-MNIST 和 N-Caltech101。action recognition 的数据集有 DVS-Gesture dataset。human pose dataset 有 DAVIS Human Pose Dataset。driving dataset 有 DDD17 和 MVSEC。
  • Synthetic Events 的方法有 Pix2NVS(computes per-pixel luminance from conventional video frames),但是 timestamp 不准确。后来出现了插值法先把原来低帧率的 frame 转变为高帧率,然后再转换成 event。