Closed5

DeepLabV3Plusの推論処理

0y00y0

前処理

# Normalization
prepimg_deep = cv2.resize(color_image, (256, 256))
prepimg_deep = cv2.cvtColor(prepimg_deep, cv2.COLOR_BGR2RGB)
prepimg_deep = np.expand_dims(prepimg_deep, axis=0)
prepimg_deep = prepimg_deep.astype(np.float32)
cv2.normalize(prepimg_deep, prepimg_deep, -1, 1, cv2.NORM_MINMAX)
  • cv2.resize: 画像サイズを256x256にリサイズ
  • cv2.cvtColor: 色空間をBGRからRGBに変換
  • np.expand_dims: バッチ次元を追加
  • astype: データ型をfloat32に変換
  • cv2.normalize: 画像の正規化(-1から1の範囲)
0y00y0

推論

# Run model - DeeplabV3-plus
interpreter.set_tensor(input_details, prepimg_deep)
interpreter.invoke()
  • set_tensor: 入力テンソルに前処理済みの画像をセット
  • invoke: モデルの推論を実行
0y00y0

後処理

# Get results
predictions = interpreter.get_tensor(deeplabv3_predictions)[0]

# Segmentation
outputimg = np.uint8(predictions)
outputimg = cv2.resize(outputimg, (camera_width, camera_height))
outputimg = Image.fromarray(outputimg, mode="P")
outputimg.putpalette(DEEPLAB_PALETTE)
outputimg = outputimg.convert("RGB")
outputimg = np.asarray(outputimg)
outputimg = cv2.cvtColor(outputimg, cv2.COLOR_RGB2BGR)
imdraw = cv2.addWeighted(color_image, 1.0, outputimg, 0.9, 0)
  • get_tensor: 推論結果(セグメンテーションマップ)を取得
  • np.uint8: データ型をuint8に変換
  • cv2.resize: オリジナルの解像度にリサイズ
  • Image.fromarray, putpalette, convert: カラーパレットを適用
  • cv2.addWeighted: オリジナル画像とオーバーレイ
このスクラップは2023/09/28にクローズされました