fixed training speed problem
This commit is contained in:
		
							parent
							
								
									c2b1e5c0fa
								
							
						
					
					
						commit
						b4eb23917e
					
				
							
								
								
									
										42
									
								
								utils.py
								
								
								
								
							
							
						
						
									
										42
									
								
								utils.py
								
								
								
								
							| 
						 | 
				
			
			@ -142,22 +142,40 @@ def compute_iou(anchors, bboxes):
 | 
			
		|||
    Outputs:
 | 
			
		||||
    - iou: IoU matrix of shape (M, N)
 | 
			
		||||
    """
 | 
			
		||||
    iou = torch.zeros((anchors.shape[0], bboxes.shape[0]))
 | 
			
		||||
    iou = iou.to(anchors.device)
 | 
			
		||||
    iou = None
 | 
			
		||||
    ##############################################################################
 | 
			
		||||
    # TODO: Given anchors and gt bboxes,                                         #
 | 
			
		||||
    # compute the iou between each anchor and gt bbox.                           #
 | 
			
		||||
    ##############################################################################
 | 
			
		||||
    for i in range(anchors.shape[0]):
 | 
			
		||||
        for j in range(bboxes.shape[0]):
 | 
			
		||||
            x1 = max(anchors[i][0], bboxes[j][0])
 | 
			
		||||
            y1 = max(anchors[i][1], bboxes[j][1])
 | 
			
		||||
            x2 = min(anchors[i][2], bboxes[j][2])
 | 
			
		||||
            y2 = min(anchors[i][3], bboxes[j][3])
 | 
			
		||||
            inter = max(0, x2 - x1) * max(0, y2 - y1)
 | 
			
		||||
            area1 = (anchors[i][2] - anchors[i][0]) * (anchors[i][3] - anchors[i][1])
 | 
			
		||||
            area2 = (bboxes[j][2] - bboxes[j][0]) * (bboxes[j][3] - bboxes[j][1])
 | 
			
		||||
            iou[i][j] = inter / (area1 + area2 - inter)
 | 
			
		||||
 | 
			
		||||
    M = anchors.shape[0]
 | 
			
		||||
    N = bboxes.shape[0]
 | 
			
		||||
    # Extract the coordinates of the anchors and bboxes
 | 
			
		||||
    # Expand dimensions to compute pairwise IoU
 | 
			
		||||
    anchors = anchors.reshape(M, 1, 4)  
 | 
			
		||||
    bboxes = bboxes.reshape(1, N, 4)    
 | 
			
		||||
    #extract (x,y) of left_down and right_up points
 | 
			
		||||
    x1_a, y1_a, x2_a, y2_a = anchors[:,:, 0], anchors[:,:, 1], anchors[:,:, 2], anchors[:,:, 3]
 | 
			
		||||
    x1_b, y1_b, x2_b, y2_b = bboxes[:,:, 0], bboxes[:,:, 1], bboxes[:,:, 2], bboxes[:,:, 3]
 | 
			
		||||
 | 
			
		||||
    # Compute the intersection coordinates
 | 
			
		||||
    inter_x1 = torch.max(x1_a, x1_b)
 | 
			
		||||
    inter_y1 = torch.max(y1_a, y1_b)
 | 
			
		||||
    inter_x2 = torch.min(x2_a, x2_b)
 | 
			
		||||
    inter_y2 = torch.min(y2_a, y2_b)
 | 
			
		||||
    
 | 
			
		||||
    # Compute the intersection area
 | 
			
		||||
    inter_area = torch.clamp(inter_x2 - inter_x1,min=0) * torch.clamp(inter_y2 - inter_y1,min=0)
 | 
			
		||||
    
 | 
			
		||||
    # Compute the area of anchors and bboxes
 | 
			
		||||
    anchor_area = (x2_a - x1_a) * (y2_a - y1_a)  # Shape (M, 1)
 | 
			
		||||
    bbox_area = (x2_b - x1_b) * (y2_b - y1_b)    # Shape (1, N)
 | 
			
		||||
    
 | 
			
		||||
    # Compute the union area
 | 
			
		||||
    union_area = anchor_area + bbox_area - inter_area
 | 
			
		||||
    
 | 
			
		||||
    # Compute IoU
 | 
			
		||||
    iou = inter_area / union_area
 | 
			
		||||
 | 
			
		||||
    ##############################################################################
 | 
			
		||||
    #                               END OF YOUR CODE                             #
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue