独自のデータセットで、detectron2を動かしたい。

実現したいこと

独自のデータセットでdetectron2を動かしたいと思っています。
ここに実現したいことを箇条書きで書いてください。

前提

PS3のコントローラーを認識するように40枚強の写真をポリゴンでアノテーションして、学習させようとしています。
グーグルコラボでやっているので、抜けてるコードとかあるかもです。セグメンテーションの機械学習の方面に明るくなくて、そもそも初心者すぎてごめんなさい。
特にこれといったエラーはなく動きはするんですが、推論すると、何も認識しないようです。
データセットごとのせて、コラボラトリーごと共有したいのですが、たいした情報じゃないんですがほんの少しだけ機密情報を含んんでいるので控えさせていただきます。
コード自体に問題がないのであれば、あとはデータの問題かなと思うんですが、そもそも少なすぎたのかなとも思っています。
ですが、参考にさせていただいたサイトでは10枚で成功させてる事例も見受けられて不思議に思っています。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

from detectron2.data.datasets import register_coco_instances register_coco_instances("pscontroller", {}, "path to /coco_dataset.json", "path to image folder") import json from detectron2.structures import BoxMode import requests from pathlib import Path from detectron2.engine import DefaultTrainer from detectron2.data.datasets import register_coco_instances import detectron2 from detectron2.utils.logger import setup_logger setup_logger() import numpy as np import os, json, cv2, random from google.colab.patches import cv2_imshow 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 from detectron2.evaluation import SemSegEvaluator def get_dataset_dicts(json_file_path): with open(json_file_path) as f: imgs_anns = json.load(f) dataset_dicts = [] for image_ann in imgs_anns['images']: record = {} record["file_name"] = '/content/drive/MyDrive/cont/'+ image_ann["file_name"] record["height"] = image_ann["height"] record["width"] = image_ann["width"] record["image_id"] = image_ann["id"] record["url"] = image_ann["coco_url"] annos = [anno for anno in imgs_anns["annotations"] if anno["image_id"] == image_ann["id"]] objs = [] for anno in annos: bbox = [float(coord) for coord in anno["bbox"]] segm = [float(coord) for coords in anno["segmentation"] for coord in coords.split(",")] obj = { "bbox": bbox, "bbox_mode": BoxMode.XYWH_ABS, "category_id": anno["category_id"], "segmentation": [segm], } objs.append(obj) record["annotations"] = objs dataset_dicts.append(record) return dataset_dicts from detectron2.data import DatasetCatalog, MetadataCatalog # データセットとJSONファイルのパス dataset_name = "my_4_dataset" json_file_path = "/content/drive/MyDrive/detectron2-main/clofusarl0xb707113sk344xx_coco_dataset.json" # データセットの登録 DatasetCatalog.register(dataset_name, lambda: get_dataset_dicts(json_file_path)) MetadataCatalog.get(dataset_name).set(thing_classes=["pscontroller"]) from detectron2.config import get_cfg from detectron2.engine import DefaultTrainer cfg = get_cfg() cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")) cfg.DATASETS.TRAIN = (dataset_name,) cfg.DATASETS.TEST = () # 例えば、テストセットがあればここに追加 cfg.DATALOADER.NUM_WORKERS = 2 cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml") cfg.SOLVER.IMS_PER_BATCH = 2 cfg.SOLVER.BASE_LR = 0.00025 cfg.SOLVER.MAX_ITER = 300 # 適宜調整 cfg.MODEL.ROI_HEADS.NUM_CLASSES = len(["pscontroller"]) # クラスの数に合わせる os.makedirs(cfg.OUTPUT_DIR, exist_ok=True) trainer = DefaultTrainer(cfg) trainer.resume_or_load(resume=False) trainer.train() from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg # 設定を取得し、トレーニング時と同じ設定を行う cfg = get_cfg() cfg.merge_from_file("path to /COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml") # トレーニング時に使用した設定ファイル cfg.MODEL.WEIGHTS = "/content/output/model_final.pth" # トレーニング済みモデルの重み cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.6 # 推論の閾値 predictor = DefaultPredictor(cfg) from PIL import Image import cv2 from google.colab.patches import cv2_imshow # 推論したい画像を読み込む image_path = imgPath = "/content/output/IMG_7775.JPG" im = cv2.imread(image_path) # 予測を実行 outputs = predictor(im) print(outputs) from detectron2.utils.visualizer import ColorMode, Visualizer from detectron2.data import MetadataCatalog # 推論結果を描画する v = Visualizer(im[:, :, ::-1], metadata=MetadataCatalog.get("my_3_dataset"), scale=1) v = v.draw_instance_predictions(outputs["instances"].to("cpu")) cv2_imshow(v.get_image()[:, :, ::-1])
前半省略 [11/13 08:00:09 d2.data.build]: Removed 0 images with no usable annotations. 42 images left. [11/13 08:00:09 d2.data.build]: Distribution of instances among all 1 categories: | category | #instances | |:------------:|:-------------| | pscontroller | 42 | | | | [11/13 08:00:09 d2.data.dataset_mapper]: [DatasetMapper] Augmentations used in training: [ResizeShortestEdge(short_edge_length=(640, 672, 704, 736, 768, 800), max_size=1333, sample_style='choice'), RandomFlip()] [11/13 08:00:09 d2.data.build]: Using training sampler TrainingSampler [11/13 08:00:09 d2.data.common]: Serializing the dataset using: <class 'detectron2.data.common._TorchSerializedList'> [11/13 08:00:09 d2.data.common]: Serializing 42 elements to byte tensors and concatenating them all ... [11/13 08:00:09 d2.data.common]: Serialized dataset takes 0.11 MiB [11/13 08:00:09 d2.data.build]: Making batched data loader with batch_size=2 WARNING [11/13 08:00:09 d2.solver.build]: SOLVER.STEPS contains values larger than SOLVER.MAX_ITER. These values will be ignored. [11/13 08:00:09 d2.checkpoint.detection_checkpoint]: [DetectionCheckpointer] Loading from https://dl.fbaipublicfiles.com/detectron2/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl ... model_final_f10217.pkl: 178MB [00:01, 99.9MB/s] WARNING:fvcore.common.checkpoint:Skip loading parameter 'roi_heads.box_predictor.cls_score.weight' to the model due to incompatible shapes: (81, 1024) in the checkpoint but (2, 1024) in the model! You might want to double check if this is expected. WARNING:fvcore.common.checkpoint:Skip loading parameter 'roi_heads.box_predictor.cls_score.bias' to the model due to incompatible shapes: (81,) in the checkpoint but (2,) in the model! You might want to double check if this is expected. WARNING:fvcore.common.checkpoint:Skip loading parameter 'roi_heads.box_predictor.bbox_pred.weight' to the model due to incompatible shapes: (320, 1024) in the checkpoint but (4, 1024) in the model! You might want to double check if this is expected. WARNING:fvcore.common.checkpoint:Skip loading parameter 'roi_heads.box_predictor.bbox_pred.bias' to the model due to incompatible shapes: (320,) in the checkpoint but (4,) in the model! You might want to double check if this is expected. WARNING:fvcore.common.checkpoint:Skip loading parameter 'roi_heads.mask_head.predictor.weight' to the model due to incompatible shapes: (80, 256, 1, 1) in the checkpoint but (1, 256, 1, 1) in the model! You might want to double check if this is expected. WARNING:fvcore.common.checkpoint:Skip loading parameter 'roi_heads.mask_head.predictor.bias' to the model due to incompatible shapes: (80,) in the checkpoint but (1,) in the model! You might want to double check if this is expected. WARNING:fvcore.common.checkpoint:Some model parameters or buffers are not found in the checkpoint: roi_heads.box_predictor.bbox_pred.{bias, weight} roi_heads.box_predictor.cls_score.{bias, weight} roi_heads.mask_head.predictor.{bias, weight} [11/13 08:00:11 d2.engine.train_loop]: Starting training from iteration 0 [11/13 08:00:43 d2.utils.events]: eta: 1:02:27 iter: 19 total_loss: 1.7 loss_cls: 0.868 loss_box_reg: 0.1016 loss_mask: 0.6932 loss_rpn_cls: 0.02373 loss_rpn_loc: 0.01086 time: 1.2069 last_time: 1.1748 data_time: 1.0006 last_data_time: 1.0122 lr: 4.9953e-06 max_mem: 2420M [11/13 08:00:59 d2.utils.events]: eta: 0:33:59 iter: 39 total_loss: 1.573 loss_cls: 0.7029 loss_box_reg: 0.08959 loss_mask: 0.6931 loss_rpn_cls: 0.04017 loss_rpn_loc: 0.01214 time: 0.8997 last_time: 0.5991 data_time: 0.3392 last_data_time: 0.3899 lr: 9.9902e-06 max_mem: 2420M 以下略

試したこと

学習エポックを増やしてみたりしたのですが、うんともすんとも行かなかったです。
ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
torch: 2.1 ; cuda: cu118
detectron2: 0.6
ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント