3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YoloXモデルのCoreML変換

Last updated at Posted at 2024-07-19

ObjectDetectionをアプリに実装するときに大体のYOLOモデルはGPLv3ライセンスで配布しており、アプリは配布したいけどコードの公開はしたくないケースが業務ではままあります。

そろそろ業務アプリで使う必要がありそうなので、さてどうしようかと思っていたところタイムリーにApache2ライセンスのYoloXにCoreML変換のPRが寄稿されました。

試しに動かしてみたところ、エラーになります🤔
PRにコメントを投稿してみましたが修正いただけないこともあり、気になる点が多々ありましたので必要な部分以外は書き直してみました。

最終的に下記のコード以外は大体書き直しました。

class YOLOXDetectModel(nn.Module):
    """Wrap an Ultralytics YOLO model for Apple iOS CoreML export."""

    def __init__(self, model, im, num_of_class):
        """Initialize the YOLOXDetectModel class with a YOLO model and example image."""
        super().__init__()
        _, _, h, w = im.shape
        self.model = model
        self.nc = num_of_class  # number of classes
        self.normalize = torch.tensor([1.0 / w, 1.0 / h, 1.0 / w, 1.0 / h])

    def forward(self, x):
        """Normalize predictions of object detection model with input size-dependent factors."""
        out_pred = self.model(x)
        xywh = out_pred[:, :, :4][0]
        objectness = out_pred[0][:, 4:5]
        class_conf = out_pred[0][:, 5:5 + self.nc]
        class_scores = objectness * class_conf
        return class_scores, xywh * self.normalize

その他の、YoloXを扱う上での注意点としてはモデルの入力に正規化が必要ない点です。
ですので、CoreMLに変換する際、scaleを設定するとドハマリするのでお気をつけてください。

出力したモデル

スクリーンショット 2024-07-19 23.33.38.png

コード

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?