建官方網(wǎng)站的公司網(wǎng)推公司
基于C#部署YOLOv5目標檢測模型 核心技術(shù)深度解析
1. 智能圖像預(yù)處理:保持長寬比的縮放和填充策略
1.1 技術(shù)背景
在深度學(xué)習(xí)目標檢測中,模型通常要求固定尺寸的輸入(如320×320、640×640)。然而,實際應(yīng)用中的圖像尺寸往往是任意的,直接拉伸會導(dǎo)致圖像變形,影響檢測精度。因此需要智能的預(yù)處理策略。
1.2 算法原理
長寬比計算與決策
float hw_scale = (float)srch / srcw; // 計算高寬比
決策邏輯:
hw_scale > 1
:圖像高度大于寬度(豎圖)hw_scale < 1
:圖像寬度大于高度(橫圖)hw_scale = 1
:正方形圖像
豎圖處理策略(高 > 寬)
if (hw_scale > 1)
{newh = inpHeight; // 高度保持為目標高度neww = (int)(inpWidth / hw_scale); // 按比例計算新寬度Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh), 0, 0, InterpolationFlags.Area);// 計算左右填充left = (int)((inpWidth - neww) * 0.5);Cv2.CopyMakeBorder(dstimg, dstimg, 0, 0, left, inpWidth - neww - left, BorderTypes.Constant);
}
數(shù)學(xué)推導(dǎo):
原圖尺寸: H × W
目標尺寸: inpHeight × inpWidth
高寬比: hw_scale = H / W當 hw_scale > 1 時:
- 新高度: newh = inpHeight
- 新寬度: neww = inpWidth / hw_scale = inpWidth × W / H
- 左填充: left = (inpWidth - neww) / 2
- 右填充: inpWidth - neww - left
橫圖處理策略(寬 > 高)
else
{newh = (int)(inpHeight * hw_scale); // 按比例計算新高度neww = inpWidth; // 寬度保持為目標寬度Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh), 0, 0, InterpolationFlags.Area);// 計算上下填充top = (int)((inpHeight - newh) * 0.5);Cv2.CopyMakeBorder(dstimg, dstimg, top, inpHeight - newh - top, 0, 0, BorderTypes.Constant);
}
1.3 填充策略詳解
BorderTypes.Constant 填充
- 使用常數(shù)值(默認為0,即黑色)填充邊緣
- 不會引入額外的圖像信息,避免干擾模型判斷
- 在YOLOv5訓(xùn)練時也采用相同策略,保持一致性
居中填充算法
// 左右填充(豎圖)
left = (int