yolov2论文阅读

摘要:

1. yolov2:改进自yolo,现在效果和faster rcnn/ssd类似,但是速度很快(67fps时可以达到76.8on voc datasets)。

2. 我们在yolov2基础上把detection和classification融合到一起后得到了yolo9000,其数据集是coco和imagenet(只有分类标注)的合体(共200类,只有44个类里面有检测框标注,最后那44类19,7map,剩下的156类16map),我们的这个方法可以测多余9000个类

正文:

better:

yolo原本分类很好,但是检测位置准备度和召回率不高。现在一般要表现很好我们一般会用更深的basenet,但是为了保证速度我们不那么做,我们用很多小技巧来提升:

1.batch normalization:我们给yolo的每个卷积层都加了yolo,省略其他正则化方式如dropout,这个举措是我们的map加了2%

2.high resolution classifier:一般检测模型用的预训练模型都是imagenet上的分类模型。但是原始yolo用的是AlexNet的分类模型做预训练模型,他的输入图片大小是256*256,而yolo里面分类用的是224*224,检测用的是448*448.我们认为直接拿那个预训练模型是有问题的,所以首先我们把原来的AlexNet作为预训练模型输入448*448的图片训练10个epoch在imagenet上,即我们先对参数进行了调整使适应新的图片分辨率,然后拿这个作为预训练模型给检测任务,这个举措让我们的map增加了4%。

3.convolution with anchor boxes: 学习faster Rcnn的RPN,我们去掉了yolo最后的全连接层转而用anchor box来进行坐标预测。首先我们移掉一个pool使得输出的featuremap更大,其次我们把输入图片改为416*416而不是448*448,因为我们想要出来的featuremap长宽是奇数的这样就会有一个中心格子。因为我们相信达吾提的图片物体在中间的概率比较高,feat_stride32,所以我们得到的featuremap是13*13的。我们之前yolo时是格子类别由另一条支线得到,每个bounding box的只产生一个confidence,现在我们每个buonding box自己预测自己的类别。所以每个bounding box会出来一个最大IOU,为物体前提下某类别的概率,以及四个位置坐标。用了这个方法之后我们的准确度降低了一点点,但是本来最多能出来98个buonding box(7*7*2)现在我们能预测上千(本来在69.5map是recall是81%,现在能在69.2map下recall88%)

4.dimension clusters:我们在把RPN方法引进yolo时碰到两个问题,首先,选怎么样的prior box是自己手选的,选到越好的当然能让学习更简单,所以我们这里用k-means聚类训练集的gt去找到最好的prior box。距离用1-IOU度量(类内框和该类中心框的距离),这里我们的k是经过实验的从1-15,发现5最好(使得类内平均IOU最大并且模型复杂度不会太大),这样的出来的prior box 大部分是瘦长的。实验来看,我们有聚类得到的5个prior box能和手选的9个prior box起到类似的实验效果,我们也用9个时avg iou提升了7个点

5.derect location prediction:回到4提出的第二个问题:网络特别在前期会不稳定(主要来源于x,y的预测不稳定)


t的一些小小改动会影响xy比较大。

因为上面这个公式对anchor box没有限制(跟gt的分布没有关系),所以需要比较多时间去找到对的anchor box.所以我们还是采用yolo的老办法找prior box,


其中cx,xy是指这个格子 的左上角坐标,每个格子产生5个prior box,t是bounding box到cell的offset,pw,ph是bounding box的长宽。因为对anchor box有限制再加上4的操作使得map增大了5%(其实不是很懂5)

6.fine-grained features :像SSD 或者Faster Rcnn都有从不同featuremap拿出来使得适应不同尺度。我们弄了一个passthreough层合并13*13*2048的和26*26*512的两个featuremap层。方法是把26的下采样成13的然后和13的合并(routre 层)。这个举措得到1%的map进步

7.multi scale training:为了适应不同尺度的输入,我们从320到608每32一个单位加尺度,即前十轮320*320,接着10论352*352...直到最大608然后循环,在训练的时候各种尺度都接触到(以32为单位是因为最后一个featuremap是1/32的),目标越小测试越快,算是一个速度与精度的平衡,小图比如288*288可以达到90fps,精度和fast rcnn差不多大图上我们能得到78.6map并且也能实时。

faster:

用GoggleNet代替VGG16,更快但是精度稍微差了一点

1.darknet-19:19个卷积层和5个maxpooling


2.training for classification:先训练一个darknet的1000分类,图片大小224*224.然后接着我们又用448*448的图片finetune 10 个epoch分类,然后再拿去做的检测的预训练模型

3.training for detection:将上面的分类模型最后一层卷积层移去,加上3个卷积层kernel大小3*3 output_num 1024.最后再接一个kernel为1*1的卷积,output_num为我们检测需要的output_num.比如我们每个Cell5个box,每个box要记5个数,共20类。那么我们需要125个output(5*5*5),我们也用上了上面说的passthrough layer,即把最后两层3*3的卷积层连起来

stronger:

即怎么把仅有分类标注的数据集用上。当此图有检测框时,我们在位置和分类都会反向传播。但是此图没有检测框标注只有分类标注时,我们只反向传播分类那部分

遇到的困难,首先coco和imagenet的标注各种不一样,比如imagenet那边有阿拉斯加,有秋田犬,coco那边是狗。那我们就不能用softmax,因为这些分类并不是互相冲突的,我们用很多二分类去做。

我们要画一个imagenet类别的树状图(wordtree)(通过语义辨析吧),最后比如非常肯定是秋田犬的就秋田犬,不是很肯定是哪个犬的就是狗.我们稍微平衡了下使得inmagenet和coco的图片比例为4:1

When it sees a classification image we only backpropagateclassification loss. To do this we simply find the boundingbox that predicts the highest probability for that class and we compute the loss on just its predicted tree. We alsoassume that the predicted box overlaps what would be the ground truth label by at least .3 IOU and we backpropagateobjectness loss based on this assumption.这段不是很懂,大概意思是只有分类的图他没有gt,那么我们就用我们的网络跑一个框出来并且认为这个框和gt的IOU应该至少有0.3。


这两个数据集的合并有半监督的意思。










猜你喜欢

转载自blog.csdn.net/xie_qiuqiu/article/details/80866223
今日推荐