|
@@ -795,6 +795,7 @@ class RoIHeads(nn.Module):
|
|
|
labels = None
|
|
labels = None
|
|
|
regression_targets = None
|
|
regression_targets = None
|
|
|
matched_idxs = None
|
|
matched_idxs = None
|
|
|
|
|
+ device=features['0'].device
|
|
|
|
|
|
|
|
box_features = self.box_roi_pool(features, proposals, image_shapes)
|
|
box_features = self.box_roi_pool(features, proposals, image_shapes)
|
|
|
box_features = self.box_head(box_features)
|
|
box_features = self.box_head(box_features)
|
|
@@ -893,31 +894,7 @@ class RoIHeads(nn.Module):
|
|
|
else:
|
|
else:
|
|
|
pos_matched_idxs = None
|
|
pos_matched_idxs = None
|
|
|
|
|
|
|
|
- print(f'line_proposals:{len(line_proposals)}')
|
|
|
|
|
-
|
|
|
|
|
- # cs_features= features['0']
|
|
|
|
|
- print(f'features-0:{features['0'].shape}')
|
|
|
|
|
- cs_features = self.channel_compress(features['0'])
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- filtered_proposals = [proposal for proposal in line_proposals if proposal.shape[0] > 0]
|
|
|
|
|
- if len(filtered_proposals) > 0:
|
|
|
|
|
- filtered_proposals_tensor=torch.cat(filtered_proposals)
|
|
|
|
|
- print(f'filtered_proposals_tensor:{filtered_proposals_tensor.shape}')
|
|
|
|
|
-
|
|
|
|
|
- line_proposals_tensor=torch.cat(line_proposals)
|
|
|
|
|
-
|
|
|
|
|
- print(f'line_proposals_tensor:{line_proposals_tensor.shape}')
|
|
|
|
|
-
|
|
|
|
|
- roi_features = features_align(cs_features, line_proposals, image_shapes)
|
|
|
|
|
-
|
|
|
|
|
- if roi_features is not None:
|
|
|
|
|
- print(f'line_features from align:{roi_features.shape}')
|
|
|
|
|
-
|
|
|
|
|
- feature_logits = self.line_head(roi_features)
|
|
|
|
|
- print(f'feature_logits from line_head:{feature_logits.shape}')
|
|
|
|
|
-
|
|
|
|
|
|
|
+ feature_logits = self.head_forward3(features, image_shapes, line_proposals)
|
|
|
|
|
|
|
|
loss_line = None
|
|
loss_line = None
|
|
|
loss_line_iou =None
|
|
loss_line_iou =None
|
|
@@ -951,11 +928,11 @@ class RoIHeads(nn.Module):
|
|
|
|
|
|
|
|
if loss_line is None:
|
|
if loss_line is None:
|
|
|
print(f'loss_line is None111')
|
|
print(f'loss_line is None111')
|
|
|
- loss_line = torch.tensor(0.0, device=cs_features.device)
|
|
|
|
|
|
|
+ loss_line = torch.tensor(0.0, device=device)
|
|
|
|
|
|
|
|
if loss_line_iou is None:
|
|
if loss_line_iou is None:
|
|
|
print(f'loss_line_iou is None111')
|
|
print(f'loss_line_iou is None111')
|
|
|
- loss_line_iou = torch.tensor(0.0, device=cs_features.device)
|
|
|
|
|
|
|
+ loss_line_iou = torch.tensor(0.0, device=device)
|
|
|
|
|
|
|
|
loss_line = {"loss_line": loss_line}
|
|
loss_line = {"loss_line": loss_line}
|
|
|
loss_line_iou = {'loss_line_iou': loss_line_iou}
|
|
loss_line_iou = {'loss_line_iou': loss_line_iou}
|
|
@@ -981,14 +958,13 @@ class RoIHeads(nn.Module):
|
|
|
img_size)
|
|
img_size)
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
if loss_line is None:
|
|
if loss_line is None:
|
|
|
print(f'loss_line is None')
|
|
print(f'loss_line is None')
|
|
|
- loss_line=torch.tensor(0.0,device=cs_features.device)
|
|
|
|
|
|
|
+ loss_line=torch.tensor(0.0,device=device)
|
|
|
|
|
|
|
|
if loss_line_iou is None:
|
|
if loss_line_iou is None:
|
|
|
print(f'loss_line_iou is None')
|
|
print(f'loss_line_iou is None')
|
|
|
- loss_line_iou=torch.tensor(0.0,device=cs_features.device)
|
|
|
|
|
|
|
+ loss_line_iou=torch.tensor(0.0,device=device)
|
|
|
|
|
|
|
|
|
|
|
|
|
loss_line = {"loss_line": loss_line}
|
|
loss_line = {"loss_line": loss_line}
|
|
@@ -1106,3 +1082,67 @@ class RoIHeads(nn.Module):
|
|
|
losses.update(loss_keypoint)
|
|
losses.update(loss_keypoint)
|
|
|
|
|
|
|
|
return result, losses
|
|
return result, losses
|
|
|
|
|
+
|
|
|
|
|
+ def head_forward1(self, features, image_shapes, line_proposals):
|
|
|
|
|
+ print(f'line_proposals:{len(line_proposals)}')
|
|
|
|
|
+ # cs_features= features['0']
|
|
|
|
|
+ print(f'features-0:{features['0'].shape}')
|
|
|
|
|
+ cs_features = self.channel_compress(features['0'])
|
|
|
|
|
+ filtered_proposals = [proposal for proposal in line_proposals if proposal.shape[0] > 0]
|
|
|
|
|
+ if len(filtered_proposals) > 0:
|
|
|
|
|
+ filtered_proposals_tensor = torch.cat(filtered_proposals)
|
|
|
|
|
+ print(f'filtered_proposals_tensor:{filtered_proposals_tensor.shape}')
|
|
|
|
|
+ line_proposals_tensor = torch.cat(line_proposals)
|
|
|
|
|
+ print(f'line_proposals_tensor:{line_proposals_tensor.shape}')
|
|
|
|
|
+ roi_features = features_align(cs_features, line_proposals, image_shapes)
|
|
|
|
|
+ if roi_features is not None:
|
|
|
|
|
+ print(f'line_features from align:{roi_features.shape}')
|
|
|
|
|
+ feature_logits = self.line_head(roi_features)
|
|
|
|
|
+ print(f'feature_logits from line_head:{feature_logits.shape}')
|
|
|
|
|
+ return feature_logits
|
|
|
|
|
+
|
|
|
|
|
+ def head_forward2(self, features, image_shapes, line_proposals):
|
|
|
|
|
+ print(f'line_proposals:{len(line_proposals)}')
|
|
|
|
|
+ # cs_features= features['0']
|
|
|
|
|
+ print(f'features-0:{features['0'].shape}')
|
|
|
|
|
+ # cs_features = self.channel_compress(features['0'])
|
|
|
|
|
+ cs_features=features['0']
|
|
|
|
|
+ filtered_proposals = [proposal for proposal in line_proposals if proposal.shape[0] > 0]
|
|
|
|
|
+
|
|
|
|
|
+ if len(filtered_proposals) > 0:
|
|
|
|
|
+ filtered_proposals_tensor = torch.cat(filtered_proposals)
|
|
|
|
|
+ print(f'filtered_proposals_tensor:{filtered_proposals_tensor.shape}')
|
|
|
|
|
+ line_proposals=filtered_proposals
|
|
|
|
|
+ line_proposals_tensor = torch.cat(line_proposals)
|
|
|
|
|
+ print(f'line_proposals_tensor:{line_proposals_tensor.shape}')
|
|
|
|
|
+
|
|
|
|
|
+ feature_logits = self.line_head(cs_features)
|
|
|
|
|
+ print(f'feature_logits from line_head:{feature_logits.shape}')
|
|
|
|
|
+
|
|
|
|
|
+ roi_features = features_align(cs_features, line_proposals, image_shapes)
|
|
|
|
|
+ if roi_features is not None:
|
|
|
|
|
+ print(f'roi_features from align:{roi_features.shape}')
|
|
|
|
|
+ return roi_features
|
|
|
|
|
+
|
|
|
|
|
+ def head_forward3(self, features, image_shapes, line_proposals):
|
|
|
|
|
+ print(f'line_proposals:{len(line_proposals)}')
|
|
|
|
|
+ # cs_features= features['0']
|
|
|
|
|
+ print(f'features-0:{features['0'].shape}')
|
|
|
|
|
+ # cs_features = self.channel_compress(features['0'])
|
|
|
|
|
+ cs_features=features['0']
|
|
|
|
|
+ filtered_proposals = [proposal for proposal in line_proposals if proposal.shape[0] > 0]
|
|
|
|
|
+
|
|
|
|
|
+ if len(filtered_proposals) > 0:
|
|
|
|
|
+ filtered_proposals_tensor = torch.cat(filtered_proposals)
|
|
|
|
|
+ print(f'filtered_proposals_tensor:{filtered_proposals_tensor.shape}')
|
|
|
|
|
+ line_proposals=filtered_proposals
|
|
|
|
|
+ line_proposals_tensor = torch.cat(line_proposals)
|
|
|
|
|
+ print(f'line_proposals_tensor:{line_proposals_tensor.shape}')
|
|
|
|
|
+
|
|
|
|
|
+ feature_logits = self.line_predictor(cs_features)
|
|
|
|
|
+ print(f'feature_logits from line_head:{feature_logits.shape}')
|
|
|
|
|
+
|
|
|
|
|
+ roi_features = features_align(cs_features, line_proposals, image_shapes)
|
|
|
|
|
+ if roi_features is not None:
|
|
|
|
|
+ print(f'roi_features from align:{roi_features.shape}')
|
|
|
|
|
+ return roi_features
|