遥感影像目标检测: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)
还没有任何评论哟~
