forked from huawei/mindspore2022
[MD] Transform api decouple
This commit is contained in:
parent
1d9f04e096
commit
9a57cbacd9
|
|
@ -32,6 +32,7 @@
|
|||
#endif
|
||||
#include "minddata/dataset/kernels/image/decode_op.h"
|
||||
#ifndef ENABLE_ANDROID
|
||||
#include "minddata/dataset/kernels/image/equalize_op.h"
|
||||
#include "minddata/dataset/kernels/image/hwc_to_chw_op.h"
|
||||
#include "minddata/dataset/kernels/image/invert_op.h"
|
||||
#include "minddata/dataset/kernels/image/mixup_batch_op.h"
|
||||
|
|
@ -49,7 +50,10 @@
|
|||
#include "minddata/dataset/kernels/image/random_horizontal_flip_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_horizontal_flip_with_bbox_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_posterize_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_resize_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_resize_with_bbox_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_rotation_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_select_subpolicy_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_sharpness_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_solarize_op.h"
|
||||
#include "minddata/dataset/kernels/image/random_vertical_flip_op.h"
|
||||
|
|
@ -61,6 +65,8 @@
|
|||
#include "minddata/dataset/kernels/image/resize_with_bbox_op.h"
|
||||
#include "minddata/dataset/kernels/image/rgba_to_bgr_op.h"
|
||||
#include "minddata/dataset/kernels/image/rgba_to_rgb_op.h"
|
||||
#include "minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_random_crop_resize_jpeg_op.h"
|
||||
#include "minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_resize_jpeg_op.h"
|
||||
#include "minddata/dataset/kernels/image/swap_red_blue_op.h"
|
||||
#include "minddata/dataset/kernels/image/uniform_aug_op.h"
|
||||
#endif
|
||||
|
|
@ -78,10 +84,7 @@ namespace vision {
|
|||
std::shared_ptr<AutoContrastOperation> AutoContrast(float cutoff, std::vector<uint32_t> ignore) {
|
||||
auto op = std::make_shared<AutoContrastOperation>(cutoff, ignore);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create BoundingBoxAugmentOperation.
|
||||
|
|
@ -89,20 +92,14 @@ std::shared_ptr<BoundingBoxAugmentOperation> BoundingBoxAugment(std::shared_ptr<
|
|||
float ratio) {
|
||||
auto op = std::make_shared<BoundingBoxAugmentOperation>(transform, ratio);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create CenterCropOperation.
|
||||
std::shared_ptr<CenterCropOperation> CenterCrop(std::vector<int32_t> size) {
|
||||
auto op = std::make_shared<CenterCropOperation>(size);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -110,80 +107,63 @@ std::shared_ptr<CenterCropOperation> CenterCrop(std::vector<int32_t> size) {
|
|||
std::shared_ptr<CropOperation> Crop(std::vector<int32_t> coordinates, std::vector<int32_t> size) {
|
||||
auto op = std::make_shared<CropOperation>(coordinates, size);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
#ifndef ENABLE_ANDROID
|
||||
// Function to create CutMixBatchOperation.
|
||||
std::shared_ptr<CutMixBatchOperation> CutMixBatch(ImageBatchFormat image_batch_format, float alpha, float prob) {
|
||||
auto op = std::make_shared<CutMixBatchOperation>(image_batch_format, alpha, prob);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create CutOutOp.
|
||||
std::shared_ptr<CutOutOperation> CutOut(int32_t length, int32_t num_patches) {
|
||||
auto op = std::make_shared<CutOutOperation>(length, num_patches);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create DecodeOperation.
|
||||
std::shared_ptr<DecodeOperation> Decode(bool rgb) {
|
||||
auto op = std::make_shared<DecodeOperation>(rgb);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create EqualizeOperation.
|
||||
std::shared_ptr<EqualizeOperation> Equalize() {
|
||||
auto op = std::make_shared<EqualizeOperation>();
|
||||
// Input validation
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create HwcToChwOperation.
|
||||
std::shared_ptr<HwcToChwOperation> HWC2CHW() {
|
||||
auto op = std::make_shared<HwcToChwOperation>();
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create InvertOperation.
|
||||
std::shared_ptr<InvertOperation> Invert() {
|
||||
auto op = std::make_shared<InvertOperation>();
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create MixUpBatchOperation.
|
||||
std::shared_ptr<MixUpBatchOperation> MixUpBatch(float alpha) {
|
||||
auto op = std::make_shared<MixUpBatchOperation>(alpha);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create NormalizeOperation.
|
||||
std::shared_ptr<NormalizeOperation> Normalize(std::vector<float> mean, std::vector<float> std) {
|
||||
auto op = std::make_shared<NormalizeOperation>(mean, std);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create PadOperation.
|
||||
|
|
@ -191,10 +171,7 @@ std::shared_ptr<PadOperation> Pad(std::vector<int32_t> padding, std::vector<uint
|
|||
BorderType padding_mode) {
|
||||
auto op = std::make_shared<PadOperation>(padding, fill_value, padding_mode);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomAffineOperation.
|
||||
|
|
@ -207,20 +184,14 @@ std::shared_ptr<RandomAffineOperation> RandomAffine(const std::vector<float_t> &
|
|||
auto op = std::make_shared<RandomAffineOperation>(degrees, translate_range, scale_range, shear_ranges, interpolation,
|
||||
fill_value);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomColorOperation.
|
||||
std::shared_ptr<RandomColorOperation> RandomColor(float t_lb, float t_ub) {
|
||||
auto op = std::make_shared<RandomColorOperation>(t_lb, t_ub);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<TensorOp> RandomColorOperation::Build() {
|
||||
|
|
@ -234,10 +205,7 @@ std::shared_ptr<RandomColorAdjustOperation> RandomColorAdjust(std::vector<float>
|
|||
std::vector<float> saturation, std::vector<float> hue) {
|
||||
auto op = std::make_shared<RandomColorAdjustOperation>(brightness, contrast, saturation, hue);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomCropOperation.
|
||||
|
|
@ -246,10 +214,7 @@ std::shared_ptr<RandomCropOperation> RandomCrop(std::vector<int32_t> size, std::
|
|||
BorderType padding_mode) {
|
||||
auto op = std::make_shared<RandomCropOperation>(size, padding, pad_if_needed, fill_value, padding_mode);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomCropDecodeResizeOperation.
|
||||
|
|
@ -260,10 +225,7 @@ std::shared_ptr<RandomCropDecodeResizeOperation> RandomCropDecodeResize(std::vec
|
|||
int32_t max_attempts) {
|
||||
auto op = std::make_shared<RandomCropDecodeResizeOperation>(size, scale, ratio, interpolation, max_attempts);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomCropWithBBoxOperation.
|
||||
|
|
@ -272,40 +234,42 @@ std::shared_ptr<RandomCropWithBBoxOperation> RandomCropWithBBox(std::vector<int3
|
|||
BorderType padding_mode) {
|
||||
auto op = std::make_shared<RandomCropWithBBoxOperation>(size, padding, pad_if_needed, fill_value, padding_mode);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomHorizontalFlipOperation.
|
||||
std::shared_ptr<RandomHorizontalFlipOperation> RandomHorizontalFlip(float prob) {
|
||||
auto op = std::make_shared<RandomHorizontalFlipOperation>(prob);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomHorizontalFlipOperation.
|
||||
std::shared_ptr<RandomHorizontalFlipWithBBoxOperation> RandomHorizontalFlipWithBBox(float prob) {
|
||||
auto op = std::make_shared<RandomHorizontalFlipWithBBoxOperation>(prob);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomPosterizeOperation.
|
||||
std::shared_ptr<RandomPosterizeOperation> RandomPosterize(const std::vector<uint8_t> &bit_range) {
|
||||
auto op = std::make_shared<RandomPosterizeOperation>(bit_range);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomResizeOperation.
|
||||
std::shared_ptr<RandomResizeOperation> RandomResize(std::vector<int32_t> size) {
|
||||
auto op = std::make_shared<RandomResizeOperation>(size);
|
||||
// Input validation
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomResizeWithBBoxOperation.
|
||||
std::shared_ptr<RandomResizeWithBBoxOperation> RandomResizeWithBBox(std::vector<int32_t> size) {
|
||||
auto op = std::make_shared<RandomResizeWithBBoxOperation>(size);
|
||||
// Input validation
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomResizedCropOperation.
|
||||
|
|
@ -314,10 +278,7 @@ std::shared_ptr<RandomResizedCropOperation> RandomResizedCrop(std::vector<int32_
|
|||
int32_t max_attempts) {
|
||||
auto op = std::make_shared<RandomResizedCropOperation>(size, scale, ratio, interpolation, max_attempts);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomRotationOperation.
|
||||
|
|
@ -326,60 +287,50 @@ std::shared_ptr<RandomRotationOperation> RandomRotation(std::vector<float> degre
|
|||
std::vector<uint8_t> fill_value) {
|
||||
auto op = std::make_shared<RandomRotationOperation>(degrees, resample, expand, center, fill_value);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomSharpnessOperation.
|
||||
std::shared_ptr<RandomSharpnessOperation> RandomSharpness(std::vector<float> degrees) {
|
||||
auto op = std::make_shared<RandomSharpnessOperation>(degrees);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomSolarizeOperation.
|
||||
std::shared_ptr<RandomSolarizeOperation> RandomSolarize(std::vector<uint8_t> threshold) {
|
||||
auto op = std::make_shared<RandomSolarizeOperation>(threshold);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomSelectSubpolicyOperation.
|
||||
std::shared_ptr<RandomSelectSubpolicyOperation> RandomSelectSubpolicy(
|
||||
std::vector<std::vector<std::pair<std::shared_ptr<TensorOperation>, double>>> policy) {
|
||||
auto op = std::make_shared<RandomSelectSubpolicyOperation>(policy);
|
||||
// Input validation
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomVerticalFlipOperation.
|
||||
std::shared_ptr<RandomVerticalFlipOperation> RandomVerticalFlip(float prob) {
|
||||
auto op = std::make_shared<RandomVerticalFlipOperation>(prob);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RandomVerticalFlipWithBBoxOperation.
|
||||
std::shared_ptr<RandomVerticalFlipWithBBoxOperation> RandomVerticalFlipWithBBox(float prob) {
|
||||
auto op = std::make_shared<RandomVerticalFlipWithBBoxOperation>(prob);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RescaleOperation.
|
||||
std::shared_ptr<RescaleOperation> Rescale(float rescale, float shift) {
|
||||
auto op = std::make_shared<RescaleOperation>(rescale, shift);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -387,10 +338,7 @@ std::shared_ptr<RescaleOperation> Rescale(float rescale, float shift) {
|
|||
std::shared_ptr<ResizeOperation> Resize(std::vector<int32_t> size, InterpolationMode interpolation) {
|
||||
auto op = std::make_shared<ResizeOperation>(size, interpolation);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
#ifndef ENABLE_ANDROID
|
||||
|
|
@ -398,40 +346,43 @@ std::shared_ptr<ResizeOperation> Resize(std::vector<int32_t> size, Interpolation
|
|||
std::shared_ptr<ResizeWithBBoxOperation> ResizeWithBBox(std::vector<int32_t> size, InterpolationMode interpolation) {
|
||||
auto op = std::make_shared<ResizeWithBBoxOperation>(size, interpolation);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RgbaToBgrOperation.
|
||||
std::shared_ptr<RgbaToBgrOperation> RGBA2BGR() {
|
||||
auto op = std::make_shared<RgbaToBgrOperation>();
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create RgbaToRgbOperation.
|
||||
std::shared_ptr<RgbaToRgbOperation> RGBA2RGB() {
|
||||
auto op = std::make_shared<RgbaToRgbOperation>();
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create SoftDvppDecodeRandomCropResizeJpegOperation.
|
||||
std::shared_ptr<SoftDvppDecodeRandomCropResizeJpegOperation> SoftDvppDecodeRandomCropResizeJpeg(
|
||||
std::vector<int32_t> size, std::vector<float> scale, std::vector<float> ratio, int32_t max_attempts) {
|
||||
auto op = std::make_shared<SoftDvppDecodeRandomCropResizeJpegOperation>(size, scale, ratio, max_attempts);
|
||||
// Input validation
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create SoftDvppDecodeResizeJpegOperation.
|
||||
std::shared_ptr<SoftDvppDecodeResizeJpegOperation> SoftDvppDecodeResizeJpeg(std::vector<int32_t> size) {
|
||||
auto op = std::make_shared<SoftDvppDecodeResizeJpegOperation>(size);
|
||||
// Input validation
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create SwapRedBlueOperation.
|
||||
std::shared_ptr<SwapRedBlueOperation> SwapRedBlue() {
|
||||
auto op = std::make_shared<SwapRedBlueOperation>();
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
// Function to create UniformAugOperation.
|
||||
|
|
@ -439,10 +390,7 @@ std::shared_ptr<UniformAugOperation> UniformAugment(std::vector<std::shared_ptr<
|
|||
int32_t num_ops) {
|
||||
auto op = std::make_shared<UniformAugOperation>(transforms, num_ops);
|
||||
// Input validation
|
||||
if (!op->ValidateParams()) {
|
||||
return nullptr;
|
||||
}
|
||||
return op;
|
||||
return op->ValidateParams() ? op : nullptr;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -660,6 +608,7 @@ std::shared_ptr<TensorOp> CropOperation::Build() {
|
|||
|
||||
height = size_[0];
|
||||
width = size_[0];
|
||||
// User has specified crop_width.
|
||||
if (size_.size() == 2) {
|
||||
width = size_[1];
|
||||
}
|
||||
|
|
@ -722,6 +671,11 @@ Status DecodeOperation::ValidateParams() { return Status::OK(); }
|
|||
|
||||
std::shared_ptr<TensorOp> DecodeOperation::Build() { return std::make_shared<DecodeOp>(rgb_); }
|
||||
|
||||
// EqualizeOperation
|
||||
Status EqualizeOperation::ValidateParams() { return Status::OK(); }
|
||||
|
||||
std::shared_ptr<TensorOp> EqualizeOperation::Build() { return std::make_shared<EqualizeOp>(); }
|
||||
|
||||
// HwcToChwOperation
|
||||
Status HwcToChwOperation::ValidateParams() { return Status::OK(); }
|
||||
|
||||
|
|
@ -1417,11 +1371,80 @@ std::shared_ptr<TensorOp> RandomPosterizeOperation::Build() {
|
|||
return tensor_op;
|
||||
}
|
||||
|
||||
// RandomResizeOperation
|
||||
RandomResizeOperation::RandomResizeOperation(std::vector<int32_t> size) : size_(size) {}
|
||||
|
||||
Status RandomResizeOperation::ValidateParams() {
|
||||
// size
|
||||
if (size_.size() != 2 && size_.size() != 1) {
|
||||
std::string err_msg =
|
||||
"RandomResize: size must be a vector of one or two values, got: " + std::to_string(size_.size());
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (size_[0] <= 0 || (size_.size() == 2 && size_[1] <= 0)) {
|
||||
std::string err_msg = "RandomResize: size must only contain positive integers.";
|
||||
MS_LOG(ERROR) << "RandomResize: size must only contain positive integers, got: " << size_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
std::shared_ptr<TensorOp> RandomResizeOperation::Build() {
|
||||
// If size is a single value, the smaller edge of the image will be
|
||||
// resized to this value with the same image aspect ratio.
|
||||
int32_t height = size_[0];
|
||||
int32_t width = 0;
|
||||
|
||||
// User specified the width value.
|
||||
if (size_.size() == 2) {
|
||||
width = size_[1];
|
||||
}
|
||||
|
||||
std::shared_ptr<RandomResizeOp> tensor_op = std::make_shared<RandomResizeOp>(height, width);
|
||||
return tensor_op;
|
||||
}
|
||||
|
||||
// RandomResizeWithBBoxOperation
|
||||
RandomResizeWithBBoxOperation::RandomResizeWithBBoxOperation(std::vector<int32_t> size) : size_(size) {}
|
||||
|
||||
Status RandomResizeWithBBoxOperation::ValidateParams() {
|
||||
// size
|
||||
if (size_.size() != 2 && size_.size() != 1) {
|
||||
std::string err_msg =
|
||||
"RandomResizeWithBBox: size must be a vector of one or two values, got: " + std::to_string(size_.size());
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (size_[0] <= 0 || (size_.size() == 2 && size_[1] <= 0)) {
|
||||
std::string err_msg = "RandomResizeWithBBox: size must only contain positive integers.";
|
||||
MS_LOG(ERROR) << "RandomResizeWithBBox: size must only contain positive integers, got: " << size_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
std::shared_ptr<TensorOp> RandomResizeWithBBoxOperation::Build() {
|
||||
// If size is a single value, the smaller edge of the image will be
|
||||
// resized to this value with the same image aspect ratio.
|
||||
int32_t height = size_[0];
|
||||
int32_t width = 0;
|
||||
|
||||
// User specified the width value.
|
||||
if (size_.size() == 2) {
|
||||
width = size_[1];
|
||||
}
|
||||
|
||||
std::shared_ptr<RandomResizeWithBBoxOp> tensor_op = std::make_shared<RandomResizeWithBBoxOp>(height, width);
|
||||
return tensor_op;
|
||||
}
|
||||
|
||||
// RandomResizedCropOperation
|
||||
RandomResizedCropOperation::RandomResizedCropOperation(std::vector<int32_t> size, std::vector<float> scale,
|
||||
std::vector<float> ratio, InterpolationMode interpolation,
|
||||
int32_t max_attempts)
|
||||
: size_(size), scale_(scale), ratio_(ratio), interpolation_(interpolation), max_attempts_(max_attempts) {}
|
||||
|
||||
Status RandomResizedCropOperation::ValidateParams() {
|
||||
// size
|
||||
if (size_.size() != 2 && size_.size() != 1) {
|
||||
|
|
@ -1455,8 +1478,9 @@ Status RandomResizedCropOperation::ValidateParams() {
|
|||
}
|
||||
// ratio
|
||||
if (ratio_.size() != 2) {
|
||||
std::string err_msg = "RandomResizedCrop: ratio must be in the format of (min, max).";
|
||||
MS_LOG(ERROR) << "RandomResizedCrop: ratio must be in the format of (min, max), but got: " << ratio_;
|
||||
std::string err_msg =
|
||||
"RandomResizedCrop: ratio must be a vector of two values, got: " + std::to_string(ratio_.size());
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (ratio_[0] < 0 || ratio_[1] < 0) {
|
||||
|
|
@ -1470,12 +1494,23 @@ Status RandomResizedCropOperation::ValidateParams() {
|
|||
<< ratio_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
// max_attempts
|
||||
if (max_attempts_ < 1) {
|
||||
std::string err_msg =
|
||||
"RandomResizedCrop: max_attempts must be greater than or equal to 1, got: " + std::to_string(max_attempts_);
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
std::shared_ptr<TensorOp> RandomResizedCropOperation::Build() {
|
||||
int32_t height = size_[0], width = size_[0];
|
||||
if (size_.size() == 2) width = size_[1];
|
||||
int32_t height = size_[0];
|
||||
int32_t width = size_[0];
|
||||
// User specified the width value.
|
||||
if (size_.size() == 2) {
|
||||
width = size_[1];
|
||||
}
|
||||
std::shared_ptr<RandomCropAndResizeOp> tensor_op = std::make_shared<RandomCropAndResizeOp>(
|
||||
height, width, scale_[0], scale_[1], ratio_[0], ratio_[1], interpolation_, max_attempts_);
|
||||
return tensor_op;
|
||||
|
|
@ -1549,6 +1584,55 @@ std::shared_ptr<TensorOp> RandomRotationOperation::Build() {
|
|||
return tensor_op;
|
||||
}
|
||||
|
||||
// RandomSelectSubpolicyOperation.
|
||||
RandomSelectSubpolicyOperation::RandomSelectSubpolicyOperation(
|
||||
std::vector<std::vector<std::pair<std::shared_ptr<TensorOperation>, double>>> policy)
|
||||
: policy_(policy) {}
|
||||
|
||||
Status RandomSelectSubpolicyOperation::ValidateParams() {
|
||||
if (policy_.empty()) {
|
||||
std::string err_msg = "RandomSelectSubpolicy: policy must not be empty";
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
for (int32_t i = 0; i < policy_.size(); i++) {
|
||||
if (policy_[i].empty()) {
|
||||
std::string err_msg = "RandomSelectSubpolicy: policy[" + std::to_string(i) + "] must not be empty";
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
for (int32_t j = 0; j < policy_[i].size(); j++) {
|
||||
if (policy_[i][j].first == nullptr) {
|
||||
std::string transform_pos = "[" + std::to_string(i) + "]" + "[" + std::to_string(j) + "]";
|
||||
std::string err_msg = "RandomSelectSubpolicy: transform in policy" + transform_pos + " must not be null";
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (policy_[i][j].second < 0.0 || policy_[i][j].second > 1.0) {
|
||||
std::string transform_pos = "[" + std::to_string(i) + "]" + "[" + std::to_string(j) + "]";
|
||||
std::string err_msg = "RandomSelectSubpolicy: probability of transform in policy" + transform_pos +
|
||||
" must be between 0.0 and 1.0, got: " + std::to_string(policy_[i][j].second);
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
std::shared_ptr<TensorOp> RandomSelectSubpolicyOperation::Build() {
|
||||
std::vector<Subpolicy> policy_tensor_ops;
|
||||
for (int32_t i = 0; i < policy_.size(); i++) {
|
||||
Subpolicy sub_policy_tensor_ops;
|
||||
for (int32_t j = 0; j < policy_[i].size(); j++) {
|
||||
sub_policy_tensor_ops.push_back(std::make_pair(policy_[i][j].first->Build(), policy_[i][j].second));
|
||||
}
|
||||
policy_tensor_ops.push_back(sub_policy_tensor_ops);
|
||||
}
|
||||
std::shared_ptr<RandomSelectSubpolicyOp> tensor_op = std::make_shared<RandomSelectSubpolicyOp>(policy_tensor_ops);
|
||||
return tensor_op;
|
||||
}
|
||||
|
||||
// Function to create RandomSharpness.
|
||||
RandomSharpnessOperation::RandomSharpnessOperation(std::vector<float> degrees) : degrees_(degrees) {}
|
||||
|
||||
|
|
@ -1669,6 +1753,8 @@ Status ResizeOperation::ValidateParams() {
|
|||
}
|
||||
|
||||
std::shared_ptr<TensorOp> ResizeOperation::Build() {
|
||||
// If size is a single value, the smaller edge of the image will be
|
||||
// resized to this value with the same image aspect ratio.
|
||||
int32_t height = size_[0];
|
||||
int32_t width = 0;
|
||||
|
||||
|
|
@ -1730,6 +1816,115 @@ std::shared_ptr<TensorOp> RgbaToRgbOperation::Build() {
|
|||
return tensor_op;
|
||||
}
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpegOperation
|
||||
SoftDvppDecodeRandomCropResizeJpegOperation::SoftDvppDecodeRandomCropResizeJpegOperation(std::vector<int32_t> size,
|
||||
std::vector<float> scale,
|
||||
std::vector<float> ratio,
|
||||
int32_t max_attempts)
|
||||
: size_(size), scale_(scale), ratio_(ratio), max_attempts_(max_attempts) {}
|
||||
|
||||
Status SoftDvppDecodeRandomCropResizeJpegOperation::ValidateParams() {
|
||||
// size
|
||||
if (size_.size() != 2 && size_.size() != 1) {
|
||||
std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: size must be a vector of one or two values, got: " +
|
||||
std::to_string(size_.size());
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (size_[0] <= 0 || (size_.size() == 2 && size_[1] <= 0)) {
|
||||
std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: size must only contain positive integers.";
|
||||
MS_LOG(ERROR) << "SoftDvppDecodeRandomCropResizeJpeg: size must only contain positive integers, got: " << size_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
// scale
|
||||
if (scale_.size() != 2) {
|
||||
std::string err_msg =
|
||||
"SoftDvppDecodeRandomCropResizeJpeg: scale must be a vector of two values, got: " + std::to_string(scale_.size());
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (scale_[0] < 0 || scale_[1] < 0) {
|
||||
std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: scale must be greater than or equal to 0.";
|
||||
MS_LOG(ERROR) << "SoftDvppDecodeRandomCropResizeJpeg: scale must be greater than or equal to 0, got: " << scale_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (scale_[1] < scale_[0]) {
|
||||
std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: scale must be in the format of (min, max).";
|
||||
MS_LOG(ERROR) << "SoftDvppDecodeRandomCropResizeJpeg: scale must be in the format of (min, max), but got: "
|
||||
<< scale_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
// ratio
|
||||
if (ratio_.size() != 2) {
|
||||
std::string err_msg =
|
||||
"SoftDvppDecodeRandomCropResizeJpeg: ratio must be a vector of two values, got: " + std::to_string(ratio_.size());
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (ratio_[0] < 0 || ratio_[1] < 0) {
|
||||
std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: ratio must be greater than or equal to 0.";
|
||||
MS_LOG(ERROR) << "SoftDvppDecodeRandomCropResizeJpeg: ratio must be greater than or equal to 0, got: " << ratio_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
if (ratio_[1] < ratio_[0]) {
|
||||
std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: ratio must be in the format of (min, max).";
|
||||
MS_LOG(ERROR) << "SoftDvppDecodeRandomCropResizeJpeg: ratio must be in the format of (min, max), but got: "
|
||||
<< ratio_;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
// max_attempts
|
||||
if (max_attempts_ < 1) {
|
||||
std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: max_attempts must be greater than or equal to 1, got: " +
|
||||
std::to_string(max_attempts_);
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
std::shared_ptr<TensorOp> SoftDvppDecodeRandomCropResizeJpegOperation::Build() {
|
||||
int32_t height = size_[0];
|
||||
int32_t width = size_[0];
|
||||
// User specified the width value.
|
||||
if (size_.size() == 2) {
|
||||
width = size_[1];
|
||||
}
|
||||
|
||||
auto tensor_op = std::make_shared<SoftDvppDecodeRandomCropResizeJpegOp>(height, width, scale_[0], scale_[1],
|
||||
ratio_[0], ratio_[1], max_attempts_);
|
||||
return tensor_op;
|
||||
}
|
||||
|
||||
// SoftDvppDecodeResizeJpegOperation
|
||||
SoftDvppDecodeResizeJpegOperation::SoftDvppDecodeResizeJpegOperation(std::vector<int32_t> size) : size_(size) {}
|
||||
|
||||
Status SoftDvppDecodeResizeJpegOperation::ValidateParams() {
|
||||
// size
|
||||
if (size_.empty() || size_.size() > 2) {
|
||||
std::string err_msg =
|
||||
"SoftDvppDecodeResizeJpeg: size must be a vector of one or two values, got: " + std::to_string(size_.size());
|
||||
MS_LOG(ERROR) << err_msg;
|
||||
RETURN_STATUS_SYNTAX_ERROR(err_msg);
|
||||
}
|
||||
RETURN_IF_NOT_OK(ValidateVectorPositive("SoftDvppDecodeResizeJpeg", size_));
|
||||
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
std::shared_ptr<TensorOp> SoftDvppDecodeResizeJpegOperation::Build() {
|
||||
// If size is a single value, the smaller edge of the image will be
|
||||
// resized to this value with the same image aspect ratio.
|
||||
int32_t height = size_[0];
|
||||
int32_t width = 0;
|
||||
|
||||
// User specified the width value.
|
||||
if (size_.size() == 2) {
|
||||
width = size_[1];
|
||||
}
|
||||
std::shared_ptr<SoftDvppDecodeResizeJpegOp> tensor_op = std::make_shared<SoftDvppDecodeResizeJpegOp>(height, width);
|
||||
return tensor_op;
|
||||
}
|
||||
|
||||
// SwapRedBlueOperation.
|
||||
SwapRedBlueOperation::SwapRedBlueOperation() {}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@
|
|||
#ifndef MINDSPORE_CCSRC_MINDDATA_DATASET_INCLUDE_VISION_H_
|
||||
#define MINDSPORE_CCSRC_MINDDATA_DATASET_INCLUDE_VISION_H_
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
#include "minddata/dataset/core/constants.h"
|
||||
#include "minddata/dataset/include/transforms.h"
|
||||
|
|
@ -42,6 +44,7 @@ class CutOutOperation;
|
|||
#endif
|
||||
class DecodeOperation;
|
||||
#ifndef ENABLE_ANDROID
|
||||
class EqualizeOperation;
|
||||
class HwcToChwOperation;
|
||||
class InvertOperation;
|
||||
class MixUpBatchOperation;
|
||||
|
|
@ -58,8 +61,11 @@ class RandomCropWithBBoxOperation;
|
|||
class RandomHorizontalFlipOperation;
|
||||
class RandomHorizontalFlipWithBBoxOperation;
|
||||
class RandomPosterizeOperation;
|
||||
class RandomResizeOperation;
|
||||
class RandomResizeWithBBoxOperation;
|
||||
class RandomResizedCropOperation;
|
||||
class RandomRotationOperation;
|
||||
class RandomSelectSubpolicyOperation;
|
||||
class RandomSharpnessOperation;
|
||||
class RandomSolarizeOperation;
|
||||
class RandomVerticalFlipOperation;
|
||||
|
|
@ -71,6 +77,8 @@ class ResizeOperation;
|
|||
class ResizeWithBBoxOperation;
|
||||
class RgbaToBgrOperation;
|
||||
class RgbaToRgbOperation;
|
||||
class SoftDvppDecodeRandomCropResizeJpegOperation;
|
||||
class SoftDvppDecodeResizeJpegOperation;
|
||||
class SwapRedBlueOperation;
|
||||
class UniformAugOperation;
|
||||
|
||||
|
|
@ -129,6 +137,12 @@ std::shared_ptr<CutOutOperation> CutOut(int32_t length, int32_t num_patches = 1)
|
|||
std::shared_ptr<DecodeOperation> Decode(bool rgb = true);
|
||||
|
||||
#ifndef ENABLE_ANDROID
|
||||
|
||||
/// \brief Function to create a Equalize TensorOperation.
|
||||
/// \notes Apply histogram equalization on input image.
|
||||
/// \return Shared pointer to the current TensorOperation.
|
||||
std::shared_ptr<EqualizeOperation> Equalize();
|
||||
|
||||
/// \brief Function to create a HwcToChw TensorOperation.
|
||||
/// \notes Transpose the input image; shape (H, W, C) to shape (C, H, W).
|
||||
/// \return Shared pointer to the current TensorOperation.
|
||||
|
|
@ -296,6 +310,21 @@ std::shared_ptr<RandomHorizontalFlipWithBBoxOperation> RandomHorizontalFlipWithB
|
|||
/// \return Shared pointer to the current TensorOperation.
|
||||
std::shared_ptr<RandomPosterizeOperation> RandomPosterize(const std::vector<uint8_t> &bit_range = {4, 8});
|
||||
|
||||
/// \brief Function to create a RandomResize TensorOperation.
|
||||
/// \notes Resize the input image using a randomly selected interpolation mode.
|
||||
/// \param[in] size A vector representing the output size of the resized image.
|
||||
/// If size is a single value, the smaller edge of the image will be resized to this value with
|
||||
// the same image aspect ratio. If size has 2 values, it should be (height, width).
|
||||
std::shared_ptr<RandomResizeOperation> RandomResize(std::vector<int32_t> size);
|
||||
|
||||
/// \brief Function to create a RandomResizeWithBBox TensorOperation.
|
||||
/// \notes Resize the input image using a randomly selected interpolation mode and adjust
|
||||
/// bounding boxes accordingly.
|
||||
/// \param[in] size A vector representing the output size of the resized image.
|
||||
/// If size is a single value, the smaller edge of the image will be resized to this value with
|
||||
// the same image aspect ratio. If size has 2 values, it should be (height, width).
|
||||
std::shared_ptr<RandomResizeWithBBoxOperation> RandomResizeWithBBox(std::vector<int32_t> size);
|
||||
|
||||
/// \brief Function to create a RandomResizedCrop TensorOperation.
|
||||
/// \notes Crop the input image to a random size and aspect ratio.
|
||||
/// \param[in] size A vector representing the output size of the cropped image.
|
||||
|
|
@ -325,6 +354,15 @@ std::shared_ptr<RandomRotationOperation> RandomRotation(
|
|||
std::vector<float> degrees, InterpolationMode resample = InterpolationMode::kNearestNeighbour, bool expand = false,
|
||||
std::vector<float> center = {-1, -1}, std::vector<uint8_t> fill_value = {0, 0, 0});
|
||||
|
||||
/// \brief Function to create a RandomSelectSubpolicy TensorOperation.
|
||||
/// \notes Choose a random sub-policy from a list to be applied on the input image. A sub-policy is a list of tuples
|
||||
/// (op, prob), where op is a TensorOp operation and prob is the probability that this op will be applied. Once
|
||||
/// a sub-policy is selected, each op within the subpolicy with be applied in sequence according to its probability.
|
||||
/// \param[in] policy Vector of sub-policies to choose from.
|
||||
/// \return Shared pointer to the current TensorOperation.
|
||||
std::shared_ptr<RandomSelectSubpolicyOperation> RandomSelectSubpolicy(
|
||||
std::vector<std::vector<std::pair<std::shared_ptr<TensorOperation>, double>>> policy);
|
||||
|
||||
/// \brief Function to create a RandomSharpness TensorOperation.
|
||||
/// \notes Tensor operation to perform random sharpness.
|
||||
/// \param[in] degrees A float vector of size 2, representing the starting and ending degree to uniformly
|
||||
|
|
@ -390,6 +428,35 @@ std::shared_ptr<RgbaToBgrOperation> RGBA2BGR();
|
|||
/// \return Shared pointer to the current TensorOperation.
|
||||
std::shared_ptr<RgbaToRgbOperation> RGBA2RGB();
|
||||
|
||||
/// \brief Function to create a SoftDvppDecodeRandomCropResizeJpeg TensorOperation.
|
||||
/// \notes Tensor operation to decode, random crop and resize JPEG image using the simulation algorithm of
|
||||
/// Ascend series chip DVPP module. The usage scenario is consistent with SoftDvppDecodeResizeJpeg.
|
||||
/// The input image size should be in range [32*32, 8192*8192].
|
||||
/// The zoom-out and zoom-in multiples of the image length and width should in the range [1/32, 16].
|
||||
/// Only images with an even resolution can be output. The output of odd resolution is not supported.
|
||||
/// \param[in] size A vector representing the output size of the resized image.
|
||||
/// If size is a single value, smaller edge of the image will be resized to this value with
|
||||
/// the same image aspect ratio. If size has 2 values, it should be (height, width).
|
||||
/// \return Shared pointer to the current TensorOperation.
|
||||
std::shared_ptr<SoftDvppDecodeRandomCropResizeJpegOperation> SoftDvppDecodeRandomCropResizeJpeg(
|
||||
std::vector<int32_t> size, std::vector<float> scale = {0.08, 1.0}, std::vector<float> ratio = {3. / 4., 4. / 3.},
|
||||
int32_t max_attempts = 10);
|
||||
|
||||
/// \brief Function to create a SoftDvppDecodeResizeJpeg TensorOperation.
|
||||
/// \notes Tensor operation to decode and resize JPEG image using the simulation algorithm of Ascend series
|
||||
/// chip DVPP module. It is recommended to use this algorithm in the following scenarios:
|
||||
/// When training, the DVPP of the Ascend chip is not used,
|
||||
/// and the DVPP of the Ascend chip is used during inference,
|
||||
/// and the accuracy of inference is lower than the accuracy of training;
|
||||
/// and the input image size should be in range [32*32, 8192*8192].
|
||||
/// The zoom-out and zoom-in multiples of the image length and width should in the range [1/32, 16].
|
||||
/// Only images with an even resolution can be output. The output of odd resolution is not supported.
|
||||
/// \param[in] size A vector representing the output size of the resized image.
|
||||
/// If size is a single value, smaller edge of the image will be resized to this value with
|
||||
/// the same image aspect ratio. If size has 2 values, it should be (height, width).
|
||||
/// \return Shared pointer to the current TensorOperation.
|
||||
std::shared_ptr<SoftDvppDecodeResizeJpegOperation> SoftDvppDecodeResizeJpeg(std::vector<int32_t> size);
|
||||
|
||||
/// \brief Function to create a SwapRedBlue TensorOp
|
||||
/// \notes Swaps the red and blue channels in image
|
||||
/// \return Shared pointer to the current TensorOp
|
||||
|
|
@ -512,6 +579,15 @@ class DecodeOperation : public TensorOperation {
|
|||
};
|
||||
|
||||
#ifndef ENABLE_ANDROID
|
||||
class EqualizeOperation : public TensorOperation {
|
||||
public:
|
||||
~EqualizeOperation() = default;
|
||||
|
||||
std::shared_ptr<TensorOp> Build() override;
|
||||
|
||||
Status ValidateParams() override;
|
||||
};
|
||||
|
||||
class HwcToChwOperation : public TensorOperation {
|
||||
public:
|
||||
~HwcToChwOperation() = default;
|
||||
|
|
@ -735,6 +811,34 @@ class RandomPosterizeOperation : public TensorOperation {
|
|||
std::vector<uint8_t> bit_range_;
|
||||
};
|
||||
|
||||
class RandomResizeOperation : public TensorOperation {
|
||||
public:
|
||||
explicit RandomResizeOperation(std::vector<int32_t> size);
|
||||
|
||||
~RandomResizeOperation() = default;
|
||||
|
||||
std::shared_ptr<TensorOp> Build() override;
|
||||
|
||||
Status ValidateParams() override;
|
||||
|
||||
private:
|
||||
std::vector<int32_t> size_;
|
||||
};
|
||||
|
||||
class RandomResizeWithBBoxOperation : public TensorOperation {
|
||||
public:
|
||||
explicit RandomResizeWithBBoxOperation(std::vector<int32_t> size);
|
||||
|
||||
~RandomResizeWithBBoxOperation() = default;
|
||||
|
||||
std::shared_ptr<TensorOp> Build() override;
|
||||
|
||||
Status ValidateParams() override;
|
||||
|
||||
private:
|
||||
std::vector<int32_t> size_;
|
||||
};
|
||||
|
||||
class RandomResizedCropOperation : public TensorOperation {
|
||||
public:
|
||||
explicit RandomResizedCropOperation(std::vector<int32_t> size, std::vector<float> scale = {0.08, 1.0},
|
||||
|
|
@ -775,6 +879,21 @@ class RandomRotationOperation : public TensorOperation {
|
|||
std::vector<uint8_t> fill_value_;
|
||||
};
|
||||
|
||||
class RandomSelectSubpolicyOperation : public TensorOperation {
|
||||
public:
|
||||
explicit RandomSelectSubpolicyOperation(
|
||||
std::vector<std::vector<std::pair<std::shared_ptr<TensorOperation>, double>>> policy);
|
||||
|
||||
~RandomSelectSubpolicyOperation() = default;
|
||||
|
||||
std::shared_ptr<TensorOp> Build() override;
|
||||
|
||||
Status ValidateParams() override;
|
||||
|
||||
private:
|
||||
std::vector<std::vector<std::pair<std::shared_ptr<TensorOperation>, double>>> policy_;
|
||||
};
|
||||
|
||||
class RandomSharpnessOperation : public TensorOperation {
|
||||
public:
|
||||
explicit RandomSharpnessOperation(std::vector<float> degrees = {0.1, 1.9});
|
||||
|
|
@ -902,6 +1021,38 @@ class RgbaToRgbOperation : public TensorOperation {
|
|||
Status ValidateParams() override;
|
||||
};
|
||||
|
||||
class SoftDvppDecodeRandomCropResizeJpegOperation : public TensorOperation {
|
||||
public:
|
||||
explicit SoftDvppDecodeRandomCropResizeJpegOperation(std::vector<int32_t> size, std::vector<float> scale,
|
||||
std::vector<float> ratio, int32_t max_attempts);
|
||||
|
||||
~SoftDvppDecodeRandomCropResizeJpegOperation() = default;
|
||||
|
||||
std::shared_ptr<TensorOp> Build() override;
|
||||
|
||||
Status ValidateParams() override;
|
||||
|
||||
private:
|
||||
std::vector<int32_t> size_;
|
||||
std::vector<float> scale_;
|
||||
std::vector<float> ratio_;
|
||||
int32_t max_attempts_;
|
||||
};
|
||||
|
||||
class SoftDvppDecodeResizeJpegOperation : public TensorOperation {
|
||||
public:
|
||||
explicit SoftDvppDecodeResizeJpegOperation(std::vector<int32_t> size);
|
||||
|
||||
~SoftDvppDecodeResizeJpegOperation() = default;
|
||||
|
||||
std::shared_ptr<TensorOp> Build() override;
|
||||
|
||||
Status ValidateParams() override;
|
||||
|
||||
private:
|
||||
std::vector<int32_t> size_;
|
||||
};
|
||||
|
||||
class SwapRedBlueOperation : public TensorOperation {
|
||||
public:
|
||||
SwapRedBlueOperation();
|
||||
|
|
|
|||
|
|
@ -1260,7 +1260,7 @@ class SoftDvppDecodeRandomCropResizeJpeg(cde.SoftDvppDecodeRandomCropResizeJpegO
|
|||
Tensor operation to decode, random crop and resize JPEG image using the simulation algorithm of
|
||||
Ascend series chip DVPP module.
|
||||
|
||||
The usage scenario is consistent with SoftDvppDecodeReiszeJpeg.
|
||||
The usage scenario is consistent with SoftDvppDecodeResizeJpeg.
|
||||
The input image size should be in range [32*32, 8192*8192].
|
||||
The zoom-out and zoom-in multiples of the image length and width should in the range [1/32, 16].
|
||||
Only images with an even resolution can be output. The output of odd resolution is not supported.
|
||||
|
|
|
|||
|
|
@ -1640,6 +1640,208 @@ TEST_F(MindDataTestPipeline, TestRandomPosterizeSuccess2) {
|
|||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomResizeSuccess1) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomResizeSuccess1 with single integer input.";
|
||||
|
||||
// Create an ImageFolder Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testPK/data/";
|
||||
std::shared_ptr<Dataset> ds = ImageFolder(folder_path, true, RandomSampler(false, 5));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create objects for the tensor ops
|
||||
std::shared_ptr<TensorOperation> random_resize = vision::RandomResize({66});
|
||||
EXPECT_NE(random_resize, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({random_resize}, {"image"});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
EXPECT_EQ(image->shape()[0] == 66, true);
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 5);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomResizeSuccess2) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomResizeSuccess2 with (height, width) input.";
|
||||
|
||||
// Create an ImageFolder Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testPK/data/";
|
||||
std::shared_ptr<Dataset> ds = ImageFolder(folder_path, true, RandomSampler(false, 3));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create a Repeat operation on ds
|
||||
int32_t repeat_num = 2;
|
||||
ds = ds->Repeat(repeat_num);
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create objects for the tensor ops
|
||||
std::shared_ptr<TensorOperation> random_resize = vision::RandomResize({66, 77});
|
||||
EXPECT_NE(random_resize, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({random_resize}, {"image"});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
EXPECT_EQ(image->shape()[0] == 66 && image->shape()[1] == 77, true);
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 6);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomResizeFail) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomResizeFail incorrect size.";
|
||||
|
||||
// RandomResize : size must only contain positive integers
|
||||
std::shared_ptr<TensorOperation> random_resize1 = vision::RandomResize({-66, 77});
|
||||
EXPECT_EQ(random_resize1, nullptr);
|
||||
|
||||
// RandomResize : size must be a vector of one or two values
|
||||
std::shared_ptr<TensorOperation> random_resize2 = vision::RandomResize({1, 2, 3});
|
||||
EXPECT_EQ(random_resize2, nullptr);
|
||||
|
||||
// RandomResize : size must be a vector of one or two values
|
||||
std::shared_ptr<TensorOperation> random_resize3 = vision::RandomResize({});
|
||||
EXPECT_EQ(random_resize3, nullptr);
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomResizeWithBBoxSuccess1) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomResizeWithBBoxSuccess1 with single integer input.";
|
||||
|
||||
// Create an VOC Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testVOC2012_2";
|
||||
std::shared_ptr<Dataset> ds = VOC(folder_path, "Detection", "train", {}, true, SequentialSampler(0, 3));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create objects for the tensor ops
|
||||
std::shared_ptr<TensorOperation> random_resize = vision::RandomResizeWithBBox({88});
|
||||
EXPECT_NE(random_resize, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({random_resize}, {"image", "bbox"});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
EXPECT_EQ(image->shape()[0] == 88, true);
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 3);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomResizeWithBBoxSuccess2) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomResizeWithBBoxSuccess2 with (height, width) input.";
|
||||
|
||||
// Create an VOC Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testVOC2012_2";
|
||||
std::shared_ptr<Dataset> ds = VOC(folder_path, "Detection", "train", {}, true, SequentialSampler(0, 4));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create a Repeat operation on ds
|
||||
int32_t repeat_num = 2;
|
||||
ds = ds->Repeat(repeat_num);
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create objects for the tensor ops
|
||||
std::shared_ptr<TensorOperation> random_resize = vision::RandomResizeWithBBox({88, 99});
|
||||
EXPECT_NE(random_resize, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({random_resize}, {"image", "bbox"});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
EXPECT_EQ(image->shape()[0] == 88 && image->shape()[1] == 99, true);
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 8);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomResizeWithBBoxFail) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomResizeWithBBoxFail incorrect size.";
|
||||
|
||||
// RandomResizeWithBBox : size must only contain positive integers
|
||||
std::shared_ptr<TensorOperation> random_resize_with_bbox1 = vision::RandomResizeWithBBox({-66, 77});
|
||||
EXPECT_EQ(random_resize_with_bbox1, nullptr);
|
||||
|
||||
// RandomResizeWithBBox : size must be a vector of one or two values
|
||||
std::shared_ptr<TensorOperation> random_resize_with_bbox2 = vision::RandomResizeWithBBox({1, 2, 3});
|
||||
EXPECT_EQ(random_resize_with_bbox2, nullptr);
|
||||
|
||||
// RandomResizeWithBBox : size must be a vector of one or two values
|
||||
std::shared_ptr<TensorOperation> random_resize_with_bbox3 = vision::RandomResizeWithBBox({});
|
||||
EXPECT_EQ(random_resize_with_bbox3, nullptr);
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomResizedCropSuccess1) {
|
||||
// Testing RandomResizedCrop with default values
|
||||
// Create a Cifar10 Dataset
|
||||
|
|
@ -1864,6 +2066,75 @@ TEST_F(MindDataTestPipeline, TestRandomRotationFail) {
|
|||
EXPECT_EQ(random_rotation_op6, nullptr);
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomSelectSubpolicySuccess) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomSelectSubpolicySuccess.";
|
||||
|
||||
// Create an ImageFolder Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testPK/data/";
|
||||
std::shared_ptr<Dataset> ds = ImageFolder(folder_path, true, RandomSampler(false, 7));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create objects for the tensor ops
|
||||
// Valid case: TensorOperation is not null and probability is between (0,1)
|
||||
std::shared_ptr<TensorOperation> random_select_subpolicy = vision::RandomSelectSubpolicy(
|
||||
{{{vision::Invert(), 0.5}, {vision::Equalize(), 0.5}}, {{vision::Resize({15, 15}), 1}}});
|
||||
EXPECT_NE(random_select_subpolicy, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({random_select_subpolicy});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 7);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomSelectSubpolicyFail) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomSelectSubpolicyFail.";
|
||||
|
||||
// RandomSelectSubpolicy : probability of transform must be between 0.0 and 1.0
|
||||
std::shared_ptr<TensorOperation> random_select_subpolicy1 = vision::RandomSelectSubpolicy(
|
||||
{{{vision::Invert(), 1.5}, {vision::Equalize(), 0.5}}, {{vision::Resize({15, 15}), 1}}});
|
||||
EXPECT_EQ(random_select_subpolicy1, nullptr);
|
||||
|
||||
// RandomSelectSubpolicy: policy must not be empty
|
||||
std::shared_ptr<TensorOperation> random_select_subpolicy2 = vision::RandomSelectSubpolicy(
|
||||
{{{vision::Invert(), 0.5}, {vision::Equalize(), 0.5}}, {{nullptr, 1}}});
|
||||
EXPECT_EQ(random_select_subpolicy2, nullptr);
|
||||
|
||||
// RandomSelectSubpolicy: policy must not be empty
|
||||
std::shared_ptr<TensorOperation> random_select_subpolicy3 = vision::RandomSelectSubpolicy({});
|
||||
EXPECT_EQ(random_select_subpolicy3, nullptr);
|
||||
|
||||
// RandomSelectSubpolicy: policy must not be empty
|
||||
std::shared_ptr<TensorOperation> random_select_subpolicy4 = vision::RandomSelectSubpolicy(
|
||||
{{{vision::Invert(), 0.5}, {vision::Equalize(), 0.5}}, {}});
|
||||
EXPECT_EQ(random_select_subpolicy4, nullptr);
|
||||
|
||||
// RandomSelectSubpolicy: policy must not be empty
|
||||
std::shared_ptr<TensorOperation> random_select_subpolicy5 = vision::RandomSelectSubpolicy(
|
||||
{{{}, {vision::Equalize(), 0.5}}, {{vision::Resize({15, 15}), 1}}});
|
||||
EXPECT_EQ(random_select_subpolicy5, nullptr);
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestRandomSharpness) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestRandomSharpness.";
|
||||
|
||||
|
|
@ -2297,6 +2568,237 @@ TEST_F(MindDataTestPipeline, TestRescaleFail) {
|
|||
EXPECT_EQ(rescale, nullptr);
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestSoftDvppDecodeRandomCropResizeJpegSuccess1) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestSoftDvppDecodeRandomCropResizeJpegSuccess1 with single integer input.";
|
||||
|
||||
// Create an ImageFolder Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testPK/data/";
|
||||
std::shared_ptr<Dataset> ds = ImageFolder(folder_path, false, RandomSampler(false, 4));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create objects for the tensor ops
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_random_crop_resize_jpeg =
|
||||
vision::SoftDvppDecodeRandomCropResizeJpeg({500});
|
||||
EXPECT_NE(soft_dvpp_decode_random_crop_resize_jpeg, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({soft_dvpp_decode_random_crop_resize_jpeg}, {"image"});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
EXPECT_EQ(image->shape()[0] == 500 && image->shape()[1] == 500, true);
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 4);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestSoftDvppDecodeRandomCropResizeJpegSuccess2) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestSoftDvppDecodeRandomCropResizeJpegSuccess2 with (height, width) input.";
|
||||
|
||||
// Create an ImageFolder Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testPK/data/";
|
||||
std::shared_ptr<Dataset> ds = ImageFolder(folder_path, false, RandomSampler(false, 6));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create objects for the tensor ops
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_random_crop_resize_jpeg =
|
||||
vision::SoftDvppDecodeRandomCropResizeJpeg({500, 600}, {0.25, 0.75}, {0.5, 1.25}, 20);
|
||||
EXPECT_NE(soft_dvpp_decode_random_crop_resize_jpeg, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({soft_dvpp_decode_random_crop_resize_jpeg}, {"image"});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
EXPECT_EQ(image->shape()[0] == 500 && image->shape()[1] == 600, true);
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 6);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestSoftDvppDecodeRandomCropResizeJpegFail) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestSoftDvppDecodeRandomCropResizeJpegFail with incorrect parameters.";
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: size must only contain positive integers
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg1 = vision::SoftDvppDecodeRandomCropResizeJpeg({-500, 600});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg1, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: size must only contain positive integers
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg2 = vision::SoftDvppDecodeRandomCropResizeJpeg({-500});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg2, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: size must be a vector of one or two values
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg3 = vision::SoftDvppDecodeRandomCropResizeJpeg({500, 600, 700});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg3, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: scale must be greater than or equal to 0
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg4 = vision::SoftDvppDecodeRandomCropResizeJpeg({500}, {-0.1, 0.9});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg4, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: scale must be in the format of (min, max)
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg5 = vision::SoftDvppDecodeRandomCropResizeJpeg({500}, {0.6, 0.2});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg5, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: scale must be a vector of two values
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg6 = vision::SoftDvppDecodeRandomCropResizeJpeg({500}, {0.5, 0.6, 0.7});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg6, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: ratio must be greater than or equal to 0
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg7 =
|
||||
vision::SoftDvppDecodeRandomCropResizeJpeg({500}, {0.5, 0.9}, {-0.2, 0.4});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg7, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: ratio must be in the format of (min, max)
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg8 =
|
||||
vision::SoftDvppDecodeRandomCropResizeJpeg({500}, {0.5, 0.9}, {0.4, 0.2});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg8, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: ratio must be a vector of two values
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg9 =
|
||||
vision::SoftDvppDecodeRandomCropResizeJpeg({500}, {0.5, 0.9}, {0.1, 0.2, 0.3});
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg9, nullptr);
|
||||
|
||||
// SoftDvppDecodeRandomCropResizeJpeg: max_attempts must be greater than or equal to 1
|
||||
auto soft_dvpp_decode_random_crop_resize_jpeg10 =
|
||||
vision::SoftDvppDecodeRandomCropResizeJpeg({500}, {0.5, 0.9}, {0.1, 0.2}, 0);
|
||||
EXPECT_EQ(soft_dvpp_decode_random_crop_resize_jpeg10, nullptr);
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestSoftDvppDecodeResizeJpegSuccess1) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestSoftDvppDecodeResizeJpegSuccess1 with single integer input.";
|
||||
// Create an ImageFolder Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testPK/data/";
|
||||
std::shared_ptr<Dataset> ds = ImageFolder(folder_path, false, RandomSampler(false, 4));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create a Repeat operation on ds
|
||||
int32_t repeat_num = 3;
|
||||
ds = ds->Repeat(repeat_num);
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create SoftDvppDecodeResizeJpeg object with single integer input
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_resize_jpeg_op = vision::SoftDvppDecodeResizeJpeg({1134});
|
||||
EXPECT_NE(soft_dvpp_decode_resize_jpeg_op, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({soft_dvpp_decode_resize_jpeg_op});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 12);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestSoftDvppDecodeResizeJpegSuccess2) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestSoftDvppDecodeResizeJpegSuccess2 with (height, width) input.";
|
||||
// Create an ImageFolder Dataset
|
||||
std::string folder_path = datasets_root_path_ + "/testPK/data/";
|
||||
std::shared_ptr<Dataset> ds = ImageFolder(folder_path, false, RandomSampler(false, 2));
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create SoftDvppDecodeResizeJpeg object with single integer input
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_resize_jpeg_op = vision::SoftDvppDecodeResizeJpeg({100, 200});
|
||||
EXPECT_NE(soft_dvpp_decode_resize_jpeg_op, nullptr);
|
||||
|
||||
// Create a Map operation on ds
|
||||
ds = ds->Map({soft_dvpp_decode_resize_jpeg_op});
|
||||
EXPECT_NE(ds, nullptr);
|
||||
|
||||
// Create an iterator over the result of the above dataset
|
||||
// This will trigger the creation of the Execution Tree and launch it.
|
||||
std::shared_ptr<Iterator> iter = ds->CreateIterator();
|
||||
EXPECT_NE(iter, nullptr);
|
||||
|
||||
// Iterate the dataset and get each row
|
||||
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
||||
iter->GetNextRow(&row);
|
||||
|
||||
uint64_t i = 0;
|
||||
while (row.size() != 0) {
|
||||
i++;
|
||||
auto image = row["image"];
|
||||
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
||||
iter->GetNextRow(&row);
|
||||
}
|
||||
|
||||
EXPECT_EQ(i, 2);
|
||||
|
||||
// Manually terminate the pipeline
|
||||
iter->Stop();
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, TestSoftDvppDecodeResizeJpegFail) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestSoftDvppDecodeResizeJpegFail with incorrect size.";
|
||||
|
||||
// CSoftDvppDecodeResizeJpeg: size must be a vector of one or two values
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_resize_jpeg_op1 = vision::SoftDvppDecodeResizeJpeg({});
|
||||
EXPECT_EQ(soft_dvpp_decode_resize_jpeg_op1, nullptr);
|
||||
|
||||
// SoftDvppDecodeResizeJpeg: size must be a vector of one or two values
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_resize_jpeg_op2 = vision::SoftDvppDecodeResizeJpeg({1, 2, 3});
|
||||
EXPECT_EQ(soft_dvpp_decode_resize_jpeg_op2, nullptr);
|
||||
|
||||
// SoftDvppDecodeResizeJpeg: size must only contain positive integers
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_resize_jpeg_op3 = vision::SoftDvppDecodeResizeJpeg({20, -20});
|
||||
EXPECT_EQ(soft_dvpp_decode_resize_jpeg_op3, nullptr);
|
||||
|
||||
// SoftDvppDecodeResizeJpeg: size must only contain positive integers
|
||||
std::shared_ptr<TensorOperation> soft_dvpp_decode_resize_jpeg_op4 = vision::SoftDvppDecodeResizeJpeg({0});
|
||||
EXPECT_EQ(soft_dvpp_decode_resize_jpeg_op4, nullptr);
|
||||
}
|
||||
|
||||
TEST_F(MindDataTestPipeline, DISABLED_TestUniformAugmentFail1) {
|
||||
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestUniformAugmentFail1 with invalid zero num_ops parameter.";
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue