YOLO 太典型的 one-stage method,可谓简单粗暴
放弃了 Region Proposal,直接划分为 S * S 个grid
Localization 虽说都要给出 Bounding Box,但是不同于 Detection 有专门的 Detection 数据集,Localization 用的还是 Classification 的数据集,也就是每幅图像中只有一个占据主要区域面积的物体,而 Detection 的数据集中一幅图像内可以有任意多个物体,也可以没有。
ICLR-2014-Overfeat 那篇论文提到了两者的区别。
首先需要明确的是 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')
dmlc/gluon-cv
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
介绍说是 MixSoftmaxCrossEntropyLoss
就是 SoftmaxCrossEntropyLoss2D with Auxiliary Loss,但事实上感觉不止于此。
_aux_forward
和 _aux_mixup_forward
的区别在于,_aux_forward
计算 Loss 是调用的 SoftmaxCrossEntropyLoss
,而 _aux_mixup_forward
调用的是 _mixup_forward
。那么 _mixup_forward
同普通的 SoftmaxCrossEntropyLoss
有什么区别呢?
_mixup_forward
中的 label1
和 label2
分别指什么? 这里的 mixup 是指 mixup: Beyond Empirical Risk Minimization 这篇论文里的内容。目标检测任务的优化策略 tricks 中有很形象的插图说明。
Numpy 和 MXNet 里的的 NDArray 里面的 axis 是和 MATLAB 一样都是列优先的,所以 axis = 0 是每列每列来,axis = 1 则是每行每行来。
NumPy 支持逻辑索引,而 MXNet 的 NDArray 不支持,因此如果要做逻辑索引,需要将其转成 Numpy 数组。
Toolbox 既是一种 Blessing,可以让一知半解的我们迅速上手,同时也是一种 Curse,需要考虑很多细节。一点关于 gluon-cv/scripts/segmentation/train.py 的笔记。
parse_args