1. 概要
Windows 11 の WSL2 上の Ubuntu 22.04 で Ultralytics の Segmentation を実行しました。Segmentation は Object Detection と異なり、検出対象となる物体の周りの矩形領域だけでなく、検出対象の形状に沿った境界線まで検出します。
今回は、学習済みのネットワークを使用した Segmentation を実行しただけで、training は試していません。
プログラムは NVIDIA GeForce GTX 1650 (GPGPU) をセットしたデスクトップパソコン ESPRIMO WD2/H2 で実行しました。使用したデスクトップパソコンのスペックはこちらのページの末尾の表に記載しました。
2. 準備
こちらのページに記載した手順で Windows 11 の WSL2 上の Ubuntu 22.04 に Ultralytics をインストールします。
3. Segmentation の実行
3.1. YOLOv8 の Segmentation を実行した場合
Ultralytics の Segmentation のページの CLI コマンドの例を参考に、YOLOv8 の Segmentation を実行しました。
Windows 11 側からも参照可能なフォルダ C:\dev\data\custom_data に対象となる 16 枚の画像を置いて、Segmentation を実行する下記のコマンドを実行しました。Windows 11 のフォルダ C:\dev\data\custom_data は WSL2 上の Ubuntu からは /mnt/c/dev/data/custom_data として参照できます。
fukagai@ESPRIMOWD2H2:~$ yolo segment predict model=yolov8n-seg source= /mnt/c/dev/data/custom_data/ Ultralytics YOLOv8.2.48 🚀 Python-3.10.12 torch-2.3.0+cu121 CUDA:0 (NVIDIA GeForce GTX 1650, 4096MiB) YOLOv8n-seg summary (fused): 195 layers, 3404320 parameters, 0 gradients, 12.6 GFLOPs image 1/16 /mnt/c/dev/data/custom_data/Birds-Tobagawa-2023-02-19.JPG: 448x640 1 person, 9 birds, 46.4ms image 2/16 /mnt/c/dev/data/custom_data/GreyHeron-DSC00089-min.JPG: 448x640 1 bird, 8.7ms ... image 16/16 /mnt/c/dev/data/custom_data/TwoTurtleDoves-DSC00208-min.JPG: 448x640 2 birds, 69.2ms Speed: 2.9ms preprocess, 30.0ms inference, 8.4ms postprocess per image at shape (1, 3, 448, 640) Results saved to runs/segment/predict2 💡 Learn more at https://docs.ultralytics.com/modes/predict
下の画像は入力として使用した 16 枚の画像です。
下の画像は上記のコマンドで得られた Segmentation の結果の画像になります。
下の画像は下記のコマンドで得られた Segmentation の結果の画像になります。先ほどのコマンドの例と異なり、学習済みネットワークの model として yolov8n-seg よりもサイズが大きな yolov8x-seg を指定しています。yolov8n-seg による Segmentation の結果に比べ、誤検出と検出ミスが減っています。
fukagai@ESPRIMOWD2H2:~$ yolo segment predict model=yolov8x-seg source= /mnt/c/dev/data/custom_data/ ...
出力画像からラベルと矩形領域を取り除く際は、下記のコマンドの例のように show_labels=False show_boxes=False を追加します。
fukagai@ESPRIMOWD2H2:~$ yolo segment predict model=yolov8x-seg source= /mnt/c/dev/data/custom_data/ show_labels=False show_boxes=False ...
下の画像は上記のコマンドで得られた出力画像です。一つ目の画像だけ表示しました。
3.2. Segment Anything Model による Segmentation を実行した場合
Ultralytics の Segment Anything Model のページに記載された学習済みネットワークを指定して、Segmentation を実行しました。上記 3.1. の Segmentation と異なり、画像内の全ての物体と背景を Segmentation の対象としています。
上記 3.1. の例の一つ目の画像のみを対象としています。
下記のコマンドの例のように学習済みネットワークとして mobile_sam.pt を指定した場合
fukagai@ESPRIMOWD2H2:~$ yolo predict model=mobile_sam.pt source=/mnt/c/dev/data/custom_data/Birds-Tobagawa-2023-02-19.JPG show_labels=False show_boxes=False
下の画像のようになりました。
学習済みネットワークとして mobile_sam.pt よりも大きな sam_b.pt を指定した場合
fukagai@ESPRIMOWD2H2:~$ yolo predict model=sam_b.pt source=/mnt/c/dev/data/custom_data/Birds-Tobagawa-2023-02-19.JPG show_labels=False show_boxes=False
下の画像のようになりました。mobile_sam.pt を使用したときに比べ、水面に反射した水鳥の姿まで Segmentation の対象となっていますが、mobile_sam.pt が検出できていた水鳥の一羽を検出できていません。
学習済みネットワークとして sam_b.pt よりも大きな sam_l.pt を指定した場合
fukagai@ESPRIMOWD2H2:~$ yolo predict model=sam_l.pt source=/mnt/c/dev/data/custom_data/Birds-Tobagawa-2023-02-19.JPG show_labels=False show_boxes=False
下の画像のようになりました。mobile_sam.pt, sam_b.pt を使用したときに比べ、水面を含むより多くの要素が Segmentation の対象となっています。