MCPcopy Create free account
hub / github.com/Oneflow-Inc/oneflow / Parse

Method Parse

oneflow/user/data/coco_parser.cpp:23–93  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21namespace data {
22
23void COCOParser::Parse(BatchType& batch_data, user_op::KernelComputeContext* ctx) {
24 user_op::Tensor* image_tensor = ctx->Tensor4ArgNameAndIndex("image", 0);
25 CHECK_NOTNULL(image_tensor);
26 user_op::Tensor* image_id_tensor = ctx->Tensor4ArgNameAndIndex("image_id", 0);
27 user_op::Tensor* image_size_tensor = ctx->Tensor4ArgNameAndIndex("image_size", 0);
28 user_op::Tensor* bbox_tensor = ctx->Tensor4ArgNameAndIndex("gt_bbox", 0);
29 user_op::Tensor* label_tensor = ctx->Tensor4ArgNameAndIndex("gt_label", 0);
30 user_op::Tensor* segm_tensor = ctx->Tensor4ArgNameAndIndex("gt_segm", 0);
31 user_op::Tensor* segm_index_tensor = ctx->Tensor4ArgNameAndIndex("gt_segm_index", 0);
32
33 MultiThreadLoop(batch_data.size(), [&](size_t i) {
34 TensorBuffer* image_buffer = image_tensor->mut_dptr<TensorBuffer>() + i;
35 COCOImage& image = batch_data[i];
36 image_buffer->Swap(image.data);
37 if (image_size_tensor) {
38 auto* image_size_ptr = image_size_tensor->mut_dptr<int32_t>() + i * 2;
39 image_size_ptr[0] = meta_->GetImageHeight(image.index);
40 image_size_ptr[1] = meta_->GetImageWidth(image.index);
41 }
42 if (image_id_tensor) {
43 auto* image_id_ptr = image_id_tensor->mut_dptr<int64_t>();
44 image_id_ptr[i] = image.id;
45 }
46 if (bbox_tensor) {
47 TensorBuffer* bbox_buffer = bbox_tensor->mut_dptr<TensorBuffer>() + i;
48 const auto& bbox_vec = meta_->GetBboxVec<float>(image.index);
49 CHECK_EQ(bbox_vec.size() % 4, 0);
50 int64_t num_bboxes = bbox_vec.size() / 4;
51 bbox_buffer->Resize(Shape({num_bboxes, 4}), DataType::kFloat);
52 std::copy(bbox_vec.begin(), bbox_vec.end(), bbox_buffer->mut_data<float>());
53 }
54 if (label_tensor) {
55 TensorBuffer* label_buffer = label_tensor->mut_dptr<TensorBuffer>() + i;
56 const auto& label_vec = meta_->GetLabelVec<int32_t>(image.index);
57 label_buffer->Resize(Shape({static_cast<int64_t>(label_vec.size())}), DataType::kInt32);
58 std::copy(label_vec.begin(), label_vec.end(), label_buffer->mut_data<int32_t>());
59 }
60 if (segm_tensor && segm_index_tensor) {
61 TensorBuffer* segm_buffer = segm_tensor->mut_dptr<TensorBuffer>() + i;
62 TensorBuffer* segm_index_buffer = segm_index_tensor->mut_dptr<TensorBuffer>() + i;
63 meta_->ReadSegmentationsToTensorBuffer<float>(image.index, segm_buffer, segm_index_buffer);
64 }
65 });
66 // dynamic batch size
67 if (image_tensor->shape_view().elem_cnt() != batch_data.size()) {
68 CHECK_EQ(image_tensor->shape_view().NumAxes(), 1);
69 image_tensor->mut_shape_view().Set(0, batch_data.size());
70 }
71 if (image_id_tensor && image_id_tensor->shape_view().At(0) != batch_data.size()) {
72 image_id_tensor->mut_shape_view().Set(0, batch_data.size());
73 }
74 if (image_size_tensor && image_size_tensor->shape_view().At(0) != batch_data.size()) {
75 image_size_tensor->mut_shape_view().Set(0, batch_data.size());
76 }
77 if (bbox_tensor && bbox_tensor->shape_view().elem_cnt() != batch_data.size()) {
78 CHECK_EQ(bbox_tensor->shape_view().NumAxes(), 1);
79 bbox_tensor->mut_shape_view().Set(0, batch_data.size());
80 }

Callers 11

CurrentResourceFunction · 0.45
EnvResourceFunction · 0.45
InferOpConfFunction · 0.45
GetFunctionConfigDefFunction · 0.45
GetScopeConfigDefFunction · 0.45
__init__Method · 0.45
SetScopeProtoStrFunction · 0.45
scope_proto_str_setterFunction · 0.45
scope_to_protoFunction · 0.45
ReadMethod · 0.45

Calls 15

MultiThreadLoopFunction · 0.85
SwapMethod · 0.80
GetImageHeightMethod · 0.80
GetImageWidthMethod · 0.80
ShapeClass · 0.50
sizeMethod · 0.45
ResizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
elem_cntMethod · 0.45
shape_viewMethod · 0.45

Tested by

no test coverage detected