1. 程式人生 > >ssd-caffe中的annotationDatum資料結構

ssd-caffe中的annotationDatum資料結構

這篇部落格講解的非常好,我這裡只是搬運和總結

SSD目標檢測lmdb資料結構剖析

先看一張圖,完美解釋了AnnotationDatum的資料結構。

 

um的資料結,SSD讀取資料,需要將label和圖片封裝到一個數據結構下,這時候老版本caffe的Datum資料結構不夠用了

我們來看看caffe-ssd的 AnnotatedDatum資料

先看 caffe.proto檔案(protubuf,不懂的得先了解一下protobuf)

// The normalized bounding box [0, 1] w.r.t. the input image size.
message NormalizedBBox {
  optional float xmin = 1;
  optional float ymin = 2;
  optional float xmax = 3;
  optional float ymax = 4;
  optional int32 label = 5;
  optional bool difficult = 6;
  optional float score = 7;
  optional float size = 8;
}

// Annotation for each object instance.
message Annotation {
  optional int32 instance_id = 1 [default = 0];
  optional NormalizedBBox bbox = 2;
}

// Group of annotations for a particular label.
message AnnotationGroup {
  optional int32 group_label = 1;
  repeated Annotation annotation = 2;
}

// An extension of Datum which contains "rich" annotations.
message AnnotatedDatum {
  enum AnnotationType {
    BBOX = 0;
  }
  optional Datum datum = 1;
  // If there are "rich" annotations, specify the type of annotation.
  // Currently it only supports bounding box.
  // If there are no "rich" annotations, use label in datum instead.
  optional AnnotationType type = 2;
  // Each group contains annotation for a particular class.
  repeated AnnotationGroup annotation_group = 3;
}

我們可以看到,AnnotationDatum下包含AnnotationType、Datum和AnnotationGroup三個結構

其中Datum結構用於存放圖片資訊,和老版本caffe的Datum是一樣的,.

AnnotationGroup裡面包含grouplabel和Annotation結構

Annotation結構裡又包含 instance_id和NormalizedBBox結構