Advertisement

遥感影像目标检测:Faster RCNN训练自己的数据集

阅读量:
在这里插入图片描述

前几篇文章介绍了如何应用Mask R-CNN对自身数据集进行训练,并详细说明了在Mask R-CNN架构中集成Point Rend模块的技术细节。主要采用了TorchVision官方提供的Mask R-CNN模型作为基础,在其基础上进行了优化与改进。由于该版本Mask R-CNN模型直接继承自Faster R-CNN框架,在此基础上进一步简述了基于该框架的数据集训练方法。

1、Faster RCNN模型获取
复制代码
    import torchvision
    from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
    
    def get_fasterrcnn(num_classes):
    model=torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=False)
    in_features=model.roi_heads.box_predictor.cls_score.in_features
    
    model.roi_heads.box_predictor=FastRCNNPredictor(in_features,num_classes)
    
    return model
2、数据读取

该文详细描述了数据读取方法的实现流程,在本项目中我们对该方法进行了适配性优化,并对其进行了必要的调整。由于faster rcnn相较于mask rcnn无需额外引入mask机制,在实际应用中可进一步简化代码逻辑。

复制代码
    class CrowAiBuildingDataset(torch.utils.data.Dataset):
    
    def __init__(self,images_dir,annotation_file,use_mask=False,transforms=None):
        self.images_dir=images_dir
        self.annotation_file=annotation_file
        self.transform=transforms
        self.use_mask=use_mask
        self.coco=COCO(self.annotation_file)
        self.class_Ids=self.coco.getCatIds()
        self.image_ids=self.coco.getImgIds()
    
    def __getitem__(self, i):
    
    
        annos = self.coco.getAnnIds(imgIds=[self.image_ids[i]], catIds=self.class_Ids, iscrowd=None)
        anns = self.coco.loadAnns(annos)
    
        img_name= self.coco.imgs[self.image_ids[i]]['file_name']
        image=cv2.imread(os.path.join(self.images_dir,img_name))
        image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    
        boxes=[]
        labels=[]
        masks=[]
    
        for ann in anns:
    
    
            seg=ann["segmentation"]
    
            x_points=seg[0][::2]
            y_points=seg[0][1::2]
            x11=min(x_points)
            x22=max(x_points)
            y11=min(y_points)
            y22=max(y_points)
    
            category_id=1
    
            if x11!=x22 and y11!=y22:
                bbox=[x11,y11,x22,y22]
                boxes.append(bbox)
                labels.append(category_id)
                if self.use_mask:
                    mask = self.coco.annToMask(ann)
                    masks.append(mask)
    
        image_id=torch.tensor([i])
        iscrowd=torch.zeros((len(annos),),dtype=torch.int64)
        #
        # print(boxes)
        boxes=torch.as_tensor(boxes,dtype=torch.float32)
    
        labels=torch.as_tensor(labels,dtype=torch.int64)
    
        if self.use_mask:
            masks=torch.as_tensor(masks,dtype=torch.uint8)
    
        area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])
        target={}
        target["boxes"]=boxes
        target["labels"]=labels
        if self.use_mask:
            target["masks"]=masks
        target["image_id"]=image_id
        target["iscrowd"]=iscrowd
        target["area"] = area
    
        if  self.transform is not None:
            image,target=self.transform(image,target)
    
        return image,target
    
    def __len__(self):
        return len(self.coco.getImgIds())
3、Colab测试

同样在Colab上做测试

复制代码
    loading annotations into memory...
    Done (t=1.12s)
    creating index...
    index created!
    loading annotations into memory...
    Done (t=0.15s)
    creating index...
    index created!
    Downloading: "https://download.pytorch.org/models/resnet50-19c8e357.pth" to /root/.cache/torch/hub/checkpoints/resnet50-19c8e357.pth
    100% 97.8M/97.8M [00:00<00:00, 233MB/s]
    FasterRCNN(
      (transform): GeneralizedRCNNTransform(
      Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
      Resize(min_size=(800,), max_size=1333, mode='bilinear')
      )
      (backbone): BackboneWithFPN(
    (body): IntermediateLayerGetter(
      (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
      (bn1): FrozenBatchNorm2d(64, eps=1e-05)
      (relu): ReLU(inplace=True)
      (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
      (layer1): Sequential(
        (0): Bottleneck(
          (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(64, eps=1e-05)
          (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(64, eps=1e-05)
          (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(256, eps=1e-05)
          (relu): ReLU(inplace=True)
          (downsample): Sequential(
            (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
            (1): FrozenBatchNorm2d(256, eps=1e-05)
          )
        )
        (1): Bottleneck(
          (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(64, eps=1e-05)
          (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(64, eps=1e-05)
          (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(256, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (2): Bottleneck(
          (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(64, eps=1e-05)
          (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(64, eps=1e-05)
          (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(256, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
      )
      (layer2): Sequential(
        (0): Bottleneck(
          (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(128, eps=1e-05)
          (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(128, eps=1e-05)
          (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(512, eps=1e-05)
          (relu): ReLU(inplace=True)
          (downsample): Sequential(
            (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)
            (1): FrozenBatchNorm2d(512, eps=1e-05)
          )
        )
        (1): Bottleneck(
          (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(128, eps=1e-05)
          (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(128, eps=1e-05)
          (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(512, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (2): Bottleneck(
          (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(128, eps=1e-05)
          (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(128, eps=1e-05)
          (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(512, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (3): Bottleneck(
          (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(128, eps=1e-05)
          (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(128, eps=1e-05)
          (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(512, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
      )
      (layer3): Sequential(
        (0): Bottleneck(
          (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(256, eps=1e-05)
          (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(256, eps=1e-05)
          (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(1024, eps=1e-05)
          (relu): ReLU(inplace=True)
          (downsample): Sequential(
            (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)
            (1): FrozenBatchNorm2d(1024, eps=1e-05)
          )
        )
        (1): Bottleneck(
          (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(256, eps=1e-05)
          (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(256, eps=1e-05)
          (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(1024, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (2): Bottleneck(
          (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(256, eps=1e-05)
          (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(256, eps=1e-05)
          (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(1024, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (3): Bottleneck(
          (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(256, eps=1e-05)
          (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(256, eps=1e-05)
          (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(1024, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (4): Bottleneck(
          (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(256, eps=1e-05)
          (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(256, eps=1e-05)
          (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(1024, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (5): Bottleneck(
          (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(256, eps=1e-05)
          (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(256, eps=1e-05)
          (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(1024, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
      )
      (layer4): Sequential(
        (0): Bottleneck(
          (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(512, eps=1e-05)
          (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(512, eps=1e-05)
          (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(2048, eps=1e-05)
          (relu): ReLU(inplace=True)
          (downsample): Sequential(
            (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)
            (1): FrozenBatchNorm2d(2048, eps=1e-05)
          )
        )
        (1): Bottleneck(
          (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(512, eps=1e-05)
          (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(512, eps=1e-05)
          (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(2048, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
        (2): Bottleneck(
          (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): FrozenBatchNorm2d(512, eps=1e-05)
          (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): FrozenBatchNorm2d(512, eps=1e-05)
          (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): FrozenBatchNorm2d(2048, eps=1e-05)
          (relu): ReLU(inplace=True)
        )
      )
    )
    (fpn): FeaturePyramidNetwork(
      (inner_blocks): ModuleList(
        (0): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))
        (1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
        (2): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))
        (3): Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))
      )
      (layer_blocks): ModuleList(
        (0): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (3): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
      )
      (extra_blocks): LastLevelMaxPool()
    )
      )
      (rpn): RegionProposalNetwork(
    (anchor_generator): AnchorGenerator()
    (head): RPNHead(
      (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
      (cls_logits): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))
      (bbox_pred): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))
    )
      )
      (roi_heads): RoIHeads(
    (box_roi_pool): MultiScaleRoIAlign(featmap_names=['0', '1', '2', '3'], output_size=(7, 7), sampling_ratio=2)
    (box_head): TwoMLPHead(
      (fc6): Linear(in_features=12544, out_features=1024, bias=True)
      (fc7): Linear(in_features=1024, out_features=1024, bias=True)
    )
    (box_predictor): FastRCNNPredictor(
      (cls_score): Linear(in_features=1024, out_features=2, bias=True)
      (bbox_pred): Linear(in_features=1024, out_features=8, bias=True)
    )
      )
    )
    start train
    end train
    Epoch: [0]  [  0/188]  eta: 0:32:24  lr: 0.000032  loss: 1.5538 (1.5538)  loss_classifier: 0.6203 (0.6203)  loss_box_reg: 0.0470 (0.0470)  loss_objectness: 0.6981 (0.6981)  loss_rpn_box_reg: 0.1885 (0.1885)  time: 10.3429  data: 8.7015  max mem: 5756
    Epoch: [0]  [  1/188]  eta: 0:20:57  lr: 0.000058  loss: 1.4923 (1.5231)  loss_classifier: 0.6203 (0.6222)  loss_box_reg: 0.0470 (0.0520)  loss_objectness: 0.6981 (0.6983)  loss_rpn_box_reg: 0.1128 (0.1507)  time: 6.7257  data: 5.1937  max mem: 6027
    Epoch: [0]  [  2/188]  eta: 0:17:03  lr: 0.000085  loss: 1.5538 (1.5604)  loss_classifier: 0.6241 (0.6244)  loss_box_reg: 0.0569 (0.0585)  loss_objectness: 0.6981 (0.6982)  loss_rpn_box_reg: 0.1885 (0.1793)  time: 5.5027  data: 4.0041  max mem: 6027
    Epoch: [0]  [  3/188]  eta: 0:15:01  lr: 0.000112  loss: 1.5538 (1.5710)  loss_classifier: 0.6203 (0.6221)  loss_box_reg: 0.0569 (0.0609)  loss_objectness: 0.6981 (0.6984)  loss_rpn_box_reg: 0.1885 (0.1897)  time: 4.8727  data: 3.3943  max mem: 6027
    Epoch: [0]  [  4/188]  eta: 0:13:47  lr: 0.000139  loss: 1.5538 (1.5554)  loss_classifier: 0.6203 (0.6174)  loss_box_reg: 0.0593 (0.0606)  loss_objectness: 0.6985 (0.6985)  loss_rpn_box_reg: 0.1885 (0.1790)  time: 4.5000  data: 3.0325  max mem: 6027
    Epoch: [0]  [  5/188]  eta: 0:13:01  lr: 0.000165  loss: 1.5344 (1.5519)  loss_classifier: 0.6152 (0.6129)  loss_box_reg: 0.0593 (0.0613)  loss_objectness: 0.6981 (0.6984)  loss_rpn_box_reg: 0.1812 (0.1793)  time: 4.2719  data: 2.8099  max mem: 6027
    Epoch: [0]  [  6/188]  eta: 0:12:25  lr: 0.000192  loss: 1.5344 (1.5468)  loss_classifier: 0.6152 (0.6070)  loss_box_reg: 0.0650 (0.0631)  loss_objectness: 0.6981 (0.6982)  loss_rpn_box_reg: 0.1812 (0.1785)  time: 4.0942  data: 2.6330  max mem: 6027
    Epoch: [0]  [  7/188]  eta: 0:11:56  lr: 0.000219  loss: 1.5344 (1.5468)  loss_classifier: 0.5987 (0.5984)  loss_box_reg: 0.0636 (0.0632)  loss_objectness: 0.6980 (0.6981)  loss_rpn_box_reg: 0.1812 (0.1871)  time: 3.9612  data: 2.5041  max mem: 6027
    Epoch: [0]  [  8/188]  eta: 0:11:35  lr: 0.000245  loss: 1.5462 (1.5520)  loss_classifier: 0.5987 (0.5853)  loss_box_reg: 0.0636 (0.0620)  loss_objectness: 0.6980 (0.6980)  loss_rpn_box_reg: 0.1885 (0.2067)  time: 3.8649  data: 2.4102  max mem: 6027
    Epoch: [0]  [  9/188]  eta: 0:11:17  lr: 0.000272  loss: 1.5344 (1.5351)  loss_classifier: 0.5903 (0.5729)  loss_box_reg: 0.0593 (0.0604)  loss_objectness: 0.6979 (0.6978)  loss_rpn_box_reg: 0.1812 (0.2040)  time: 3.7821  data: 2.3279  max mem: 6027
    Epoch: [0]  [ 10/188]  eta: 0:11:06  lr: 0.000299  loss: 1.5344 (1.5324)  loss_classifier: 0.5903 (0.5590)  loss_box_reg: 0.0636 (0.0622)  loss_objectness: 0.6979 (0.6975)  loss_rpn_box_reg: 0.1885 (0.2137)  time: 3.7434  data: 2.2846  max mem: 6027
    。。。。。。
    。。。。。。
    。。。。。。
    Epoch: [9]  [178/188]  eta: 0:00:16  lr: 0.000005  loss: 0.5915 (0.6527)  loss_classifier: 0.1692 (0.1772)  loss_box_reg: 0.3152 (0.3221)  loss_objectness: 0.0523 (0.0550)  loss_rpn_box_reg: 0.0832 (0.0984)  time: 1.6806  data: 0.0676  max mem: 6027
    Epoch: [9]  [179/188]  eta: 0:00:15  lr: 0.000005  loss: 0.5708 (0.6521)  loss_classifier: 0.1684 (0.1771)  loss_box_reg: 0.3128 (0.3218)  loss_objectness: 0.0523 (0.0550)  loss_rpn_box_reg: 0.0680 (0.0982)  time: 1.6807  data: 0.0671  max mem: 6027
    Epoch: [9]  [180/188]  eta: 0:00:13  lr: 0.000005  loss: 0.5794 (0.6517)  loss_classifier: 0.1684 (0.1770)  loss_box_reg: 0.3152 (0.3218)  loss_objectness: 0.0523 (0.0550)  loss_rpn_box_reg: 0.0653 (0.0979)  time: 1.6800  data: 0.0667  max mem: 6027
    Epoch: [9]  [181/188]  eta: 0:00:11  lr: 0.000005  loss: 0.5829 (0.6513)  loss_classifier: 0.1664 (0.1769)  loss_box_reg: 0.3166 (0.3219)  loss_objectness: 0.0523 (0.0549)  loss_rpn_box_reg: 0.0653 (0.0977)  time: 1.6792  data: 0.0661  max mem: 6027
    Epoch: [9]  [182/188]  eta: 0:00:10  lr: 0.000005  loss: 0.5829 (0.6516)  loss_classifier: 0.1664 (0.1769)  loss_box_reg: 0.3166 (0.3221)  loss_objectness: 0.0523 (0.0549)  loss_rpn_box_reg: 0.0653 (0.0976)  time: 1.6811  data: 0.0671  max mem: 6027
    Epoch: [9]  [183/188]  eta: 0:00:08  lr: 0.000005  loss: 0.5829 (0.6507)  loss_classifier: 0.1664 (0.1767)  loss_box_reg: 0.3152 (0.3219)  loss_objectness: 0.0523 (0.0549)  loss_rpn_box_reg: 0.0653 (0.0972)  time: 1.6801  data: 0.0678  max mem: 6027
    Epoch: [9]  [184/188]  eta: 0:00:06  lr: 0.000005  loss: 0.5829 (0.6502)  loss_classifier: 0.1664 (0.1765)  loss_box_reg: 0.3152 (0.3216)  loss_objectness: 0.0523 (0.0548)  loss_rpn_box_reg: 0.0653 (0.0972)  time: 1.6775  data: 0.0658  max mem: 6027
    Epoch: [9]  [185/188]  eta: 0:00:05  lr: 0.000005  loss: 0.5829 (0.6504)  loss_classifier: 0.1664 (0.1766)  loss_box_reg: 0.3152 (0.3220)  loss_objectness: 0.0525 (0.0548)  loss_rpn_box_reg: 0.0653 (0.0970)  time: 1.6757  data: 0.0638  max mem: 6027
    Epoch: [9]  [186/188]  eta: 0:00:03  lr: 0.000005  loss: 0.5829 (0.6502)  loss_classifier: 0.1664 (0.1766)  loss_box_reg: 0.3152 (0.3220)  loss_objectness: 0.0523 (0.0547)  loss_rpn_box_reg: 0.0649 (0.0968)  time: 1.6730  data: 0.0622  max mem: 6027
    Epoch: [9]  [187/188]  eta: 0:00:01  lr: 0.000005  loss: 0.5829 (0.6503)  loss_classifier: 0.1664 (0.1767)  loss_box_reg: 0.3152 (0.3223)  loss_objectness: 0.0482 (0.0546)  loss_rpn_box_reg: 0.0627 (0.0966)  time: 1.6307  data: 0.0606  max mem: 6027
    Epoch: [9] Total time: 0:05:16 (1.6816 s / it)
    creating index...
    index created!
    Test:  [ 0/40]  eta: 0:00:34  model_time: 0.7452 (0.7452)  evaluator_time: 0.0664 (0.0664)  time: 0.8550  data: 0.0399  max mem: 6027
    Test:  [39/40]  eta: 0:00:00  model_time: 0.7177 (0.7074)  evaluator_time: 0.0769 (0.0750)  time: 0.8301  data: 0.0314  max mem: 6027
    Test: Total time: 0:00:32 (0.8183 s / it)
    Averaged stats: model_time: 0.7177 (0.7074)  evaluator_time: 0.0769 (0.0750)
    Accumulating evaluation results...
    DONE (t=0.12s).
    IoU metric: bbox
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.496
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.816
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.541
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.190
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.617
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.512
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.083
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.482
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.581
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.345
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.688
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.643
4、结果测试
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~