1.最近邻差值(Neareast Neighbor Interpolation)

插值算法 | 最近邻插值法_哔哩哔哩_bilibili

上图中最后一行,第一个图像,因为目标像素(放大后,位于第1行第0列的像素)距离它最近的原图的像素的像素值为1,因此该目标像素取值为1。

把原图分别进行 上采样

方式1:最近邻插值

方式2:双线性插值

肉眼观看,方式2效果更好,没有锯齿状,更平滑

虽然在上采样阶段,  使用双线性插值可以得到比最近邻差值效果更好的 图片,但是对于语义分割任务并不合适。

语义分割任务只能使用最近邻插值,因为其标注时 将目标对应像素点的值赋值为1,背景赋值为0, 边缘赋值为255, 当通过数据增强进行图片缩放时,使用最近邻插值  ,得到的新图像的语义标签中像素值只包含 0,1,255,   这个三个数值对语义分割网络训练具有意义, 其他数字没有意义。

当使用双线性插值,会导致语义标签图像中出现  如   111,126等数字,这些数字没有意义,对网络训练没有用处。

个人

疑惑:对于实例实例分割,可以使用双线性插值吗? 

语义分割网络训练时,  可能进行图像缩放这一数据增强方法,因此只能使用 最近邻差值 防止语义标签出现  非规定中的数字。 

但是对于实例实例分割,可以使用双线性插值吗? 

最近使用YOLO-SEG, 发现将最近邻插值替换为 双线性插值, 精度有些提升。

2.双线性插值(bilinear  interpolation)

插值算法 |双线性插值法_哔哩哔哩_bilibili

将源图像t0进行上采样, 使用双线性插值, 首先:需要将放大的图像(t1)等比例缩小为源图像尺寸t3。

缩放为源图像尺寸大小,需要进行对齐,有两种对齐方式:

1.角对齐:需要将 t3与t0的网格中心点对齐, 这种需要t1缩小的尺度更大

2.边对齐,需要将t3与t0的边对齐,这种需要t1缩小的尺度比角对齐小一些

具体可以见pytorch官网的说明

该链接的内容

注意:像素值分别为v1,v2,v3,v4

 代码示例

角对齐

边对齐

角对齐

上述两段代码。第一个自已编写, 第二个是调用函数库

注意:这里以最左上角像素点的中心点的坐标作为原点坐标(0,0),而不是边界框的角点

边对齐

使用pytorch函数

3.双三次插值算法(Bicubic)

双: X,Y两个方向

三次:计算目标像素点周围像素权重时,使用三次项公式计算周围权重

 

与上述两种插值方法  初始步骤相同,将放大的图像t1进行缩小,缩小为源图像t0尺度t2,然后对照源图像,计算目标像素点

上图中, 发现t2的一个像素点在t0中,刚好位于t0中四个像素点之间的中心

双三次插值,取周围16个像素点的值进行计算

上图:

第一行表示 一维插值

第二行:二维差值,彩色点表示原图像素点,彩色点的高低表示该像素点的像素值,黑色点表示放大图像中的像素点,其高低表示所计算的采样值。

x只能表示 X或Y一个方向的距离

因此需要计算两次权重,分别表示X,Y方向

上图:右边第一个小图,

蓝色点(目标点)与源图像素的一个红点重合, X,Y方向距离均为0, 则该源图的像素点在X或Y方向的对应的权重为1,

右边第二个小图,蓝色点(目标点)与源图像素的一个红点在X,Y距离上均为1, 则该源图的像素点在X或Y方向的对应的权重为0

因此:参考上图的曲线图

在X方向距离为0,则在X方向取得权重为1;

在X方向距离为1,则在X方向取得权重为0;

在X方向距离为2,则在X方向取得权重为0;

根据距离的不同(0.5,1.5等)分别选择权重计算公式W(x)的三个不同分段函数

 

将在X,Y方向   计算出的16个值相加得到3.5 

使用个人编写程序, 以及pytorch 程序进行验证 

4.IoU与NMS

NMS 非极大值抑制 | IoU 交并比_哔哩哔哩_bilibili

 待看(v),2025.7.22观看

IOU有两种特殊情况

情况1:两个识别框重合,此时IOU等于B的面积除以A的面积

情况2:两个识别框不重合,此时IOU等于负数, 因为负数不需要,所以被赋值为0,即这种情况认为IOU为0

 

上述操作去除冗余的bbox

若依多个bbox,则反复重复步骤1,2,直到候选区没有bbox。

因为IOU均小于阈值,所以没有冗余bbox,

最终5个bbox均被保留下来 

 

参考资料

1.插值算法 | 最近邻插值法_哔哩哔哩_bilibili

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐