@@ -412,12 +412,12 @@ class RegionLayerImpl CV_FINAL : public RegionLayer
412
412
auto scale_x_y_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , ngraph::Shape{1 }, &scale_x_y);
413
413
auto shift_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , ngraph::Shape{1 }, std::vector<float >{0.5 });
414
414
415
+ auto axis = ngraph::op::Constant::create<int64_t >(ngraph::element::i64 , ngraph::Shape{}, {0 });
416
+ auto splits = ngraph::op::Constant::create<int64_t >(ngraph::element::i64 , ngraph::Shape{5 }, {1 , 1 , 1 , 1 , rows - 4 });
417
+ auto split = std::make_shared<ngraph::op::v1::VariadicSplit>(input2d, axis, splits);
415
418
std::shared_ptr<ngraph::Node> box_x;
416
419
{
417
- auto lower_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{0 , 0 });
418
- auto upper_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{1 , cols});
419
- box_x = std::make_shared<ngraph::op::v1::StridedSlice>(input2d, lower_bounds, upper_bounds, strides, std::vector<int64_t >{}, std::vector<int64_t >{});
420
- box_x = std::make_shared<ngraph::op::Sigmoid>(box_x);
420
+ box_x = std::make_shared<ngraph::op::Sigmoid>(split->output (0 ));
421
421
box_x = std::make_shared<ngraph::op::v1::Subtract>(box_x, shift_node, ngraph::op::AutoBroadcastType::NUMPY);
422
422
box_x = std::make_shared<ngraph::op::v1::Multiply>(box_x, scale_x_y_node, ngraph::op::AutoBroadcastType::NUMPY);
423
423
box_x = std::make_shared<ngraph::op::v1::Add>(box_x, shift_node, ngraph::op::AutoBroadcastType::NUMPY);
@@ -443,10 +443,7 @@ class RegionLayerImpl CV_FINAL : public RegionLayer
443
443
444
444
std::shared_ptr<ngraph::Node> box_y;
445
445
{
446
- auto lower_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{1 , 0 });
447
- auto upper_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{2 , cols});
448
- box_y = std::make_shared<ngraph::op::v1::StridedSlice>(input2d, lower_bounds, upper_bounds, strides, std::vector<int64_t >{}, std::vector<int64_t >{});
449
- box_y = std::make_shared<ngraph::op::Sigmoid>(box_y);
446
+ box_y = std::make_shared<ngraph::op::Sigmoid>(split->output (1 ));
450
447
box_y = std::make_shared<ngraph::op::v1::Subtract>(box_y, shift_node, ngraph::op::AutoBroadcastType::NUMPY);
451
448
box_y = std::make_shared<ngraph::op::v1::Multiply>(box_y, scale_x_y_node, ngraph::op::AutoBroadcastType::NUMPY);
452
449
box_y = std::make_shared<ngraph::op::v1::Add>(box_y, shift_node, ngraph::op::AutoBroadcastType::NUMPY);
@@ -499,45 +496,32 @@ class RegionLayerImpl CV_FINAL : public RegionLayer
499
496
std::copy (bias_h.begin (), bias_h.begin () + h * anchors, bias_h.begin () + i * h * anchors);
500
497
}
501
498
502
- auto lower_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{2 , 0 });
503
- auto upper_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{3 , cols});
504
- box_w = std::make_shared<ngraph::op::v1::StridedSlice>(input2d, lower_bounds, upper_bounds, strides, std::vector<int64_t >{}, std::vector<int64_t >{});
505
- box_w = std::make_shared<ngraph::op::v0::Exp>(box_w);
499
+ box_w = std::make_shared<ngraph::op::v0::Exp>(split->output (2 ));
506
500
box_w = std::make_shared<ngraph::op::v1::Reshape>(box_w, shape_3d, true );
507
501
auto anchor_w_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , box_broad_shape, bias_w.data ());
508
502
box_w = std::make_shared<ngraph::op::v1::Multiply>(box_w, anchor_w_node, ngraph::op::AutoBroadcastType::NUMPY);
509
503
510
- lower_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{3 , 0 });
511
- upper_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{4 , cols});
512
- box_h = std::make_shared<ngraph::op::v1::StridedSlice>(input2d, lower_bounds, upper_bounds, strides, std::vector<int64_t >{}, std::vector<int64_t >{});
513
- box_h = std::make_shared<ngraph::op::v0::Exp>(box_h);
504
+ box_h = std::make_shared<ngraph::op::v0::Exp>(split->output (3 ));
514
505
box_h = std::make_shared<ngraph::op::v1::Reshape>(box_h, shape_3d, true );
515
506
auto anchor_h_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , box_broad_shape, bias_h.data ());
516
507
box_h = std::make_shared<ngraph::op::v1::Multiply>(box_h, anchor_h_node, ngraph::op::AutoBroadcastType::NUMPY);
517
508
}
518
509
510
+ auto region_splits = ngraph::op::Constant::create<int64_t >(ngraph::element::i64 , ngraph::Shape{3 }, {4 , 1 , rows - 5 });
511
+ auto region_split = std::make_shared<ngraph::op::v1::VariadicSplit>(region, axis, region_splits);
512
+
519
513
std::shared_ptr<ngraph::Node> scale;
520
514
{
521
- auto lower_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{4 , 0 });
522
- auto upper_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{5 , cols});
523
- scale = std::make_shared<ngraph::op::v1::StridedSlice>(region, lower_bounds, upper_bounds, strides, std::vector<int64_t >{}, std::vector<int64_t >{});
524
-
525
- if (classfix == -1 )
526
- {
527
- auto thresh_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , ngraph::Shape{1 }, std::vector<float >{0.5 });
528
- auto mask = std::make_shared<ngraph::op::v1::Less>(scale, thresh_node);
529
- auto zero_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , mask->get_shape (), std::vector<float >(b * cols, 0 ));
530
- scale = std::make_shared<ngraph::op::v1::Select>(mask, scale, zero_node);
531
- }
515
+ float thr = classfix == -1 ? 0.5 : 0 ;
516
+ auto thresh_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , ngraph::Shape{1 }, std::vector<float >{thr});
517
+ auto mask = std::make_shared<ngraph::op::v1::Less>(region_split->output (1 ), thresh_node);
518
+ auto zero_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , mask->get_shape (), std::vector<float >(cols, 0 ));
519
+ scale = std::make_shared<ngraph::op::v1::Select>(mask, zero_node, region_split->output (1 ));
532
520
}
533
521
534
522
std::shared_ptr<ngraph::Node> probs;
535
523
{
536
- auto lower_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{5 , 0 });
537
- auto upper_bounds = std::make_shared<ngraph::op::Constant>(ngraph::element::i64 , ngraph::Shape{2 }, std::vector<int64_t >{rows, cols});
538
- auto classes = std::make_shared<ngraph::op::v1::StridedSlice>(region, lower_bounds, upper_bounds, strides, std::vector<int64_t >{}, std::vector<int64_t >{});
539
- probs = std::make_shared<ngraph::op::v1::Multiply>(classes, scale, ngraph::op::AutoBroadcastType::NUMPY);
540
-
524
+ probs = std::make_shared<ngraph::op::v1::Multiply>(region_split->output (2 ), scale, ngraph::op::AutoBroadcastType::NUMPY);
541
525
auto thresh_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , ngraph::Shape{1 }, &thresh);
542
526
auto mask = std::make_shared<ngraph::op::v1::Greater>(probs, thresh_node);
543
527
auto zero_node = std::make_shared<ngraph::op::Constant>(ngraph::element::f32 , mask->get_shape (), std::vector<float >((rows - 5 ) * cols, 0 ));
0 commit comments