From daf958212f24b15bd4d9a5d265f1cdd66fb3fca1 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 21 Oct 2024 14:56:58 +0900 Subject: [PATCH 01/23] Create my_fastrcnn_loss_with_focal_loss.py --- my_fastrcnn_loss_with_focal_loss.py | 62 +++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 my_fastrcnn_loss_with_focal_loss.py diff --git a/my_fastrcnn_loss_with_focal_loss.py b/my_fastrcnn_loss_with_focal_loss.py new file mode 100644 index 0000000000..48bcd9af38 --- /dev/null +++ b/my_fastrcnn_loss_with_focal_loss.py @@ -0,0 +1,62 @@ +import torch.nn.functional as F +from torch import nn + +class FocalLoss(nn.Module): + + def __init__(self, weight=None, + gamma=2.5, reduction='mean'): + nn.Module.__init__(self) + self.weight=weight + self.gamma = gamma + self.reduction = reduction + + def forward(self, input_tensor, target_tensor): + log_prob = F.log_softmax(input_tensor, dim=-1) + prob = torch.exp(log_prob) + return F.nll_loss( + ((1 - prob) ** self.gamma) * log_prob, + target_tensor, + weight=self.weight, + reduction = self.reduction + ) + +def fastrcnn_loss(class_logits, box_regression, labels, regression_targets): + # type: (Tensor, Tensor, List[Tensor], List[Tensor]) -> Tuple[Tensor, Tensor] + """ + Computes the loss for Faster R-CNN. + Args: + class_logits (Tensor) + box_regression (Tensor) + labels (list[BoxList]) + regression_targets (Tensor) + Returns: + classification_loss (Tensor) + box_loss (Tensor) + """ + + labels = torch.cat(labels, dim=0) + regression_targets = torch.cat(regression_targets, dim=0) + + #この部分をfocal_lossへ変更する + #classification_loss = F.cross_entropy(class_logits, labels) + focal=FocalLoss() + classification_loss = focal(class_logits, labels) + #変更はここまで + + # get indices that correspond to the regression targets for + # the corresponding ground truth labels, to be used with + # advanced indexing + sampled_pos_inds_subset = torch.where(labels > 0)[0] + labels_pos = labels[sampled_pos_inds_subset] + N, num_classes = class_logits.shape + box_regression = box_regression.reshape(N, box_regression.size(-1) // 4, 4) + + box_loss = F.smooth_l1_loss( + box_regression[sampled_pos_inds_subset, labels_pos], + regression_targets[sampled_pos_inds_subset], + beta=1 / 9, + reduction='sum', + ) + box_loss = box_loss / labels.numel() + + return classification_loss, box_loss From e65b18d8755f4cbfce47936a15e5c53b1c00b670 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:26:30 +0900 Subject: [PATCH 02/23] Update fast_rcnn.py 342_347 --- detectron2/modeling/roi_heads/fast_rcnn.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index 039e2490fa..5a8a2b8c7d 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -338,10 +338,13 @@ def losses(self, predictions, proposals): else: proposal_boxes = gt_boxes = torch.empty((0, 4), device=proposal_deltas.device) + from my_fastrcnn_loss_with_focal_loss import fastrcnn_loss #add if self.use_sigmoid_ce: - loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) + # loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) + loss_cls = fastrcnn_loss #add else: - loss_cls = cross_entropy(scores, gt_classes, reduction="mean") + # loss_cls = cross_entropy(scores, gt_classes, reduction="mean") + loss_cls = fastrcnn_loss #add losses = { "loss_cls": loss_cls, From f38f8a965ba9ea03a273066363c431dbb29d2342 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:27:39 +0900 Subject: [PATCH 03/23] Add files via upload --- .../my_fastrcnn_loss_with_focal_loss.py | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 detectron2/modeling/roi_heads/my_fastrcnn_loss_with_focal_loss.py diff --git a/detectron2/modeling/roi_heads/my_fastrcnn_loss_with_focal_loss.py b/detectron2/modeling/roi_heads/my_fastrcnn_loss_with_focal_loss.py new file mode 100644 index 0000000000..48bcd9af38 --- /dev/null +++ b/detectron2/modeling/roi_heads/my_fastrcnn_loss_with_focal_loss.py @@ -0,0 +1,62 @@ +import torch.nn.functional as F +from torch import nn + +class FocalLoss(nn.Module): + + def __init__(self, weight=None, + gamma=2.5, reduction='mean'): + nn.Module.__init__(self) + self.weight=weight + self.gamma = gamma + self.reduction = reduction + + def forward(self, input_tensor, target_tensor): + log_prob = F.log_softmax(input_tensor, dim=-1) + prob = torch.exp(log_prob) + return F.nll_loss( + ((1 - prob) ** self.gamma) * log_prob, + target_tensor, + weight=self.weight, + reduction = self.reduction + ) + +def fastrcnn_loss(class_logits, box_regression, labels, regression_targets): + # type: (Tensor, Tensor, List[Tensor], List[Tensor]) -> Tuple[Tensor, Tensor] + """ + Computes the loss for Faster R-CNN. + Args: + class_logits (Tensor) + box_regression (Tensor) + labels (list[BoxList]) + regression_targets (Tensor) + Returns: + classification_loss (Tensor) + box_loss (Tensor) + """ + + labels = torch.cat(labels, dim=0) + regression_targets = torch.cat(regression_targets, dim=0) + + #この部分をfocal_lossへ変更する + #classification_loss = F.cross_entropy(class_logits, labels) + focal=FocalLoss() + classification_loss = focal(class_logits, labels) + #変更はここまで + + # get indices that correspond to the regression targets for + # the corresponding ground truth labels, to be used with + # advanced indexing + sampled_pos_inds_subset = torch.where(labels > 0)[0] + labels_pos = labels[sampled_pos_inds_subset] + N, num_classes = class_logits.shape + box_regression = box_regression.reshape(N, box_regression.size(-1) // 4, 4) + + box_loss = F.smooth_l1_loss( + box_regression[sampled_pos_inds_subset, labels_pos], + regression_targets[sampled_pos_inds_subset], + beta=1 / 9, + reduction='sum', + ) + box_loss = box_loss / labels.numel() + + return classification_loss, box_loss From 0e22bd5a95ecf9f5287beafc917d63fdf129ddd3 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:12:14 +0900 Subject: [PATCH 04/23] Update fast_rcnn.py --- detectron2/modeling/roi_heads/fast_rcnn.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index 5a8a2b8c7d..a00c95302c 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -12,6 +12,8 @@ from detectron2.structures import Boxes, Instances from detectron2.utils.events import get_event_storage +mode = 1 #0:default 1:focal + __all__ = ["fast_rcnn_inference", "FastRCNNOutputLayers"] @@ -338,13 +340,13 @@ def losses(self, predictions, proposals): else: proposal_boxes = gt_boxes = torch.empty((0, 4), device=proposal_deltas.device) - from my_fastrcnn_loss_with_focal_loss import fastrcnn_loss #add - if self.use_sigmoid_ce: - # loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) - loss_cls = fastrcnn_loss #add + if mode == 1: + from my_fastrcnn_loss_with_focal_loss import fastrcnn_loss + loss_cls = fastrcnn_loss + elif self.use_sigmoid_ce: + loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) else: - # loss_cls = cross_entropy(scores, gt_classes, reduction="mean") - loss_cls = fastrcnn_loss #add + loss_cls = cross_entropy(scores, gt_classes, reduction="mean") losses = { "loss_cls": loss_cls, From eb1828695a4965cf5381366669b79fbf5ab77c17 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 23 Dec 2024 12:13:31 +0900 Subject: [PATCH 05/23] Update fast_rcnn.py add new loss function --- detectron2/modeling/roi_heads/fast_rcnn.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index a00c95302c..0d4d51c744 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -340,13 +340,22 @@ def losses(self, predictions, proposals): else: proposal_boxes = gt_boxes = torch.empty((0, 4), device=proposal_deltas.device) - if mode == 1: - from my_fastrcnn_loss_with_focal_loss import fastrcnn_loss - loss_cls = fastrcnn_loss + #書き換えここから + loss_type = self.cfg.MODEL.ROI_HEADS.LOSS_TYPE + if loss_type == "focal": + # Focal Loss + gamma = self.cfg.MODEL.ROI_HEADS.FOCAL_LOSS_GAMMA + alpha = self.cfg.MODEL.ROI_HEADS.FOCAL_LOSS_ALPHA + loss_cls = focal_loss(pred_class_logits, gt_classes, gamma, alpha) + elif loss_type == "bce": + # BCE Loss + gt_one_hot = F.one_hot(gt_classes, num_classes=pred_class_logits.size(1)).float() + loss_cls = F.binary_cross_entropy_with_logits(pred_class_logits, gt_one_hot, reduction="mean") elif self.use_sigmoid_ce: loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) else: loss_cls = cross_entropy(scores, gt_classes, reduction="mean") + #ここまで losses = { "loss_cls": loss_cls, From 0fd37da989930651e7ec653c7b6c16ee7747b71b Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 23 Dec 2024 12:19:14 +0900 Subject: [PATCH 06/23] Update defaults.py add default loss function --- detectron2/config/defaults.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/detectron2/config/defaults.py b/detectron2/config/defaults.py index 506651730e..3c72580e58 100644 --- a/detectron2/config/defaults.py +++ b/detectron2/config/defaults.py @@ -654,3 +654,8 @@ # Do not commit any configs into it. _C.GLOBAL = CN() _C.GLOBAL.HACK = 1.0 + +# ここから追加 +_C.MODEL.ROI_HEADS.LOSS_TYPE = "bce" # "focal"または"bce"も選択可能 +_C.MODEL.ROI_HEADS.FOCAL_LOSS_GAMMA = 2.0 +_C.MODEL.ROI_HEADS.FOCAL_LOSS_ALPHA = 0.25 From c843ec681d2ed181ccfaa41e16fdd695ea96c2b8 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:41:42 +0900 Subject: [PATCH 07/23] Create note --- note | 1 + 1 file changed, 1 insertion(+) create mode 100644 note diff --git a/note b/note new file mode 100644 index 0000000000..6b34b21ca4 --- /dev/null +++ b/note @@ -0,0 +1 @@ +my_fastrcnn_loss_with_focal_loss.pyは新しく追加したものである。 From 3394fe6c8cb70c085c5b8e180b0eea16ce85b2e8 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:45:13 +0900 Subject: [PATCH 08/23] Update note --- note | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/note b/note index 6b34b21ca4..142504f0ad 100644 --- a/note +++ b/note @@ -1 +1 @@ -my_fastrcnn_loss_with_focal_loss.pyは新しく追加したものである。 +# my_fastrcnn_loss_with_focal_loss.pyは新しく追加したもの From f97e9fa13b48bf3e2890b6cebbdecaf37926af82 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:54:05 +0900 Subject: [PATCH 09/23] Update fast_rcnn.py --- detectron2/modeling/roi_heads/fast_rcnn.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index 0d4d51c744..f1f15d1779 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -351,6 +351,9 @@ def losses(self, predictions, proposals): # BCE Loss gt_one_hot = F.one_hot(gt_classes, num_classes=pred_class_logits.size(1)).float() loss_cls = F.binary_cross_entropy_with_logits(pred_class_logits, gt_one_hot, reduction="mean") + elif loss_type == 'dummy': + # dummy loss + loss_cls = torch.tensor(1.0, requires_grad=True, device=predictions[0].device) elif self.use_sigmoid_ce: loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) else: From 19e8237ee3f11888677033349dba8a206f26e03b Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:58:51 +0900 Subject: [PATCH 10/23] Create new_roy_heads.py --- detectron2/modeling/roi_heads/new_roy_heads.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 detectron2/modeling/roi_heads/new_roy_heads.py diff --git a/detectron2/modeling/roi_heads/new_roy_heads.py b/detectron2/modeling/roi_heads/new_roy_heads.py new file mode 100644 index 0000000000..2735fbb2fc --- /dev/null +++ b/detectron2/modeling/roi_heads/new_roy_heads.py @@ -0,0 +1,11 @@ +from .roi_heads import ROI_HEADS_REGISTRY, StandardROIHeads +import torch + +@ROI_HEADS_REGISTRY.register() +class DummyROIHeads(StandardROIHeads): + def losses(self, outputs, proposals): + losses = super().losses(outputs, proposals) + losses["loss_cls"] = torch.randn_like(losses["loss_cls"]) * 100 #ノイズ追加 + losses["loss_box_reg"] = torch.tensor(1e5, device=losses["loss_box_reg"].device) #回帰の破壊で予測無効化 + + return losses From 07c12f25a079a7385a88ede6e694a50882d1cb54 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 17 Feb 2025 13:45:33 +0900 Subject: [PATCH 11/23] Update fast_rcnn.py --- detectron2/modeling/roi_heads/fast_rcnn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index f1f15d1779..7784a5b6cd 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -353,7 +353,7 @@ def losses(self, predictions, proposals): loss_cls = F.binary_cross_entropy_with_logits(pred_class_logits, gt_one_hot, reduction="mean") elif loss_type == 'dummy': # dummy loss - loss_cls = torch.tensor(1.0, requires_grad=True, device=predictions[0].device) + loss_cls = torch.tensor(1.0, requires_grad=True, device=predictions[0].device) elif self.use_sigmoid_ce: loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) else: From 9bfe9a38c1810d125093e670bdf172d2ea0feaf0 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:00:10 +0900 Subject: [PATCH 12/23] Create MyFastRCNNOutputLayers.py --- .../modeling/roi_heads/MyFastRCNNOutputLayers.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py diff --git a/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py new file mode 100644 index 0000000000..4a23b18ced --- /dev/null +++ b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py @@ -0,0 +1,13 @@ +import torch +from detectron2.modeling.roi_heads.fast_rcnn import FastRCNNOutputLayers + +class CustomFastRCNNOutputLayers(FastRCNNOutputLayers): + def losses(self, predictions, proposals): + """ + カスタム損失関数 (ダミー実装) + """ + dummy_loss = torch.tensor(100.0, device=predictions[0].device) # 固定損失 + return { + "loss_cls": dummy_loss, + "loss_box_reg": dummy_loss + } From 53d9dd2c83bbad6969023e27945351a66c298712 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:01:12 +0900 Subject: [PATCH 13/23] Update MyFastRCNNOutputLayers.py --- .../modeling/roi_heads/MyFastRCNNOutputLayers.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py index 4a23b18ced..3d80061753 100644 --- a/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py +++ b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py @@ -3,11 +3,19 @@ class CustomFastRCNNOutputLayers(FastRCNNOutputLayers): def losses(self, predictions, proposals): - """ - カスタム損失関数 (ダミー実装) - """ dummy_loss = torch.tensor(100.0, device=predictions[0].device) # 固定損失 return { "loss_cls": dummy_loss, "loss_box_reg": dummy_loss } + +from detectron2.modeling import ROI_HEADS_REGISTRY +from detectron2.modeling.roi_heads import StandardROIHeads + +@ROI_HEADS_REGISTRY.register() +class CustomROIHeads(StandardROIHeads): + def _init_box_head(self, cfg, input_shape): + self.box_predictor = MyFastRCNNOutputLayers( + input_shape, + cfg.MODEL.ROI_HEADS.NUM_CLASSES, + ) From f8301899ce13f4255ec413c5059d747a42575ad7 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:33:26 +0900 Subject: [PATCH 14/23] Update MyFastRCNNOutputLayers.py --- detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py index 3d80061753..2ecbf35b0a 100644 --- a/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py +++ b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py @@ -15,7 +15,7 @@ def losses(self, predictions, proposals): @ROI_HEADS_REGISTRY.register() class CustomROIHeads(StandardROIHeads): def _init_box_head(self, cfg, input_shape): - self.box_predictor = MyFastRCNNOutputLayers( + self.box_predictor = MyFastRCNNOutputLayers( # ボックス回帰に適用 input_shape, cfg.MODEL.ROI_HEADS.NUM_CLASSES, ) From f084f823b8606d42e3a738c6ce4c273f60295062 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 17 Feb 2025 15:22:14 +0900 Subject: [PATCH 15/23] Update MyFastRCNNOutputLayers.py --- detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py index 2ecbf35b0a..28c735affd 100644 --- a/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py +++ b/detectron2/modeling/roi_heads/MyFastRCNNOutputLayers.py @@ -1,7 +1,7 @@ import torch from detectron2.modeling.roi_heads.fast_rcnn import FastRCNNOutputLayers -class CustomFastRCNNOutputLayers(FastRCNNOutputLayers): +class MyFastRCNNOutputLayers(FastRCNNOutputLayers): def losses(self, predictions, proposals): dummy_loss = torch.tensor(100.0, device=predictions[0].device) # 固定損失 return { From 8991cae61954f4049d17ae5bc89d05644ddde388 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 11:49:09 +0900 Subject: [PATCH 16/23] Update fast_rcnn.py --- detectron2/modeling/roi_heads/fast_rcnn.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index 7784a5b6cd..86852ca702 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -353,7 +353,11 @@ def losses(self, predictions, proposals): loss_cls = F.binary_cross_entropy_with_logits(pred_class_logits, gt_one_hot, reduction="mean") elif loss_type == 'dummy': # dummy loss - loss_cls = torch.tensor(1.0, requires_grad=True, device=predictions[0].device) + dummy_loss = torch.tensor(100.0, device=predictions[0].device) # 固定値の損失 + return { + "loss_cls": dummy_loss, + "loss_box_reg": dummy_loss + } elif self.use_sigmoid_ce: loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) else: From f378a3f19ecc12eed0c696f4c07b1d2def15bd21 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 11:50:58 +0900 Subject: [PATCH 17/23] Update roi_heads.py --- detectron2/modeling/roi_heads/roi_heads.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/detectron2/modeling/roi_heads/roi_heads.py b/detectron2/modeling/roi_heads/roi_heads.py index 2f4546cd0c..12e0d90b6b 100644 --- a/detectron2/modeling/roi_heads/roi_heads.py +++ b/detectron2/modeling/roi_heads/roi_heads.py @@ -581,7 +581,12 @@ def __init__( self.in_features = self.box_in_features = box_in_features self.box_pooler = box_pooler self.box_head = box_head - self.box_predictor = box_predictor + # 書き換え + # self.box_predictor = box_predictor + self.box_predictor = FastRCNNOutputLayers( + input_shape, + cfg.MODEL.ROI_HEADS.NUM_CLASSES, + ) self.mask_on = mask_in_features is not None if self.mask_on: From df10d0b7d1748f2756ccbefbb675ae47a7752ccd Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:10:44 +0900 Subject: [PATCH 18/23] Update fast_rcnn.py --- detectron2/modeling/roi_heads/fast_rcnn.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index 86852ca702..4f9e78ad82 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -184,6 +184,7 @@ class FastRCNNOutputLayers(nn.Module): @configurable def __init__( self, + cfg, input_shape: ShapeSpec, *, box2box_transform, @@ -230,6 +231,7 @@ def __init__( fed_loss_num_classes (int): number of federated classes to keep in total """ super().__init__() + self.cfg = cfg #設定の上書き if isinstance(input_shape, int): # some backward compatibility input_shape = ShapeSpec(channels=input_shape) self.num_classes = num_classes @@ -353,7 +355,8 @@ def losses(self, predictions, proposals): loss_cls = F.binary_cross_entropy_with_logits(pred_class_logits, gt_one_hot, reduction="mean") elif loss_type == 'dummy': # dummy loss - dummy_loss = torch.tensor(100.0, device=predictions[0].device) # 固定値の損失 + print("=== Custom losses() function is called ===") # 確認用出力 + dummy_loss = torch.tensor(100.0, device=predictions[0].device, requires_grad=True) return { "loss_cls": dummy_loss, "loss_box_reg": dummy_loss From 7e63248788522a793fc84b0193f605c50f54c942 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:11:54 +0900 Subject: [PATCH 19/23] Update roi_heads.py --- detectron2/modeling/roi_heads/roi_heads.py | 1 + 1 file changed, 1 insertion(+) diff --git a/detectron2/modeling/roi_heads/roi_heads.py b/detectron2/modeling/roi_heads/roi_heads.py index 12e0d90b6b..6f6757d97b 100644 --- a/detectron2/modeling/roi_heads/roi_heads.py +++ b/detectron2/modeling/roi_heads/roi_heads.py @@ -584,6 +584,7 @@ def __init__( # 書き換え # self.box_predictor = box_predictor self.box_predictor = FastRCNNOutputLayers( + cfg, input_shape, cfg.MODEL.ROI_HEADS.NUM_CLASSES, ) From ba7f4e1d04c7b4d8c41b704f273498c94dcc7dc2 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:14:36 +0900 Subject: [PATCH 20/23] Update fast_rcnn.py --- detectron2/modeling/roi_heads/fast_rcnn.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index 4f9e78ad82..0fa2b253ac 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -320,7 +320,7 @@ def losses(self, predictions, proposals): Dict[str, Tensor]: dict of losses """ scores, proposal_deltas = predictions - + loss_type = self.cfg.MODEL.ROI_HEADS.LOSS_TYPE # 損失関数の選択 # parse classification outputs gt_classes = ( cat([p.gt_classes for p in proposals], dim=0) if len(proposals) else torch.empty(0) @@ -355,7 +355,7 @@ def losses(self, predictions, proposals): loss_cls = F.binary_cross_entropy_with_logits(pred_class_logits, gt_one_hot, reduction="mean") elif loss_type == 'dummy': # dummy loss - print("=== Custom losses() function is called ===") # 確認用出力 + print("ダミー損失関数を使用します") # 確認用出力 dummy_loss = torch.tensor(100.0, device=predictions[0].device, requires_grad=True) return { "loss_cls": dummy_loss, From 716a070d71c06edd775d35a10abbebc81f2ac6a2 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:36:26 +0900 Subject: [PATCH 21/23] Update roi_heads.py --- detectron2/modeling/roi_heads/roi_heads.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/detectron2/modeling/roi_heads/roi_heads.py b/detectron2/modeling/roi_heads/roi_heads.py index 6f6757d97b..30569f6d69 100644 --- a/detectron2/modeling/roi_heads/roi_heads.py +++ b/detectron2/modeling/roi_heads/roi_heads.py @@ -351,6 +351,7 @@ class Res5ROIHeads(ROIHeads): def __init__( self, *, + cfg, in_features: List[str], pooler: ROIPooler, res5: nn.Module, @@ -382,6 +383,13 @@ def __init__( self.mask_on = mask_head is not None if self.mask_on: self.mask_head = mask_head + + input_shape = box_pooler.output_size # input_shapeの取得元 + self.box_predictor = FastRCNNOutputLayers( + cfg, + input_shape, + num_classes=cfg.MODEL.ROI_HEADS.NUM_CLASSES, + ) # 変更 @classmethod def from_config(cls, cfg, input_shape): From e448877c3d994e6a85f9c69cb19e1988476f25d3 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:42:14 +0900 Subject: [PATCH 22/23] Update fast_rcnn.py --- detectron2/modeling/roi_heads/fast_rcnn.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/detectron2/modeling/roi_heads/fast_rcnn.py b/detectron2/modeling/roi_heads/fast_rcnn.py index 0fa2b253ac..bd4a68b9a9 100644 --- a/detectron2/modeling/roi_heads/fast_rcnn.py +++ b/detectron2/modeling/roi_heads/fast_rcnn.py @@ -373,7 +373,11 @@ def losses(self, predictions, proposals): proposal_boxes, gt_boxes, proposal_deltas, gt_classes ), } - return {k: v * self.loss_weight.get(k, 1.0) for k, v in losses.items()} + if isinstance(self.loss_weight, dict): + return {k: v * self.loss_weight.get(k, 1.0) for k, v in losses.items()} + else: + # loss_weight が関数の場合などの処理 + return {k: v * self.loss_weight(k) for k, v in losses.items()} # Implementation from https://github.com/xingyizhou/CenterNet2/blob/master/projects/CenterNet2/centernet/modeling/roi_heads/fed_loss.py # noqa # with slight modifications From 2e6c09504f4d273e12f1590329a895ed4f043537 Mon Sep 17 00:00:00 2001 From: ricky0614 <162050908+ricky0614@users.noreply.github.com> Date: Mon, 24 Feb 2025 13:29:20 +0900 Subject: [PATCH 23/23] Update roi_heads.py --- detectron2/modeling/roi_heads/roi_heads.py | 1 + 1 file changed, 1 insertion(+) diff --git a/detectron2/modeling/roi_heads/roi_heads.py b/detectron2/modeling/roi_heads/roi_heads.py index 30569f6d69..7e0fb150ce 100644 --- a/detectron2/modeling/roi_heads/roi_heads.py +++ b/detectron2/modeling/roi_heads/roi_heads.py @@ -551,6 +551,7 @@ class StandardROIHeads(ROIHeads): def __init__( self, *, + cfg, #追加 box_in_features: List[str], box_pooler: ROIPooler, box_head: nn.Module,