Maskrcnn实现笔记---roialign篇


前言

ROIAlign主要就是利用建议框在各个特征层上截取内容,然后再resize以用于后续classfiy与mask处理。

一、ROIalign的输入输出

请添加图片描述

二、与ROI pooling的比较

1.RoiPooling

在这里插入图片描述

上面是RoiPooling的示意图。假设前面建议框预测出的位置就是和真实框一样,如图所示,大小为[665,665],这个建议框所在的特征曾上压缩比为32,则它在这个特征层上大小为[20.78,20.78],rool poolling需要截取后的特征,截取的特征大小肯定是整数(一个个像素点),所以roi pooling的做法就是直接把大小取整,变为[20,20]。截取出来之后还会有个resize,又会出现小数,做法同样是取整。
这种做法会导致截取出来的特征图和原图的位置有偏移,对于分类之类的任务来说无所谓,但是对于mask rcnn这种网络来说,会影响预测效果。

2.RoiAlign

在这里插入图片描述
roi align流程:假设需要截取的特征在原图大小还是[655,655],则其在特征图上带浮点数,不取整。对应的特征图还会有个resize操作,20.78/7=2.97,也就意味着应该每2.97×2.97pool成一个像素点。
roi aign的做法是,在特征图上的[20.78,20.78]的框中分割出7×7的网格,每个网格的大小也就是2.97*2.97了,需要做的就是求出2/97×2.97网格应该代表的像素值大小。
在这里插入图片描述
如上图所示,首先把[2.97,2.97]网格再分为4份,每份的中心点采用双线性插值法进行计算,这样就可以得到这四个点的像素值,然后去四个值中最大值作为这个网格的像素值。
这个做法相比取整直接pool精确不少。
当然上面画的图是刚好网格左上角点坐标为整数的情况,更大可能性是都是浮点数。总之建议框[y1,x1,y2,x2]定好了,转到特征图[y1/scale,x1/scale,x2/scale,y2/scale]坐标也定好了,那么就分成需要的网格数:7×7或14×14,网格再分成四份,中心点双线性插值得像素值,最后四个取最大作为网格像素值就行。

三、实现流程

1.输入

首先得到一些必要的信息
输入roi,img_meta和feature_maps

2.建议框判断

判断建议框与哪个特征层相对应
由于batch_norm或者其他的原因,导致rpn虽然会对锚框位置进行修正,但是大小不会修正过大,所以不同特征层上建议框大小相差还是挺大。可以根据建议框的面积判断它属于哪个特征层上的。

3.截取

根据建议框的坐标在对应的feature_map上进行截取并resize成需要的大小,lable和boxes:7×7,mask14×14。

总结

似乎不同源码写的这个类会有些不一样,之后看看其他的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值