Closed5
DeepLabV3Plusの推論処理
はじめに
以下のリポジトリのコードを参考にします
MobileNetが特徴抽出に使われているっぽい
- 入力:[1,256,256,3]
- 出力:[1,256,256,1]
前処理
# 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の範囲)
推論
# Run model - DeeplabV3-plus
interpreter.set_tensor(input_details, prepimg_deep)
interpreter.invoke()
- set_tensor: 入力テンソルに前処理済みの画像をセット
- invoke: モデルの推論を実行
後処理
# 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にクローズされました