作者:张航 Amazon AI Applied Scientist

跨卡同步(Cross-GPU Synchronized)Batch Normalization或称为同步BN(SyncBN)。

写在前面:为什么要跨卡同步Batch Normalization

现有的便准Batch Normalization因为使用数据并行(Data Parallel),是单卡的实现模式,只对单个卡上对样本进行归一化,相当于减小了批量大小(batch-size)。对于比较消耗显存的训练任务时,往往单卡上的相对批量过小,影响模型的收敛效果。之前在我们在图像语义分割的实验中,发现使用大规模的效果反而变差,实际上就是BN在作怪。跨卡同步Batch Normalization 可以使用全局的样本进行归一化,这样相当于‘增大’了批大小,这样训练效果不再受到使用GPU数量的影响。最近在图像分割、物体检测的论文中,使用跨卡BN也会显著地提高实验结果,所以跨卡BN已然成为竞赛刷分、发论文的必备神器。

阅读全文 »

很多网络的特征提取部分都会用到fine-tunning,比如resnet-50,inception等,该文章以AlexNet为例,分析tensorflow如何进行微调

finetuning的三要素:

  • 预训练模型,如resnet_v2_50.npy、resnet_v2_50.ckpt等。
  • 模型的网络结构定义。
  • 所需从预训练模型中恢复的变量,通常以排除的方式给出。
阅读全文 »

局部与分割

简单来讲,分割就是如何从图像中将目标或部分目标分割出来。处了从图像中分割出前景目标之外,在很多情况下我们也希望将感兴趣的目标区域分割出来。
本章主要研究其他用于查找、填充和分离一幅图像中的目标以及部分目标物体的算法。

阅读全文 »

内存

OpenCV使用内存存储器(memory storage)来统一管理各种动态对象的内存。内存存储器在底层被实现为一个有许多相同大小的内存块组成的双向链表,通过这种结构,OpenCV可以从内存存储器中快速的分配内存或将内存返回给内存存储器。

阅读全文 »

直方图的基本数据结构

简单的说,直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。bin中的数值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。无论如何,直方图获得的是数据分布的统计图。通常直方图的维度要低于原始数据。

阅读全文 »

平滑处理(模糊处理)

平滑处理的用途有很多,最常见的是用来减少图像上的噪声或者失真。降低图像分辨率时,平滑处理很重要。目前OpenCV可提供五种不同的平滑操作,分别为简单模糊,简单无缩放变换的模糊,中值模糊,高斯模糊以及双边滤波。

阅读全文 »

创建窗口

1
2
3
4
5
6
int cvNameWindow(const char* name, int flags=CV_WINDOW_AUTOSIZE); // 创建窗口

void* cvGetWindowHandle(const char* name);
const char* cvGetWindowName(void* window_handle); // 获取窗口名称

void cvResizeWindow(const char* name, int width, int height); // 调整窗口大小
阅读全文 »