Segmantation Anything 2を見てください。
https://github.com/facebookresearch/segment-anything-2
の実装が、いままでの実装の多くを無意味にしています。
まずは、segment-anything-2を見てください。
物体のtracking のタスクも、segment-anything-2が使える場合には、それで十分になってきているかもしれません。(ここまで2024年8月追記)
ライブラリを調査するためのアドバイス
・よく使われているカメラの場合には、そのカメラでの利用例が開発元あるいは第3者によって公開されていることが多い。
それをまず調査する。
・画像認識関係の場合だと、組み込み対象のデバイスの開発元(例:NVIDIA)がさまざまなアプリケーションを提供している。
それらに利用したいライブラリが紹介されていることがある。
・推論エンジンに提供されているmodel zooにある学習済みのモデルとアルゴリズムを調べてみよう。
例:OpenVino
・機械学習分野のフレームワークでの状況を調査する。
segmentation の種類
semantic segmentation
instance segmentation
panoptic segmentation
paper with code
Paper with code のサイトでは、それぞれのタスクに対してSotAのアルゴリズムを紹介している。
気にするポイント
- セグメンテーションの分類
例:MS COCOの80カテゴリ
例:Cityscapes Datasetのカテゴリ
例:走行可能範囲のセグメンテーション
あなたの実現したいセグメンテーションは何ですか。 - セグメンテーションの実行時間
- セグメンテーションの解像度
- セグメンテーションの精度
- 学習のしやすいさ
通常カメラでのセグメンテーション
Yolov8
https://docs.ultralytics.com/ja/
https://github.com/ultralytics/ultralytics
Yolov8では、物体検出の他にインスタンスセグメンテーションが追加になっている。
MS-COCO の80カテゴリの検出とインスタンスセグメンテーションとができる。
Youtube YOLOv8 COMPLETE Tutorial | Object Detection | Segmentation | Classification
StereoLabs ZED
How to Use YOLO v8 with ZED in Python
ZED のカメラを使ってYolov8を動作させるためのインスール手続きとかが書かれている。
StereoLabs ZED SDK Image segmentation using yolov8 with zed 2i python
セグメンテーション後のマスクを取得する部分には、さらに調査が必要そうだ。
Yololv8のセグメンテーションには、ZED-SDK のbindingがある。
https://github.com/stereolabs/zed-sdk/tree/master/object%20detection/custom%20detector/python/pytorch_yolov8_seg
そのため、ZED2iのカメラがあれば、YOLOV8でのセグメンテーションを動作させることができる。
StereoLabs Mask R-CNN How to Use PyTorch with ZED
なお、Mask R-CNN は、画像に存在する物体のクラス名を特定する一般物体検出と、画像内のピクセル単位でクラス分けを行うインスタンスセグメンテーションを同時に行う手法です。
3D Mask R-CNN using the ZED and Pytorch
NVIDIA
Youtube NVIDIA Jetson AI Fundamentals - S3E6 - Semantic Segmentation
NVIDIA BI3D を使用したステレオ入力における近接セグメンテーション
「私たちは、DNN の推論に TensorRT を DLA で使用しており、GPU とは異なるハードウェアの多様性を提供し、フォールト トレランスを向上させつつ、他のタスクを GPU からオフロードしています。DLA は Jetson AGX Orin で BI3D に対して約 46fps を提供し、3 つの DNN で構成され、ロボティクス アプリケーションにおいて 30ms 未満の低レイテンシを提供しています。」 と NVIDIA のロボティクス プラットフォーム ソフトウェアの副社長である Gordon Grigor は述べています。
衝突を防止するためには、フレームレートを高くする必要があります。
しかも、ハードウェアの余力を奪わない実装が必要になります。
NVIDIAのJetson AGX OrinのもつDLA(Deep Learning Accelerator) を利用することは、GPUの余力を確保することにつながります。
Github BI3D
Bi3D: Stereo Depth Estimation via Binary Classifications
Abhishek Badki, Alejandro Troccoli, Kihwan Kim, Jan Kautz, Pradeep Sen, and Orazio Gallo
IEEE CVPR 2020
pdf Bi3D: Stereo Depth Estimation via Binary Classifications
Jetson Nano の利用例Jetson nanoでPerson Part Segmentation検証
引用元
HarDNet のアルゴリズムを元に再学習している。
Youtube Real-Time Instance Segmentation Using Jetson Xavier
Youtube Semantic segmentation with Jetson Nano using RealSense camera
NVIDIA Semantic Segmentation with SegNet
NVIDIA segnet のリアルタイムのデモRunning the Live Camera Segmentation Demo
github SegNet_PyTorch
github segnet
This repo is not supported anymore
pdf SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
segnetは2015年発表の実装である。
2023年の時点で利用するには、古い実装である。そのため、出力画像の解像度も粗く、領域が染み出したりしている。
NVIDIA Free Space Segmentation
NVIDIA PeopleSemSegNet Model Card
github YOSO
You Only Segment Once: Towards Real-Time Panoptic Segmentation, In CVPR 2023.
pdf You Only Segment Once: Towards Real-Time Panoptic Segmentation
V100 という"初の Tensor コア GPU"を使うと、20fps前後のフレームレートがでているとのこと。
CVPR 2023 pdf MSeg3D: Multi-modal 3D Semantic Segmentation for Autonomous Driving
github LiDARSeg3D
引用元
LiDARとカメラ画像とがあるときのmulti-modalな手法ですね。
yolov8 にはセグメンテーションがある。
yolov8の解説記事
物体検出モデルYOLOv8の紹介: 動作手順や過去のバージョンとの比較
yolov7にもセグメンテーションがある。
Yolov7でインスタンスセグメンテーション
【物体検出2022】YOLOv7まとめ第7回 Instance segmentationを実装する
github https://github.com/WongKinYiu/yolov7
関連するgithub https://github.com/laitathei/YOLOv7-Pytorch-Segmentation
関連するgithub https://github.com/leandro-svg/Yolov7_Segmentation_Tensorrt
yolov7からforkした版がある。
github detectron2
Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.
画像セグメンテーションは、物体検出と共通性が高いので、別々のソフトウェアとして実装されるよりは、同一のソフトウェアとして実装される方がうれしい。その方が計算の無駄が少なくなるし、メモリの管理も楽になるはず。
(ただ、そのなっていくほど、学習データの与え方は難しくなってしまう懸念はある。)
detectron2 をTensorRT上で動作させることについての記載がある。
NVIDIAのgithub Detectron 2 Mask R-CNN R50-FPN 3x in TensorRT
qiita Jetson xavierでDetectron2を用いた画像解析
MATLAB の場合 イメージのセグメンテーション
引用元
これらは、深層学習を必要としないセグメンテーション手法である。
MATLAB の場合 Mask R-CNN を使用したインスタンス セグメンテーションの実行
Mask R-CNN を学習させる場合の例が記載されている。
MATLAB の場合深層学習を使用したセマンティック セグメンテーション
MATLAB の場合 Yolov8
以下のやり取りを見る限り、現状では未対応(2023年時点)
I need Yolov8 in MATLAB, what is the latest version of YOLO algorithm in MATLAB?
Scikit-image のimage segmentation
- 深層学習を必要としない画像のセグメンテーションならば、scikit-image も候補になる。
- 11.1. Image Segmentation
scikit-image Multi-Otsu Thresholding
深層学習を必要としない分野での画像のセグメンテーションには、scikit-image に多様な例が示されているので、それを参照してみよう。
整体組織の顕微鏡写真のセグメンテーションの事例もある。
古典的なセグメンテーションの操作の場合には、OpenCVに含まれるモルフォロジー操作の関数だけで実装できる場合もあるだろう。
OpenVino
openvinoのmodel zoo にあるインスタンスセグメンテーション
Instance Segmentation Python* Demo
OpenVinoでの画像セグメンテーションの解説記事
Kaggle Image Segmentation for Self-Driving Cars
Keras を用いた例が書かれている。
github panoptic-segmentation
Transfomerベースの画像セグメンテーション
Hugging Face / Transformers
Image Segmentation
引用元
画像セグメンテーションの分野においても、Transformerベースの開発が進んでいる。
上記のHugging Face の記事を参照のこと。
Segment Anything
qiita 解説記事 Segment Anything
NVIDIA Jetson Generative AI Lab Tutorial - SAM (Segment Anything)
HuggingFace Segment Anything
hugging face のtransformers 上の実装の利点
- 簡単に動作できるようになっているので、GPUを持っていないPCで動作させるのもとても簡単。
- HuggingFaceにはimage-segmentationに、アルゴリズム、学習対象のデータセットの組み合わせで、多数のモデルがある。
- HuggingFaceではうれしいことに、モデルでの推論が共通になっている。
- そのため、モデルの切り替えがとても楽になっている。
"nvidia/segformer-b1-finetuned-cityscapes-1024-1024"
"facebook/maskformer-swin-tiny-coco"
Cityscapesデータセット
解説記事 Cityscapesデータセット
CVPR2023丨A collection of papers on Semantic Segmentation
10 個の文献が紹介されている。
jetson-inference Semantic Segmentation with SegNet
EgoHOS
Fine-Grained Egocentric Hand-Object Segmentation, ECCV 2022