diff --git a/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_random_crop_resize_jpeg_op.cc b/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_random_crop_resize_jpeg_op.cc index 93c8833d9c..b10030a01f 100644 --- a/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_random_crop_resize_jpeg_op.cc +++ b/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_random_crop_resize_jpeg_op.cc @@ -1,5 +1,5 @@ /** - * Copyright 2020 Huawei Technologies Co., Ltd + * Copyright 2020-2021 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,13 +52,14 @@ Status SoftDvppDecodeRandomCropResizeJpegOp::Compute(const std::shared_ptr *output) { IO_CHECK(input, output); if (!IsNonEmptyJPEG(input)) { - RETURN_STATUS_UNEXPECTED("SoftDvppDecodeRandomCropResizeJpeg only support process jpeg image."); + RETURN_STATUS_UNEXPECTED("SoftDvppDecodeRandomCropResizeJpeg: only support processing raw jpeg image."); } SoftDpCropInfo crop_info; RETURN_IF_NOT_OK(GetCropInfo(input, &crop_info)); try { unsigned char *buffer = const_cast(input->GetBuffer()); - CHECK_FAIL_RETURN_UNEXPECTED(buffer != nullptr, "The input image buffer is empty."); + CHECK_FAIL_RETURN_UNEXPECTED(buffer != nullptr, + "SoftDvppDecodeRandomCropResizeJpeg: the input image buffer is empty."); SoftDpProcsessInfo info; info.input_buffer = static_cast(buffer); info.input_buffer_size = input->SizeInBytes(); @@ -69,14 +70,14 @@ Status SoftDvppDecodeRandomCropResizeJpegOp::Compute(const std::shared_ptr cv_tensor = nullptr; RETURN_IF_NOT_OK(CVTensor::CreateFromMat(out_rgb_img, &cv_tensor)); *output = std::static_pointer_cast(cv_tensor); } catch (const cv::Exception &e) { - std::string error = "Error in SoftDvppDecodeRandomCropResizeJpegOp:" + std::string(e.what()); + std::string error = "SoftDvppDecodeRandomCropResizeJpeg:" + std::string(e.what()); RETURN_STATUS_UNEXPECTED(error); } return Status::OK(); diff --git a/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_resize_jpeg_op.cc b/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_resize_jpeg_op.cc index 2c684b1080..0a8687d352 100644 --- a/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_resize_jpeg_op.cc +++ b/mindspore/ccsrc/minddata/dataset/kernels/image/soft_dvpp/soft_dvpp_decode_resize_jpeg_op.cc @@ -1,5 +1,5 @@ /** - * Copyright 2020 Huawei Technologies Co., Ltd + * Copyright 2020-2021 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,11 +28,11 @@ namespace dataset { Status SoftDvppDecodeResizeJpegOp::Compute(const std::shared_ptr &input, std::shared_ptr *output) { IO_CHECK(input, output); if (!IsNonEmptyJPEG(input)) { - RETURN_STATUS_UNEXPECTED("SoftDvppDecodeReiszeJpegOp only support process jpeg image."); + RETURN_STATUS_UNEXPECTED("SoftDvppDecodeReiszeJpeg: only support processing raw jpeg image."); } try { unsigned char *buffer = const_cast(input->GetBuffer()); - CHECK_FAIL_RETURN_UNEXPECTED(buffer != nullptr, "The input image buffer is empty."); + CHECK_FAIL_RETURN_UNEXPECTED(buffer != nullptr, "SoftDvppDecodeReiszeJpeg: the input image buffer is empty."); SoftDpProcsessInfo info; info.input_buffer = static_cast(buffer); info.input_buffer_size = input->SizeInBytes(); @@ -43,11 +43,11 @@ Status SoftDvppDecodeResizeJpegOp::Compute(const std::shared_ptr &input, if (target_width_ == 0) { if (input_h < input_w) { - CHECK_FAIL_RETURN_UNEXPECTED(input_h != 0, "The input height is 0"); + CHECK_FAIL_RETURN_UNEXPECTED(input_h != 0, "SoftDvppDecodeReiszeJpeg: the input height is 0."); info.output_height = target_height_; info.output_width = static_cast(std::lround(static_cast(input_w) / input_h * info.output_height)); } else { - CHECK_FAIL_RETURN_UNEXPECTED(input_w != 0, "The input width is 0"); + CHECK_FAIL_RETURN_UNEXPECTED(input_w != 0, "SoftDvppDecodeReiszeJpeg: the input width is 0."); info.output_width = target_height_; info.output_height = static_cast(std::lround(static_cast(input_h) / input_w * info.output_width)); } @@ -62,14 +62,14 @@ Status SoftDvppDecodeResizeJpegOp::Compute(const std::shared_ptr &input, info.is_v_before_u = true; int ret = DecodeAndResizeJpeg(&info); - std::string error_info("Soft dvpp DecodeAndResizeJpeg failed with return code: "); - error_info += std::to_string(ret); + std::string error_info("SoftDvppDecodeReiszeJpeg: failed with return code: "); + error_info += std::to_string(ret) + ", please check the log information for more details."; CHECK_FAIL_RETURN_UNEXPECTED(ret == 0, error_info); std::shared_ptr cv_tensor = nullptr; RETURN_IF_NOT_OK(CVTensor::CreateFromMat(out_rgb_img, &cv_tensor)); *output = std::static_pointer_cast(cv_tensor); } catch (const cv::Exception &e) { - std::string error = "Error in SoftDvppDecodeResizeJpegOp:" + std::string(e.what()); + std::string error = "SoftDvppDecodeResizeJpeg:" + std::string(e.what()); RETURN_STATUS_UNEXPECTED(error); } return Status::OK(); @@ -82,7 +82,7 @@ Status SoftDvppDecodeResizeJpegOp::OutputShape(const std::vector &i TensorShape out({-1, -1, 3}); // we don't know what is output image size, but we know it should be 3 channels if (inputs[0].Rank() == 1) outputs.emplace_back(out); if (!outputs.empty()) return Status::OK(); - return Status(StatusCode::kMDUnexpectedError, "Input has a wrong shape"); + return Status(StatusCode::kMDUnexpectedError, "SoftDvppDecodeReiszeJpeg: input has a wrong shape."); } } // namespace dataset diff --git a/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc b/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc index bb023de165..26fcae1ba3 100644 --- a/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc +++ b/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc @@ -1512,6 +1512,14 @@ SoftDvppDecodeRandomCropResizeJpegOperation::SoftDvppDecodeRandomCropResizeJpegO Status SoftDvppDecodeRandomCropResizeJpegOperation::ValidateParams() { // size RETURN_IF_NOT_OK(ValidateVectorSize("SoftDvppDecodeRandomCropResizeJpeg", size_)); + for (int32_t i = 0; i < size_.size(); i++) { + if (size_[i] % 2 == 1) { + std::string err_msg = "SoftDvppDecodeRandomCropResizeJpeg: size[" + std::to_string(i) + + "] must be even values, got: " + std::to_string(size_[i]); + MS_LOG(ERROR) << err_msg; + RETURN_STATUS_SYNTAX_ERROR(err_msg); + } + } // scale RETURN_IF_NOT_OK(ValidateVectorScale("SoftDvppDecodeRandomCropResizeJpeg", scale_)); // ratio @@ -1554,6 +1562,14 @@ SoftDvppDecodeResizeJpegOperation::SoftDvppDecodeResizeJpegOperation(std::vector Status SoftDvppDecodeResizeJpegOperation::ValidateParams() { RETURN_IF_NOT_OK(ValidateVectorSize("SoftDvppDecodeResizeJpeg", size_)); + for (int32_t i = 0; i < size_.size(); i++) { + if (size_[i] % 2 == 1) { + std::string err_msg = "SoftDvppDecodeResizeJpeg: size[" + std::to_string(i) + + "] must be even values, got: " + std::to_string(size_[i]); + MS_LOG(ERROR) << err_msg; + RETURN_STATUS_SYNTAX_ERROR(err_msg); + } + } return Status::OK(); } diff --git a/mindspore/dataset/engine/samplers.py b/mindspore/dataset/engine/samplers.py index 9749d90cc0..8c1621495e 100644 --- a/mindspore/dataset/engine/samplers.py +++ b/mindspore/dataset/engine/samplers.py @@ -25,6 +25,7 @@ import mindspore._c_dataengine as cde import mindspore.dataset as ds from ..core import validator_helpers as validator + def select_sampler(num_samples, input_sampler, shuffle, num_shards, shard_id): """ Create sampler based on user input. @@ -615,8 +616,8 @@ class SubsetSampler(BuiltinSampler): Examples: >>> indices = [0, 1, 2, 3, 4, 5] >>> - >>> # creates a SubsetRandomSampler, will sample from the provided indices - >>> sampler = ds.SubsetRandomSampler(indices) + >>> # creates a SubsetSampler, will sample from the provided indices + >>> sampler = ds.SubsetSampler(indices) >>> dataset = ds.ImageFolderDataset(image_folder_dataset_dir, ... num_parallel_workers=8, ... sampler=sampler) @@ -694,7 +695,7 @@ class SubsetRandomSampler(SubsetSampler): Samples the elements randomly from a sequence of indices. Args: - indices (list[int]): A sequence of indices. + indices (Any iterable python object but string): A sequence of indices. num_samples (int, optional): Number of elements to sample (default=None, all elements). Examples: @@ -740,17 +741,16 @@ class IterSampler(Sampler): num_samples (int, optional): Number of elements to sample (default=None, all elements). Examples: - >>> class MySampler(): - >>> def __iter__(self): - >>> for i in range(99, -1, -1): - >>> yield i + >>> class MySampler: + ... def __iter__(self): + ... for i in range(99, -1, -1): + ... yield i >>> # creates an IterSampler >>> sampler = ds.IterSampler(sampler=MySampler()) >>> dataset = ds.ImageFolderDataset(image_folder_dataset_dir, ... num_parallel_workers=8, ... sampler=sampler) - """ def __init__(self, sampler, num_samples=None):