留个笔记自用
NAS-FCOS: Fast Neural Architecture Search for Object Detection
做什么
跟FCOS的论文一样,做的是非常普通的目标检测问题,这里就不做解释了
做了什么
首先。有很多东西需要先行理解。。。
FPN(Feature Pyramid Networks)
这个玩意叫特征金字塔,简单来说呢它主要是认为浅层网络和深层网络分开来可以更好的检测出细节信息和大体信息,像本文的物体检测中就可以理解成为不同维度的特征提取的是不同大小的目标检测信息,这样做的意义就是让语义信息包含更多的细节信息吧。
图(a)的意思就是构造一个特征金字塔,首先得到一张图,用放大或者缩小的各种方法得到很多张不同维度的图,用同一个模型对它们进行特征提取后得到不同维度下的特征,使用这些特征来各自进行预测。
图(b)的意思就是只拿一张图片作为输入,经过模型处理后得到最后的一张feature map,然后直接用这张feature map来进行预测,就像keras.applications提供的VGG和Resnet之类的一样
图©的意思就是只拿一张图片作为输入,也是经过模型处理后得到很多层的feature map,但这里不单单只拿最后一层feature map来进行预测,而是对每层都进行预测,比如图片中有很多个大小不同的目标,就可以用不同层来进行预测。
图(d)就是最后的FPN了。可以把它看成三个部分,首先就是左边的向上层,就是利用CNN模型得到逐层feature map,然后是右边的向下层,也没什么特殊的,就是反卷积模型得到逐层feature map。然后是两边的关联部分,
这里采取的是左边浅层的feature map进行1×1卷积降维,右边深一层使用反卷积升维,使他们具有同样的维度大小,将二者元素相加构成右边的低层。得到右边所有层,对每层进行3×3卷积后得到最后的各层predict。
FCOS
首先使Backbone和Feature Pyramid部分,其实就是上面的FPN,比如P3就是采用C3使用1×1卷积再元素加P4上采样的结果,而P6和P7则是通过P5再进行CNN特征提取得到的,然后对P7~3进行3×3卷积后得到各层的head。而右边这一部分就是一个三分支的头检测网络罢了,它的主要思路跟FPN类似,就是结合网络的浅层和深层特征,然后在不同分支中输出不同大小的目标。
预测端三分支,classfication、center-ness、regression
(1)classfication,这里的H×W是特征的大小,可以通过
这里的s是stride,然后利用这个公式转换到原图,这里就是对原图像中每个点的类别进行分类,且是C个二分类,如若这个点落入该类的框内则为真实样本
(2)Center-ness,这里是用来计算每个点和目标中心点的距离,用来抑制一些预测点和中心点较远的情况
(3)regression
这里回归预测的是4个值(l, t, r, b),分别是框内某个点离框左框边的距离,离上框边的距离,离右框边的距离,离下框边的距离,然后是LOSS:
这里Lcls是分类的focal loss,其实就是在普通的交叉熵上增加了几个因子,使loss更加关注一些难以分类的数据。Lreg是回归的iou loss
p(x,y)就是原图上的位置(x,y),c(x,y)就是C类的二分类,使用这两个进行分类损失训练。回归训练只训练c(x,y)>0的情况也就是只训练点在框内的情况,然后对(l, t, r, b)和预设的GT进行训练
NAS(神经网络架构搜索)
简单来说就是将网络从人工设计的方式变成让机器自动设计,假若我们有左边的一个baseline网络,要对它结构进行改进来让它更强大,让它自动设计成右边的网络模式,并且自动设计各种参数。
首先要确定一个搜索空间,也就是先自造一个普通网络,告诉NAS它可以发现什么样的神经网络结构,比如某一层使用CNN,某一层使用pooling,也可以让NAS不能更改网络结构,只能更改内部神经单元的参数,CNN的过滤器、宽度等等
然后就是第二步,选取某一种优化算法开始进行网络优化,对网络结构改变或者对单元内部参数的一些改变。然后第三步就是评测这个网络的好坏,充当整个神经网络的loss来进行训练,至于评测的方法一般是找一个小型的训练集使用当前结构的网络进行训练,再对训练好的网络进行测试,得到训练的时间和网络准确度,由这两个作为最终的reward或者说是LOSS对NAS控制器进行重构和择优。
怎么做
整体结构上来说也是分为两个部分,一个是左边的FCOS部分,一个是右边的Head部分。
首先是FCOS部分的搜索,由image老套路得到C5、C4、C3、C2,首先将他们都加入特征池等待搜索
然后根据这个搜索策略去进行网络结构搭建,可以由一个特征层也可以由两个特征层,最后搜索出来最好的结构是
然后找到最后的三个特征提取P3、P4、P5,并且对P5进行卷积后得到P6和P7,至此得到5个特征P,这里跟FCOS相似。然后是由P到Y的过程也就是经过head部分,这部分也是用NAS来搜索,head由6个op组成,搜索空间跟FCOS搜索空间类似。最后的结果为
最后是右边的Head部分,这里由两段组成,分别为independent part和shared part,也就是共享权重部分和不共享权重部分,然后这里也是靠NAS搜索的。然后就是最后的cls,ctr,reg部分,跟FCOS一模一样,甚至连搜索策略R(a)也跟FCOS的LOSS有异曲同工之妙
总结
1.看这篇主要就是为了了解一下它的各种组成部分,NAS和FPN,但感觉不看trick的话没有什么太大创新点,所以粗略了解就差不多了