- 先 Fork 感兴趣项目,即
dmlc/gluon-cv
- Clone 到本地,
git clone [email protected]:YimianDai/gluon-cv.git
- 添加源项目
dmlc/gluon-cv
作为upstream
源,git remote add upstream https://github.com/dmlc/gluon-cv.git
- 禁止直接向
upstream
源 push,因为我们不是 dmlc 的人,没有 push 的权限,要提交代码必须通过 Pull Request,git remote set-url --push upstream no_push
- 创建并切换到本地的新分支
fixMixSoftmaxCrossEntropyLoss
,git checkout -b fixMixSoftmaxCrossEntropyLoss
首先需要明确的是 MixupDetection
这个类是在 VOCDetection
类之上的一个 wrapper,因为 mixup 这个技巧/方法可以简单的认为是一个 Data Augmentation 的手段。传统的 Data Augmentation 手段:裁剪、翻转 / 旋转、尺度变化,mixup 的做法在于将两幅图像按照随机权重相加。
MixupDetection
的实现考虑了两幅图像的大小可能是不同的,因此 mixup 后的图像为最大的图像,因此代码中 mixup 图像由下得到
height = max(img1.shape[0], img2.shape[0])
width = max(img1.shape[1], img2.shape[1])
mix_img = mx.nd.zeros(shape=(height, width, 3), dtype='float32')
Localization 虽说都要给出 Bounding Box,但是不同于 Detection 有专门的 Detection 数据集,Localization 用的还是 Classification 的数据集,也就是每幅图像中只有一个占据主要区域面积的物体,而 Detection 的数据集中一幅图像内可以有任意多个物体,也可以没有。
ICLR-2014-Overfeat 那篇论文提到了两者的区别。
- Loss 要可微分,这样才可以做 SGD;Metric 则没有这个要求
extra_spec = {
300: [((256, 1, 1, 0), (512, 3, 2, 1)),
((128, 1, 1, 0), (256, 3, 2, 1)),
((128, 1, 1, 0), (256, 3, 1, 0)),
((128, 1, 1, 0), (256, 3, 1, 0))],
512: [((256, 1, 1, 0), (512, 3, 2, 1)),
通常我们说机器学习三要素:Model、Loss、Optimization,大多数计算机视觉的论文也主要关注在 Model 和 Loss 上。在 Deep Learning 统治的当今,主流的范式往往是设计一个新的 loss,或者提出一个新的网络结构,把传统的 heuristic 方法 hard encoded 到网络结构中去实现端对端学习 [1]。
随着 SSD 这样特别强调 Data Augmentation 的方法的流行,以及 SNIP 这样强调 Data Scale 的 Argument 得到认可,Data 本身也已经是计算机视觉需要关心的一大要素。但现实是,当我们去接触代码的时候,Data Pre-processing 会是个又臭又长的过程。 又因为 Data 是Model、Loss、Metric 最重要的输入,如果 Data 与函数预想的不一样,就得不到想要的结果,特别是自己从头到尾写一个实现的时候。这篇日志以 GluonCV 中 SSD 实现中的 Data 为例,剖析一下 Data 在各个环节中需要的形式以及经历的操作。
按照先创建 train_dataset
,再对其做 SSDDefaultTrainTransform
,然后输入 DataLoader
通过 batchify_fn
拼成一个 batch,接着输入 SSD
的 net 实例,最后输入 SSDMultiBoxLoss
损失函数计算损失的顺序过程看一下 Data 在 Training 时在各环节的流动和变化情况。
目标检测 - SNIPER-Efficient Multi-Scale Training - 论文笔记
SNIPER:
-
adaptively samples chips from multiple scales of an image pyramid, conditioned on the image content.
-
We sample positive chips conditioned on the ground-truth instances and negative chips based on proposals generated by a region proposal network.
- negative chips 竟然是用 RPN 产生的,真神奇
-
R-CNN 是 scale invariant 的 (with the assumption that CNNs can classify images of a fixed resolution)