每月笔记之2020年2月

1、如果是做Re-ID的朋友应该知道,再识别里面用最多的也就是就是ID Loss(交叉熵loss)和Triplet-Loss。在这次的比赛中( ICCV 2019 野生东北虎再识别挑战赛双赛道冠军方案(含开源代码)),我们同样是混合了这两种loss进行训练。

2、同款鞋子相似度比较(细粒度特征提取,可以参考这个):
腾讯官方揭秘:微信扫一扫识物背后技术 | 极市高质量视觉算法开发者社区(http://bbs.cvmart.net/topics/1384)

3、尝试用cmd命令画目录的树形结构

4、人体姿态估计如果要定位较有挑战性的关节点(如隐藏关节点)需要较强的领域上下文信息。同时,对于基于回归 heatmap 的任务,作为 GT 的高斯核越小,回归精度越准。考虑到以上两点,并结合多阶段网络的自身逐级递进优化的特性,我们提出基于多阶段的由粗到精的监督方式。每个阶段方式的监督heatmap的高斯核逐渐减小,可较理想地兼顾领域上下文信息和精准度。由于中间监督对于深度神经网络有较好效果[3],我们在每个阶段内部也采用了多尺度的中间监督。

5、本次竞赛( CVPR18 大规模精细粒度物种识别竞赛)冠军DLUT_VLG所使用核心技术方案,是基于该团队所研发的矩阵幂正规化协方差聚合(MPN-COV)卷积网络网络模型及快速训练算法。

MPN-COV模型的新颖之处在于在网络中引入了二阶统计信息作为图像表征,与经典方法在学习过程中仅仅挖掘一阶统计信息具有显著不同,能够学习到分辨能力更强的视觉特征。

通过引入全局协方差聚合和矩阵幂正规化技术,MPN-COV模型在性能上显著优于经典的卷积网络,而且收敛速度更快,相关工作发表在ICCV 2017和CVPR 2018上。

除了全局协方差聚合之外,该课题组也深入研究了全局高斯聚合卷积网络,解决了高斯流形嵌入和端到端学习问题,研究成果发表于CVPR 2017 (oral)和TPAMI

6、voc格式存储box是左上角点和右下角点
coco格式存储Box是左上角点和宽高

7、检测小目标时候,可能context会很有用,但是那种大目标以及特征明显的目标可能不需要context。

8、DCN对不同的backbone是不是作用不一样,试一试resnet50??

9、羽毛球项目是不是可以当作广东布匹瑕疵检测问题,用双路输入,一路为背景图片(模板),一路为有羽毛球的图片,那人怎么办??(目标检测变为一个变换检测的问题)

10、不同backbone与不同尺寸的输入训练出来的模型是由差异性的

11、当任务中有位置回归问题时,应该尽量避免max pooling的应用,而是要用卷积替代

12、通过对比试验可以发现,用fc-head去做分类,同时用conv-head去做回归,可以实现最好的效果,这是种分而治之的思想

13、网络加深为什么可以提升网络性能
更好的非线性表达能力 以及 更深的模型 每层的学习更容易

14、残差网络虽然有152层,但有效的可能只有30多层

15、有可能不同的类别是在不同的epoch收敛到最优,如何跳出局部最优,参考天池的农业AI(赵栋的)

16、弱监督学习(weakly supervised learning): 已知数据和其一一对应的弱标签,训练一个智能算法,将输入数据映射到一组更强的标签的过程。标签的强弱指的是标签蕴含的信息量的多少,比如相对于分割的标签来说,分类的标签就是弱标签,如果我们知道一幅图,告诉你图上有一只猪,然后需要你把猪在哪里,猪和背景的分界在哪里找出来,那么这就是一个已知若标签,去学习强标签的弱监督学习问题。

半监督学习(semi supervised learning) :已知数据和部分数据一一对应的标签,有一部分数据的标签未知,训练一个智能算法,学习已知标签和未知标签的数据,将输入数据映射到标签的过程。半监督通常是一个数据的标注非常困难,比如说医院的检查结果,医生也需要一段时间来判断健康与否,可能只有几组数据知道是健康还是非健康,其他的只有数据不知道是不是健康。那么通过有监督学习和无监督的结合的半监督学习就在这里发挥作用了。

17、容易过拟合的网络是不是不适合加focal loss,加了focal loss是不是更容易过拟合??

18、soft-nms的应用场景:针对脏点等容易大数量集中在某个区域的小瑕疵进行更好的检测

19、能不能进行酒瓶瑕疵与地铁病害之间的迁移学习??

20、soft-nms可提高召回率

21、DCN与大的kenel卷积这俩 哪个更适合提取好的特征??

22、为什么feature map分辨率变低之后对小目标检测不友好??分辨率变低的同时channel数量也增多了啊!!

23、roi pooling时候能不能多层pooling ,即一个roi去一层pooling然后去另一个层的feature map再次pooling,然后两个特征做融合再进行后续的分类回归

24、竞赛时候好多tricks大家都在尝试,有些trick对某些人有用,对另一些人没用??? 但有些人可以刷出高分,有些人刷不出来,这是为啥??

25、工业检测上是不是需要更加专业的标注??? 标注是很重要的步骤!!!!!!

26、深度学习做边界检测?? Rcf Net

27、同类模型之间的融合SWA??

28、论文一:Why do deep convolutional networks generalize so poorly to small image transformations?
结论:CNNs的泛化能力不如人类。现代深度神经网络对于平移,旋转,缩放等变换并不具有不变性,且和下采样操作和数据集中的偏差有关系。
论文中的原文说:我们不能简单地把系统中的平移不变性寄希望于卷积和二次采样,输入信号的平移不意味着变换系数的简单平移,除非这个平移是每个二次采样因子的倍数。
现代CNN中普遍包含二次采样(subsampling)操作,它是我们常说的下采样层,也就是池化层、stride。它的本意是为了提高图像的平移不变性,同时减少参数,但它在平移性上的表现真的很一般。
(4.为什么CNN不能从数据中学习平移不变性?)
上面论证了CNN在架构上无法保证平移不变性,而且观察得知,它只能从大量数据中学到部分不变性,论文认为是这些通用数据集中存在一定的摄影师偏差,使得神经网络无需学会正式的平移不变性。宏观来看,只要不是像素级别的编码,世界上就不存在两张完全一样的图像,所以神经网络是无法学到严格的平移不变性的,也不需要去学习。

29、CNN对平移、缩放、自然运动状态没有不变性??那跟踪中的数据集不同帧之间很相似,是不是不应该去掉??

30、只平移1个像素,Maxpooling结果就发生了巨大差异。下采样是CNN平移不变性丢失的罪魁祸首。例如数列:00110011

31、论文二:Making Convolutional Networks Shift-Invariant Again
论文一中已经分析了CNN不能从数据中学习平移不变性,根本原因就在于下采样(不满足采样定理),无论是Max Pooling,Average Pooling,还是Strided-Convolution,只要是步长大于1的下采样,均会导致平移不变性的丢失。

32、近期的工作如FPN等已经尝试在不同尺度的特征图上进行检测,但多尺度训练/测试仍作为一种提升性能的有效技巧被应用在MS COCO等比赛中。

33、box的微调法最初是在SS算法得到的Region Proposal基础上用检测头部进行多次迭代得到一系列box,在ResNet的工作中,作者将输入R-CNN子网络的Region Proposal和R-CNN子网络得到的预测框共同进行NMS(见下面小节)后处理,最后,把跟NMS筛选所得预测框的IoU超过一定阈值的预测框进行按其分数加权的平均,得到最后的预测结果。

34、今天说的是《Soft Anchor-Point Object Detection》,其也是最近关于anchor free的目标检测的论文,作者来自于CMU,一作同样也是FSAF(2019 CVPR)的作者。该论文的出发点还是在样本选择和FPN特征选择层面

35、该论文同时也借鉴了FoveaBox将一个anchor映射到多个分辨率进行检测的思想(实际上工程中也会用到)来提升性能。

36、当然了,并不是只要参数一多就会过拟合,还要看你的样本量。

37、L1正则就是加入拉普拉斯先验,L2正则就是加入高斯先验,这个先验是针对参数来说的。

38、事实上 L1 regularization 会使得许多参数的 最优值 (注意是最优值)变成 0,这样模型就稀疏了。

39、L1正则化使得模型更加稀疏,L2使得模型参数更趋近于0,提高泛化能力。
如果同时使用L1和L2正则化呢?会有什么样的效果?

40、监督机器学习问题无非就是“minimizeyour error while regularizing your parameters”,也就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。多么简约的哲学啊!

41、OK,到这里,如果你在机器学习浴血奋战多年,你会发现,哎哟哟,机器学习的大部分带参模型都和这个不但形似,而且神似。是的,其实大部分无非就是变换这两项而已。对于第一项Loss函数,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了;还有等等。不同的loss函数,具有不同的拟合特性,这个也得就具体问题具体分析的。但这里,我们先不究loss函数的问题,我们把目光转向“规则项Ω(w)”。

42、 L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。这太直观了,太露骨了吧,换句话说,让参数W是稀疏的。OK,看到了“稀疏”二字,大家都应该从当下风风火火的“压缩感知”和“稀疏编码”中醒悟过来,原来用的漫山遍野的“稀疏”就是通过这玩意来实现的。

L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。

43、酒瓶瑕疵那个竞赛用resnext101_32是不是过拟合了,毕竟数据量不够,是不是可以尝试下resnet50??

44、从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。哎,等等,这condition number是啥?我先google一下哈。
condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。

45、L2这个规则项的引入则可以改善condition number。

46、规则项从优化的角度来看,实际上是将目标函数变成λ-strongly convex(λ强凸)的了

47、实际上,在梯度下降中,目标函数收敛速率的上界实际上是和矩阵XTX的 condition number有关,XTX的 condition number 越小,上界就越小,也就是收敛速度会越快。
这一个优化说了那么多的东西。还是来个一句话总结吧:L2范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。

48、所以,损失函数与正则项就像是博弈的双方,它们之间的力量对比通过参数 λ 进行调和。只有把 λ 调合适了,才能得到既不过拟合,又相对简单的好模型。从这种意义上来说,L2正则项与L1正则项类似,也有“特征选择”的效果。

49、有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:training data、validation data,testing data。这个validation data是什么?它其实就是用来避免过拟合的,在训练过程中,我们通常用它来确定一些超参数(比如根据validation data上的accuracy来确定early stopping的epoch大小、根据validation data确定learning rate等等)。那为啥不直接在testing data上做这些呢?因为如果在testing data做这些,那么随着训练的进行,我们的网络实际上就是在一点一点地overfitting我们的testing data,导致最后得到的testing accuracy没有任何参考意义。因此,training data的作用是计算梯度更新权重,validation data如上所述,testing data则给出一个accuracy以判断网络的好坏。
避免过拟合的方法有很多:early stopping、数据集扩增(Data augmentation)、正则化(Regularization)包括L1、L2(L2 regularization也叫weight decay),dropout。

50、结构性特征表示
小块的图形可以由基本edge构成,更结构化,更复杂的,具有概念性的图形如何表示呢?这就需要更高层次的特征表示,比如V2,V4。因此V1看像素级是像素级。V2看V1是像素级,这个是层次递进的,高层表达由底层表达的组合而成。专业点说就是基basis。V1取提出的basis是边缘,然后V2层是V1层这些basis的组合,这时候V2区得到的又是高一层的basis。即上一层的basis组合的结果,上上层又是上一层的组合basis……(所以有大牛说Deep learning就是“搞基”,因为难听,所以美其名曰Deep learning或者Unsupervised Feature Learning)

51、浅层学习是机器学习的第一次浪潮。
20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。这些模型的结构基本上可以看成带有一层隐层节点(如SVM、Boosting),或没有隐层节点(如LR)。这些模型无论是在理论分析还是应用中都获得了巨大的成功。相比之下,由于理论分析的难度大,训练方法又需要很多经验和技巧,这个时期浅层人工神经网络反而相对沉寂。

52、深度学习是机器学习的第二次浪潮。
深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。

53、人工神经网络可能是指多层感知机那种,只有全连接层,不带卷积操作,所以不叫卷积神经网络??好像不对

54、自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。
当然,我们还可以继续加上一些约束条件得到新的Deep Learning方法,如:如果在AutoEncoder的基础上加上L1的Regularity限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到Sparse AutoEncoder法。

55、如果矩阵表达的是结构性信息,例如图像、用户-推荐表等等,那么这个矩阵各行之间存在这一定的相关性,那这个矩阵一般就是低秩的。

56、核范数||W||是指矩阵奇异值的和,英文称呼叫Nuclear Norm,作用是约束Low-Rank(低秩),约束低秩只是约束rank(w)呀,和我们这节的核范数有什么关系呢?他们的关系和L0与L1的关系一样。因为rank()是非凸的,在优化问题里面很难求解,那么就需要寻找它的凸近似来近似它了。对,你没猜错,rank(w)的凸近似就是核范数||W||

57、,对于未加旋转的图像,由于图像的对称性与自相似性,我们可以将其看做是一个带噪声的低秩矩阵。当图像由端正发生旋转时,图像的对称性和规律性就会被破坏,也就是说各行像素间的线性相关性被破坏,因此矩阵的秩就会增加。

58、低秩的应用:(对旋转后的图像进行恢复)
低秩纹理映射算法(TransformInvariant Low-rank Textures,TILT)是一种用低秩性与噪声的稀疏性进行低秩纹理恢复的算法。它的思想是通过几何变换τ把D所代表的图像区域校正成正则的区域,如具有横平竖直、对称等特性,这些特性可以通过低秩性来进行刻画。

58、L1、L2正则化时候:这不是说我们的泛化性能是我们的参数λ的函数吗?那我们为什么按优化那一套,选择能最大化泛化性能的λ呢?Oh,sorry to tell you that,因为泛化性能并不是λ的简单的函数!它具有很多的局部最大值!而且它的搜索空间很大。所以大家确定参数的时候,一是尝试很多的经验值,这和那些在这个领域摸爬打滚的大师是没得比的。

59、数据归一化的好处:提升模型的收敛速度,提升模型的精度,深度学习中数据归一化可以防止模型梯度爆炸。

60、机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。

BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。

61、若两个随机变量满足独立同分布(iid),则它们的期望和方差都相同

62、BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致后向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正太分布而不是正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

但是很明显,稍微了解神经网络的读者一般会提出一个疑问:如果都通过BN,那么不就跟把非线性函数替换成线性函数效果相同了?这意味着什么?我们知道,如果是多层的线性函数变换其实这个深层是没有意义的,因为多层线性网络跟一层线性网络是等价的。这意味着网络的表达能力下降了,这也意味着深度的意义就没有了。所以BN为了保证非线性的获得,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale * x + shift),每个神经元增加了两个参数scale和shift参数,这两个参数是通过训练学习到的,意思是通过scale和shift把这个值从标准正态分布左移或者右移一点并长胖一点或者变瘦一点,每个实例挪动的程度不一样,这样等价于非线性函数的值从正中心周围的线性区往非线性区动了动。核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢。

63、BN的优点
BN将Hidden Layer的输入分布从饱和区拉到了非饱和区,减小了梯度弥散,提升了训练速度,收敛过程大大加快,还能增加分类效果。Batchnorm本身上也是一种正则的方式(主要缓解了梯度消失),可以代替其他正则方式如dropout等。调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。
BN的缺陷
batch normalization依赖于batch的大小,当batch值很小时,计算的均值和方差不稳定。

64、BN改善的是feature map的值,而L1、L2正则化是改善的卷积核参数的值

65、另外,Batch Normalization是在batch这个维度上Normalization,但是这个维度并不是固定不变的,比如训练和测试时一般不一样,一般都是训练的时候在训练集上通过滑动平均预先计算好平均-mean,和方差-variance参数,在测试的时候(每次测试只有一张图像),不再计算这些值,而是直接调用这些预计算好的来用,但是,当训练数据和测试数据分布有差别是时,训练机上预计算好的数据并不能代表测试数据,这就导致在训练,验证,测试这三个阶段存在inconsistency。

66、GN是在feature map的特征通道这个维度上进行分组 论文中说一般按32分组,分组完之后进行归一化操作

why work:从深度学习上来讲,完全可以认为卷积提取的特征是一种非结构化的特征或者向量,拿网络的第一层卷积为例,卷积层中的的卷积核filter1和此卷积核的其他经过transform过的版本filter2(transform可以是horizontal flipping等),在同一张图像上学习到的特征应该是具有相同的分布,那么,具有相同的特征可以被分到同一个group中,按照个人理解,每一层有很多的卷积核,这些核学习到的特征并不完全是独立的,某些特征具有相同的分布,因此可以被group。

67、 BN可以使用更大的学习率,文[2]指出BN有效是因为用上BN层之后可以使用更大的学习率,从而跳出不好的局部极值,增强泛化能力,在它们的研究中做了大量的实验来验证。

68、深度学习中,L2正则用的挺多的。一般我们在设置优化器的时候用的weight decay就相当于L2正则。在Batch Norm之后,dropout用的不多了。

69、比赛嘛,当然是追求高精度,下面将结合一些最新的论文和天池上目标检测相关比赛的优胜方案,谈谈如何提高模型精度。
首先要推荐的是亚马逊李沐团队的论文及代码:
Bag of Freebies for Training Object Detection Neural Networks
https://arxiv.org/abs/1902.04103v1
https://github.com/dmlc/gluon-cv

70、在目标检测领域还有一大难点是小目标的检测,这里强烈推荐大家参考论文:
Augmentation for small object detection
https://arxiv.org/abs/1902.07296
通过造数据的方式使得小目标类别在整体更均衡,可以有效改进算法效果。

71、string.replace(str1, str2, num=string.count(str1))
把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.

72、C++中类内的成员变量好像一般是类内的成员函数才可以访问

73、修改链表
修改数据,因为我们通过指针可以直接修改地址储存的信息,所以函数并不需要返回值

74、C++中vector可以利用下标访问,但是不能使用下标添加元素

75、set s={11,12,14,15,15};//注意set里面不会存在重复的数

76、focal loss看数据集的,如果标签不是严格定义的,或者有可能存在一定量脏数据,focal loss会起反作用

77、感受野的意义。只有大感受野才能感受到尺寸比较大的物体。感受野,深度和通道数,共同决定了cnn某一层的性能,一个衡量cnn性能的正确表述应该是网络在某一层有多大的深度和感受野,同时有多少通道。深度决定了网络的抽象能力或者说学习能力,感受野决定了网络某一层看到多大的范围,通道数决定了网络某一层的信息量,感受野和通道数可以共同表示网络某一层学习到的有效空间和语义信息。

78、maxpooling的额外讨论
这促使我们思考,采样真的是必要的吗?当然,从工程的角度看,采样能极大减小feature map的尺寸,从而大大降低计算量,但这个实验表明,采样对提高cnn的性能并没有帮助,max pooling有抑制噪声的作用,所以有用,但max pooling可以用不下采样的方式实现,这和经典的中值滤波类似。

这也说明,cnn的每一层卷积都在编码空间相关性,浅层特征编码短距离相关性,更深的卷积层编码更远距离的空间相关性,而到了某一层,再也没有统计意义上的空间相关性了(这取决于有意义的物体在图像中的尺寸),到这一层就可以用GAP聚合空间特征了。

79、空洞卷积和下采样的作用区别很大了。空洞卷积是在保持分辨率的同时,即不增加参数量还能扩大感受野,并没有聚合信息。下采样则是聚合信息,丢掉不需要的内容(这些都是噪声)。
你的下采样有副作用,那就是丢掉需要的内容了,改进方法就是在池化前多加几层卷积。你的空洞卷积有作用,那就是感受野本身就不够,想办法增加些感受野就好了。感受野够的话空洞卷积是不会起作用的

80、类别数也不能说明数据集的难度,比如说cifar10和mnist都是10类,但是难度根本不在一个量级。我有一次做昆虫识别,就两种昆虫,但他俩太像了,acc一直上不去,加入第三种昆虫后,反而整体的acc里面就上去了

81、gap起作用是因为不同featuremap应当有不同的权重在几乎所有任务上都成立。所以专门给这个特点建了个模,赋了些参数。因为普通的网络featuremap的权重是在卷积核自身值的大小上体现的,一个3*3卷积核9个值,再乘以前一层的featuremap数,一共有这么多的参数值控制着权重,所以在featuremap权重这个特点上十分冗余,噪声极大非常难学,所以gap建的模管用。

82、池化的本质是信息的提取和聚合。我给你一张500*500的图,然后你告诉我图中是个飞机,这就是一个信息提取的过程。信息提取必然伴随着信息损失:因为你把没用的信息丢掉了嘛,毕竟我也不需要。
网络里的池化层不加的时候,信息经过一层层变换,除了提取外可能会有一些聚合过程,但从信息量上看,基本是在最后一层完成全量信息到10分类信息(不到4bit)的提取;而池化层能够完成的是全量信息到1/4量到1/16量等渐变提取。由于大家都相信一个先验知识:在计算机里信息缓慢的提取和聚合效果更好,所以默认使用了池化层。

83、带有关键点标注的图像进行水平翻转时候的off-by-one问题,应该是 kpts = [(y, w - x - 1) for y, x in kpts],而不是kpts = [(y, w - x) for y, x in kpts]

84、 那我们为什么还要使用二叉树而不直接使用二分查找来代替?
这是因为,二分查找一般基于数组,如果需要插入或删除数据,则会带来很大的开销。因为每次插入或者删除数据需要将改变节点之后的数据往后挪或者往前挪。但是对于二叉树而言,只需要改变一下指向下一个节点的指针就可以很方便的实现插入或者删除。而且一些特殊的二叉树如红黑树可以保证查找的最坏复杂度不超过O(LogN)。
所以,如果是对于静态数据,不需要改变的数据而言,采用数组存储,使用二分查找比较好。而对于动态数据,需要频繁插入或者删除数据的,采取二叉树存储是较好的。

85、二叉树的查找思想基于:在二叉树中,对于任意节点N,左子树中的所有项的值不大于节点N中存储的值,右子树中的所有项的值不小于节点N中存储的值。

86、可以看出分类和分割任务经过训练后的实际感受野都有提升,不过提升幅度不太一样。这也说明了神经网络通过学习,扩大了感受野,能够自适应把越来越大的权重放在感受野之外的像素上。也在一定程度上说明更大感受野的必要性。

87、
Anchor大小 < 实际感受野 < 理论感受野,anchor大小设置时不仅根据数据集,也要根据网络这层的感受野,不够的话可以改进网络结构

88、
首先,许多经典的网络结构中的这些卷积不是随便决定的,在修改网络的时候不能随便删除。比如在yolov3中,backbone后边的几个卷积再接yolo层这个当时就觉得很随意,但是他是有一定道理的。

假如出于对小目标的考虑,想要降低下采样率,那么直接删掉一个maxpool层,或者删掉stride=2的卷积层都是不可取的。通过公式我们知道,stride对一个网络的感受野影响非常大,而且会对后边的网络层的感受野都进行影响,所以要通过使用stride=1的maxpool或者空洞卷积来弥补对感受野带来的损失。

自己尝试过使用kmeans算法聚类自己数据集的Anchor,之前两个数据,两次聚类,都出现了自己聚类得到的Anchor不如默认的Anchor得到的结果。之前一直不知道原因在哪里。在总结了感受野以后,我觉得可以合理推测,Anchor应该和实际感受野尽量匹配,但是实际感受野实际上是一个超参数,通过聚类得到的anchor有一定代表性,但是效果反而不如默认的anchor,这是因为我们自己聚类得到的Anchor的范围实际上没有默认的广。

比如yolov3-tiny里边的anchor最小是【10,14】最大是【344,319】,经过计算理论感受野是382,按照SFD里边推导得到的公式计算,对应的anchor大小应该为159,如果按照理论感受野的三分之一来计算,大概是127.3。大概在这个范围,自己聚类得到的最大anchor也就是20左右,所以网络如果想要适应(回归)20左右的anchor需要网络更长时间的训练。

89、SFD论文: https://arxiv.org/abs/1708.05237

90、如果你的分类精度不够是因为有两类或者多类太相近造成的,考虑使用其他softmax,比如amsoftmax。
各种魔改的softmax能更好的增大类间差距。

91、可以适当使用1N卷积。为什么要提这一点呢,这是因为1N卷积可以减少计算量,并且1N卷积可以在某个方向强调感受野,也就是说假如如果你要对一个长方形形状的目标进行分类,你可以使用1N的卷积核搭配3*3的卷积核对长边方向设定更大的感受野,或许可以获得泛化性能的提升

92、ACNet结构。这个研究来自于ICCV2019,可以在33卷积的基础上加上31和13的旁路卷积核,最后在推理阶段把三个卷积核都fusion到33卷积核上,在许多经典CV任务上都可以获得大概1个点的提升。大家可以看看这篇文章解读,来自公众号AI科技评论。33卷积+13卷积+3*1卷积=白给的精度提升

93、优化器的选择。基本都是带动量的SGD。如果优化不动可以试试Adam。

94、使用了带backbone的网络,如训练VGG16-SSD建议选择finetune的方式,从头训练不仅费时费力,甚至难以收敛。

95、focal loss对于噪声的容忍是比较差的,当简单样本训收敛之后,难例里头噪声的比例开始提升,fl就容易去加强噪声的学习,反而bce一视同仁的做法,如果少量噪声会淹没在大量正例里头
像答主说的就是yolo选框引入的噪声。

96、自监督学习:
对此,自监督希望充分利用数据的自身信息,根据图像的结构或者特性,人为构造标签进行训练(这个过程被称为 pretext 训练)。pretext 训练完后,再让模型在有监督的数据集上 fine-tune,完成相关任务。其实质是,尽可能人为地利用图像,学习图像中隐含的本质特征。再用这种本质特征作为先验知识,指导学习相关任务。

目前,现有工作一般是基于“剔除-重构”策略构造标签的。模型学习需要图像中某方面特征时,就将该部分特征从原图中剔除掉作为标签,再将被剔除掉部分特征的图像作为模型的输入,训练模型重构被剔除的部分(标签),从而学习到该方面的先验知识

97、
目前自监督学习的发展已经远超 LeCun 当时的总结,异彩纷呈~这里介绍一些常用的先验知识学习方法:

颜色信息(Image Colorization)
高分辨率信息(Image Superresolution)
相对位置(内容)信息(Image Inpainting / Context Prediction / Image Jigsaw Puzzle)
形变信息(Geometric Transformation Recognition)
关联信息(Image Clustering)

98、自监督学习中的相对位置信息:
第二种方法认为物体中不同局部的相对位置比纹理更能表达内容信息。例如,我们在观察狗的时候,会发现狗的头总在狗的身体上方。假如一种生物的身体在头的上方,那么这种生物肯定不是狗。要想学习这种物体隐含的相对位置信息,我们只需要在原图的基础上提取一个局部内连续的 9 块区域(一个中心区域及其 8 个方向的相邻区域),保区域内的纹理信息,并训练模型根据纹理预测区域在中心区域的哪个方向。这种策略在 Context Prediction 任务中很常见。

99、半监督学习
前面我们提到,在数据集中,标签的数量和标签蕴含的信息往往是有限的。而自监督希望充分利用数据自身,通过数据自身的结构或者特性,人为构造标签进行训练(这个过程被称为 pretext 训练)。
另外一些工作提出,在一部分数据集标签未知的情况下,我们是否能够根据已知样本的标签,人为构造 任务相关 的标签(通常被成为代理标签)进行训练呢?这就是半监督学习的初衷。

100、半监督学习:
这带来了两方面的好处:一方面,模型不仅能够正确解释有监督的数据,也能正确解释部分无监督数据了。另一方面,随着模型预测自信度的增强,模型会更少地给出模棱两可的预测,增强模型的鲁棒性(49% 是猫 51% 是狗的图像,图像稍加变化可能就会改变模型的分类结果;反之则更为稳定)。也有些工作解释说,强自信度的模型更加关注与 个类 有关的特征而不是与一些类有关的混合特征(强自信度的模型的分类边界不会穿过边际分布的高密度区域)。

101、当代研究生应当掌握的并行训练方法(单机多卡)
https://zhuanlan.zhihu.com/p/98535650

发布了71 篇原创文章 · 获赞 56 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/j879159541/article/details/104582785