Detectron2 を使用した物体検出,インスタンス・セグメンテーション,パノプティック・セグメンテーションの設定と実行を説明する.内容は,Windows上での前準備,関連ツールとライブラリのインストール,および物体検出とセグメンテーションを行うPythonプログラムのソースコードと実行手順の説明である.プログラムはCOCOデータセットに基づいている.外部リンクや参考文献も説明しており,関連する詳細な情報にアクセスできる.
物体検出
インスタンス・セグメンテーション
パノプティック・セグメンテーション
【目次】
【文献】
Yuxin Wu and Alexander Kirillov and Francisco Massa and Wan-Yen Lo and Ross Girshick, Detectron2, https://github.com/facebookresearch/detectron2, 2019.
【関連する外部ページ】
【関連項目】 ADE20K データセット, インスタンス・セグメンテーション (instance segmentation)
【インストールの判断】 Build Tools for Visual Studio は,開発ツールセットである. Visual Studio は統合開発環境であり,いくつかの種類があり,Build Tools for Visual Studioの機能を含むか連携して使用するものである.インストールは以下の基準で判断してください:
Visual Studio 2022 をインストールする際に,「C++ によるデスクトップ開発」を選択することで, Build Tools for Visual Studio 2022 の機能も一緒にインストールされる.
不明な点がある場合は,Visual Studio 全体をインストール を行う方が良い.
コマンドプロンプトを管理者として実行: 別ページ »で説明
次のコマンドを実行
次のコマンドは,Build Tools for Visual Studio 2022と VC2015 再配布可能パッケージをインストールするものである.
起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.
コマンドプロンプトを管理者として実行: 別ページ »で説明
次のコマンドを実行
次のコマンドは,Visual Studio Community 2022と VC2015 再配布可能パッケージをインストールするものである.
起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.
Pythonは,プログラミング言語の1つ. Gitは,分散型のバージョン管理システム.
【手順】
コマンドプロンプトを管理者として実行: 別ページ »で説明
次のコマンドを実行
次のコマンドは,Python ランチャーとPython 3.10とGitをインストールし,Gitにパスを通すものである.
次のコマンドでインストールされるGitは 「git for Windows」と呼ばれるものであり, Git,MinGW などから構成されている.
winget install --scope machine Python.Launcher winget install --scope machine Python.Python.3.10 winget install --scope machine Git.Git powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\Git\cmd\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
【関連する外部ページ】
【サイト内の関連ページ】
【関連項目】 Python, Git バージョン管理システム, Git の利用
【サイト内の関連ページ】 NVIDIA グラフィックスボードを搭載しているパソコンの場合には, NVIDIA ドライバ, NVIDIA CUDA ツールキット, NVIDIA cuDNN のインストールを行う.
【関連する外部ページ】
コマンドプロンプトを管理者として実行: 別ページ »で説明
次のコマンドを実行することにより, PyTorch 2.3 (NVIDIA CUDA 11.8 用)がインストールされる. 但し,Anaconda3を使いたい場合には別手順になる.
事前に NVIDIA CUDA のバージョンを確認しておくこと(ここでは,NVIDIA CUDA ツールキット 11.8 が前もってインストール済みであるとする).
PyTorch で,GPU が動作している場合には,「torch.cuda.is_available()」により,True が表示される.
python -m pip install -U --ignore-installed pip python -m pip uninstall -y torch torchvision torchaudio torchtext xformers python -m pip install -U torch torchvision torchaudio numpy --index-url https://download.pytorch.org/whl/cu118 python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
Anaconda3を使いたい場合には, Anaconda プロンプト (Anaconda Prompt) を管理者として実行し, 次のコマンドを実行する. (PyTorch と NVIDIA CUDA との連携がうまくいかない可能性があるため,Anaconda3を使わないことも検討して欲しい).
conda install -y pytorch torchvision torchaudio pytorch-cuda=11.8 cudnn -c pytorch -c nvidia py -c "import torch; print(torch.__version__, torch.cuda.is_available())"
【サイト内の関連ページ】
【関連する外部ページ】
コマンドプロンプトを管理者として実行: 別ページ »で説明
* 「pip install ...」は,Python パッケージをインストールするための操作
python -m pip install -U opencv-python opencv-contrib-python
pycocotools のインストールを行う.
コマンドプロンプトを管理者として実行: 別ページ »で説明
COCOデータセットをPythonで扱うためには,pycocotools を使う. pycocotools を使うことで,COCOデータセットのアノテーションを扱いやすくなる.
次のコマンドを実行
python -m pip install -U --ignore-installed pip python -m pip install -U cython wheel python -m pip install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI" python -m pip install git+https://github.com/cocodataset/panopticapi.git
次の記事に記載の手順による.
https://dgmaxime.medium.com/how-to-easily-install-detectron2-on-windows-10-39186139101c
コマンドプロンプトを管理者として実行: 別ページ »で説明
python -m pip uninstall -y detectron2 cd /d c:%HOMEPATH% rmdir /s /q detectron2 git clone --recursive https://github.com/facebookresearch/detectron2 cd detectron2
notepad detectron2\layers\csrc\nms_rotated\nms_rotated_cuda.cu
次のように書き換える
cd /d c:%HOMEPATH%\detectron2 python -m pip install -e .
pip install git+https://github.com/cocodataset/panopticapi.git pip install git+https://github.com/mcordts/cityscapesScripts.git
coco (common object in context) データセットの中の画像ファイルをダウンロード
https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt の記載による
cd %HOMEPATH%\detectron2 curl -O http://images.cocodataset.org/val2017/000000439715.jpg
コマンドプロンプトで次を実行
cd %HOMEPATH%\detectron2 python
次の Python プログラムを実行する
RetinaNet, R101, FPN, 3x による物体検出. COCO データセットによる学習済みモデルを使用.
https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成
Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md
「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.
import detectron2 from detectron2 import model_zoo from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg from detectron2.utils.visualizer import Visualizer from detectron2.data import MetadataCatalog, DatasetCatalog def setup_config(configfile): cfg = get_cfg() # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library cfg.merge_from_file(model_zoo.get_config_file(configfile)) cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set threshold for this model # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile) return cfg def look_instance(outputs): # インスタンス・セグメンテーションの結果の確認 # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification print(outputs["instances"].pred_classes) print(outputs["instances"].pred_boxes) def visualize_instance(im, cfg, outputs): # 画面表示 # We can use `Visualizer` to draw the predictions on the image. v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2) out = v.draw_instance_predictions(outputs["instances"].to("cpu")) cv2.imshow("", out.get_image()[:, :, ::-1]) cv2.waitKey(15) import cv2 im = cv2.imread('000000439715.jpg') cfg = setup_config('COCO-Detection/retinanet_R_101_FPN_3x.yaml') predictor = DefaultPredictor(cfg) outputs = predictor(im) look_instance(outputs) visualize_instance(im, cfg, outputs)
コマンドプロンプトで次を実行
cd %HOMEPATH%\detectron2 python
次の Python プログラムを実行する
Mask-RCNN, R101, FPN, 3x によるインスタンス・セグメンテーション. COCO データセットによる学習済みモデルを使用.
https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成
Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md
「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.
import detectron2 from detectron2 import model_zoo from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg from detectron2.utils.visualizer import Visualizer from detectron2.data import MetadataCatalog, DatasetCatalog def setup_config(configfile): cfg = get_cfg() # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library cfg.merge_from_file(model_zoo.get_config_file(configfile)) cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set threshold for this model # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile) return cfg def look_instance(outputs): # インスタンス・セグメンテーションの結果の確認 # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification print(outputs["instances"].pred_classes) print(outputs["instances"].pred_boxes) def visualize_instance(im, cfg, outputs): # 画面表示 # We can use `Visualizer` to draw the predictions on the image. v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2) out = v.draw_instance_predictions(outputs["instances"].to("cpu")) cv2.imshow("", out.get_image()[:, :, ::-1]) cv2.waitKey(15) import cv2 im = cv2.imread('000000439715.jpg') cfg = setup_config('COCO-InstanceSegmentation/mask_rcnn_R_101_FPN_3x.yaml') predictor = DefaultPredictor(cfg) outputs = predictor(im) look_instance(outputs) visualize_instance(im, cfg, outputs)
コマンドプロンプトで次を実行
cd %HOMEPATH%\detectron2 python
次の Python プログラムを実行する
Panoptic FPN, R101, 3x によるパノプティック・セグメンテーション. COCO データセットによる学習済みモデルを使用.
https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成
Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md
「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.
import detectron2 from detectron2 import model_zoo from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg from detectron2.utils.visualizer import Visualizer from detectron2.data import MetadataCatalog, DatasetCatalog def setup_config(configfile): cfg = get_cfg() # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library cfg.merge_from_file(model_zoo.get_config_file(configfile)) cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set threshold for this model # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile) return cfg def look_instance(outputs): # インスタンス・セグメンテーションの結果の確認 # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification print(outputs["instances"].pred_classes) print(outputs["instances"].pred_boxes) def visualize_instance(im, cfg, outputs): # 画面表示 # We can use `Visualizer` to draw the predictions on the image. v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2) out = v.draw_instance_predictions(outputs["instances"].to("cpu")) cv2.imshow("", out.get_image()[:, :, ::-1]) cv2.waitKey(15) import cv2 im = cv2.imread('000000439715.jpg') cfg = setup_config('COCO-PanopticSegmentation/panoptic_fpn_R_101_3x.yaml') predictor = DefaultPredictor(cfg) outputs = predictor(im) look_instance(outputs) visualize_instance(im, cfg, outputs)
次の Python プログラムを実行する
Panoptic FPN R101 によるパノプティック・セグメンテーション.
https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成
Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md
「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.
import detectron2 from detectron2 import model_zoo from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg from detectron2.utils.visualizer import Visualizer from detectron2.data import MetadataCatalog, DatasetCatalog def setup_config(configfile): cfg = get_cfg() # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library cfg.merge_from_file(model_zoo.get_config_file(configfile)) cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set threshold for this model # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile) return cfg def look_instance(outputs): # インスタンス・セグメンテーションの結果の確認 # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification print(outputs["instances"].pred_classes) print(outputs["instances"].pred_boxes) def visualize_instance(im, cfg, outputs): # 画面表示 # We can use `Visualizer` to draw the predictions on the image. v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2) out = v.draw_instance_predictions(outputs["instances"].to("cpu")) cv2.imshow("", out.get_image()[:, :, ::-1]) cv2.waitKey(15) import cv2 im = cv2.imread('000000439715.jpg') cfg = setup_config('Misc/panoptic_fpn_R_101_dconv_cascade_gn_3x.yaml') predictor = DefaultPredictor(cfg) outputs = predictor(im) look_instance(outputs) visualize_instance(im, cfg, outputs)