b-up:Enzo_Mi:深度学习基础知识
上图中最后一行,第一个图像,因为目标像素(放大后,位于第1行第0列的像素)距离它最近的原图的像素的像素值为1,因此该目标像素取值为1。把原图分别进行 上采样方式1:最近邻插值方式2:双线性插值肉眼观看,方式2效果更好,没有锯齿状,更平滑虽然在上采样阶段,使用双线性插值可以得到比最近邻差值效果更好的 图片,但是对于语义分割任务并不合适。
1.最近邻差值(Neareast Neighbor Interpolation)


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

把原图分别进行 上采样
方式1:最近邻插值
方式2:双线性插值
肉眼观看,方式2效果更好,没有锯齿状,更平滑
虽然在上采样阶段, 使用双线性插值可以得到比最近邻差值效果更好的 图片,但是对于语义分割任务并不合适。

语义分割任务只能使用最近邻插值,因为其标注时 将目标对应像素点的值赋值为1,背景赋值为0, 边缘赋值为255, 当通过数据增强进行图片缩放时,使用最近邻插值 ,得到的新图像的语义标签中像素值只包含 0,1,255, 这个三个数值对语义分割网络训练具有意义, 其他数字没有意义。
当使用双线性插值,会导致语义标签图像中出现 如 111,126等数字,这些数字没有意义,对网络训练没有用处。
个人
疑惑:对于实例实例分割,可以使用双线性插值吗?
语义分割网络训练时, 可能进行图像缩放这一数据增强方法,因此只能使用 最近邻差值 防止语义标签出现 非规定中的数字。
但是对于实例实例分割,可以使用双线性插值吗?
最近使用YOLO-SEG, 发现将最近邻插值替换为 双线性插值, 精度有些提升。
2.双线性插值(bilinear interpolation)

将源图像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均被保留下来
参考资料
更多推荐


所有评论(0)