1 简介目标检测中的集合预测
   
常见的目标检测方法如Faster-RCNN,RetinaNet等都是通过预设anchor的方式进行预测,这种方式本质上就是类似滑动窗口的一种模式。而使用这种滑动窗口的方式其实是人为地给检测任务降低难度,这也确实是早期的传统方式做模式识别的一种主流方式。
而基于集合预测的方式就显得更简单粗暴了,输入一副图像,网络的输出就是最终的预测的集合(也不需要任何后处理)能够直接得到预测的集合就已经达到了检测的目的了。但这种方式从直觉上看会比基于滑动窗口的方式更难。基于滑窗的方式就像人为地给了一个梯子,帮助网络去越过障碍,而集合预测就更需要网络真正懂得图像的语义而直接越过障碍。
    集合预测带来的最大好处就是训练与预测变成真正的端到端,无需NMS的后处理,十分方便。同时,也不用人为地预设anchor size/ratio 了。
    
     坏处就是这玩意儿能收敛吗?
    
    
    
    2 非极大值抑制(NMS)
   
先简单介绍下NMS吧,一句话解释就是常见的检测方法会产生大量的冗余框,常用的去掉冗余框的方法就是NMS。如下图所示
     
   
每个框有一个分类置信度分数以及框的坐标。算法思路如下,每次从剩下的框中选择分数最大的框作为最终的一个输出并移除它,与该框IoU大于给定阈值的都从剩下的框中移除,一直重复此操作直到剩下的框全被移除。那么每次中间选择的最大分数的框就是最终结果。如果有多个类的话,每个类分开计算。
    
    
    3 Relation Network
   
之前试图直接移除NMS的工作也有很多,这里选一个比较有代表性的简单说一下。Relation Network 结构如下
     
   
该文有两个点,一是使用relation模块来建模实例之间的关系,其实也就是类似Non-Local那一套。二是使用relation模块来消除NMS。这里仔细说下第二点吧。
    仔细分析NMS算法的过程可以得到,NMS的过程其实用到了两个信息,一个是不同框之间的
    
     分数关系
    
    ,二是不同框之间的
    
     几何关系
    
    。也就是说如果现在有个万能黑盒,给它输入分数关系与几何关系,那它也就应该可以有NMS的效果。因此作者在这里设计了一个二分网络,用来预测每个框它是否是重复框。输入有分数信息,该框的特征向量,以及该框的实际位置信息,输出就是该框是否为重复框的分数
    
     
      
       ∈ [ 0 , 1 ] \in[0,1]
      
      
       
        
        
        
         ∈
        
        
        
       
       
        
        
        
         [
        
        
         0
        
        
         ,
        
        
        
        
         1
        
        
         ]
        
       
      
     
    
    。网络结构如下
   
     
   
那训练的时候怎么决定谁才是非重复框,谁是重复框,也就是怎么给这个二分类网络分配GT呢?
    这里是采用的
    
     动态分配
    
    的方式,过程如下:将所有预测框与所有GT框算IoU,对每个GT框选择IoU大于阈值的一些预测框,相当于根据IoU将预测框分为GT框数量个组,然后在每个组中选择预测分数最大的那个框为非重复框,其余全都为重复框。
   
    在预测时需要将
    
     
      
       s 0 s_0
      
      
       
        
        
        
         
          s
         
         
          
           
            
             
              
              
              
               
                0
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    ,
    
     
      
       s 1 s_1
      
      
       
        
        
        
         
          s
         
         
          
           
            
             
              
              
              
               
                1
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    乘起来作为该框的分数,一个质量好的框应该是
    
     
      
       s 0 s_0
      
      
       
        
        
        
         
          s
         
         
          
           
            
             
              
              
              
               
                0
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    ,
    
     
      
       s 1 s_1
      
      
       
        
        
        
         
          s
         
         
          
           
            
             
              
              
              
               
                1
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    都要大。如果
    
     
      
       s 0 s_0
      
      
       
        
        
        
         
          s
         
         
          
           
            
             
              
              
              
               
                0
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    较大,
    
     
      
       s 1 s_1
      
      
       
        
        
        
         
          s
         
         
          
           
            
             
              
              
              
               
                1
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    较小,说明这很可能就是一个重复框,它们的乘积就很小,在输出最终结果的时候就会被排除,达到了NMS相同的作用。
   
    
    
    4 DETR
   
    DETR虽然不是最早预测集合的方式来检测,但应该是很有影响力的一篇文章了。介绍它之前先明确两中GT分配的方式,
    
     静态分配
    
    与
    
     动态分配
    
   
静态分配就是常见的FasterRCNN,RetinaNet,FCOS等这些方法中分配的方式,即GT的分配不依赖于网络的输出。相反,依赖于网络的输出就是动态分配,像Relation Network中二分类网络那里的分配,以及DETR中的分配方式。
下面简单介绍下DETR,下面是DETR的结构图
     
   
    transformer的后面的输出就是最终预测的结果,固定为100个预测结果也就说网络输出就是
    
     
      
       100 × 4 100\times 4
      
      
       
        
        
        
         1
        
        
         0
        
        
         0
        
        
        
        
         ×
        
        
        
       
       
        
        
        
         4
        
       
      
     
    
    和
    
     
      
       100 × ( C + 1 ) 100\times (C+1)
      
      
       
        
        
        
         1
        
        
         0
        
        
         0
        
        
        
        
         ×
        
        
        
       
       
        
        
       
      
     
    
   
 
