diff --git a/cmake/package_lite.cmake b/cmake/package_lite.cmake index a8b1872be5..3a7ebb4e0e 100644 --- a/cmake/package_lite.cmake +++ b/cmake/package_lite.cmake @@ -21,7 +21,7 @@ set(PROTOBF_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/third_party/protob set(FLATBF_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/third_party/flatbuffers) if (BUILD_MINDDATA STREQUAL "full" OR BUILD_MINDDATA STREQUAL "wrapper") - install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/include/ DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h") + install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/include/ DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "vision.h" EXCLUDE) if (PLATFORM_ARM64) install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${COMPONENT_NAME}) install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME}) diff --git a/mindspore/ccsrc/minddata/dataset/include/vision.h b/mindspore/ccsrc/minddata/dataset/include/vision.h index a4a52651fa..ce255743cc 100644 --- a/mindspore/ccsrc/minddata/dataset/include/vision.h +++ b/mindspore/ccsrc/minddata/dataset/include/vision.h @@ -22,8 +22,10 @@ #include #include #include + #include "minddata/dataset/core/constants.h" #include "minddata/dataset/include/transforms.h" +#include "minddata/dataset/include/vision_lite.h" #include "minddata/dataset/util/status.h" namespace mindspore { @@ -35,16 +37,12 @@ namespace vision { // Char arrays storing name of corresponding classes (in alphabetical order) constexpr char kAutoContrastOperation[] = "AutoContrast"; constexpr char kBoundingBoxAugmentOperation[] = "BoundingBoxAugment"; -constexpr char kCenterCropOperation[] = "CenterCrop"; constexpr char kCutMixBatchOperation[] = "CutMixBatch"; constexpr char kCutOutOperation[] = "CutOut"; -constexpr char kCropOperation[] = "Crop"; -constexpr char kDecodeOperation[] = "Decode"; constexpr char kEqualizeOperation[] = "Equalize"; constexpr char kHwcToChwOperation[] = "HwcToChw"; constexpr char kInvertOperation[] = "Invert"; constexpr char kMixUpBatchOperation[] = "MixUpBatch"; -constexpr char kNormalizeOperation[] = "Normalize"; constexpr char kPadOperation[] = "Pad"; constexpr char kRandomAffineOperation[] = "RandomAffine"; constexpr char kRandomColorAdjustOperation[] = "RandomColorAdjust"; @@ -65,7 +63,6 @@ constexpr char kRandomSharpnessOperation[] = "RandomSharpness"; constexpr char kRandomVerticalFlipOperation[] = "RandomVerticalFlip"; constexpr char kRandomVerticalFlipWithBBoxOperation[] = "RandomVerticalFlipWithBBox"; constexpr char kRescaleOperation[] = "Rescale"; -constexpr char kResizeOperation[] = "Resize"; constexpr char kResizeWithBBoxOperation[] = "ResizeWithBBox"; constexpr char kRgbaToBgrOperation[] = "RgbaToBgr"; constexpr char kRgbaToRgbOperation[] = "RgbaToRgb"; @@ -75,25 +72,14 @@ constexpr char kSwapRedBlueOperation[] = "SwapRedBlue"; constexpr char kUniformAugOperation[] = "UniformAug"; // Transform Op classes (in alphabetical order) -#ifndef ENABLE_ANDROID class AutoContrastOperation; class BoundingBoxAugmentOperation; -#endif -class CenterCropOperation; -class CropOperation; -#ifndef ENABLE_ANDROID class CutMixBatchOperation; class CutOutOperation; -#endif -class DecodeOperation; -#ifndef ENABLE_ANDROID class EqualizeOperation; class HwcToChwOperation; class InvertOperation; class MixUpBatchOperation; -#endif -class NormalizeOperation; -#ifndef ENABLE_ANDROID class PadOperation; class RandomAffineOperation; class RandomColorOperation; @@ -115,9 +101,6 @@ class RandomSolarizeOperation; class RandomVerticalFlipOperation; class RandomVerticalFlipWithBBoxOperation; class RescaleOperation; -#endif -class ResizeOperation; -#ifndef ENABLE_ANDROID class ResizeWithBBoxOperation; class RgbaToBgrOperation; class RgbaToRgbOperation; @@ -140,23 +123,7 @@ std::shared_ptr AutoContrast(float cutoff = 0.0, std::vec /// \return Shared pointer to the current TensorOperation. std::shared_ptr BoundingBoxAugment(std::shared_ptr transform, float ratio = 0.3); -#endif - -/// \brief Function to create a CenterCrop TensorOperation. -/// \notes Crops the input image at the center to the given size. -/// \param[in] size A vector representing the output size of the cropped image. -/// If size is a single value, a square crop of size (size, size) is returned. -/// If size has 2 values, it should be (height, width). -/// \return Shared pointer to the current TensorOperation. -std::shared_ptr CenterCrop(std::vector size); -/// \brief Function to create a Crop TensorOp -/// \notes Crop an image based on location and crop size -/// \param[in] coordinates Starting location of crop. Must be a vector of two values, in the form of {x_coor, y_coor} -/// \param[in] size Size of the cropped area. Must be a vector of two values, in the form of {height, width} -/// \return Shared pointer to the current TensorOp -std::shared_ptr Crop(std::vector coordinates, std::vector size); -#ifndef ENABLE_ANDROID /// \brief Function to apply CutMix on a batch of images /// \notes Masks a random section of each image with the corresponding part of another randomly /// selected image in that batch @@ -174,15 +141,6 @@ std::shared_ptr CutMixBatch(ImageBatchFormat image_batch_f /// \return Shared pointer to the current TensorOp std::shared_ptr CutOut(int32_t length, int32_t num_patches = 1); -#endif -/// \brief Function to create a Decode TensorOperation. -/// \notes Decode the input image in RGB mode. -/// \param[in] rgb A boolean of whether to decode in RGB mode or not. -/// \return Shared pointer to the current TensorOperation. -std::shared_ptr 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. @@ -205,17 +163,6 @@ std::shared_ptr Invert(); /// \return Shared pointer to the current TensorOperation. std::shared_ptr MixUpBatch(float alpha = 1); -#endif -/// \brief Function to create a Normalize TensorOperation. -/// \notes Normalize the input image with respect to mean and standard deviation. -/// \param[in] mean A vector of mean values for each channel, w.r.t channel order. -/// The mean values must be in range (0.0, 255.0]. -/// \param[in] std A vector of standard deviations for each channel, w.r.t. channel order. -/// The standard deviation values must be in range (0.0, 255.0] -/// \return Shared pointer to the current TensorOperation. -std::shared_ptr Normalize(std::vector mean, std::vector std); - -#ifndef ENABLE_ANDROID /// \brief Function to create a Pad TensorOp /// \notes Pads the image according to padding parameters /// \param[in] padding A vector representing the number of pixels to pad the image @@ -458,18 +405,6 @@ std::shared_ptr RandomVerticalFlipWithBBox( /// \return Shared pointer to the current TensorOperation. std::shared_ptr Rescale(float rescale, float shift); -#endif -/// \brief Function to create a Resize TensorOperation. -/// \notes Resize the input image to the given size. -/// \param[in] size A vector representing the output size of the resized image. -/// If size is a single value, the image will be resized to this value with -/// the same image aspect ratio. If size has 2 values, it should be (height, width). -/// \param[in] interpolation An enum for the mode of interpolation -/// \return Shared pointer to the current TensorOperation. -std::shared_ptr Resize(std::vector size, - InterpolationMode interpolation = InterpolationMode::kLinear); - -#ifndef ENABLE_ANDROID /// \brief Function to create a ResizeWithBBox TensorOperation. /// \notes Resize the input image to the given size and adjust bounding boxes accordingly. /// \param[in] size The output size of the resized image. @@ -568,41 +503,6 @@ class BoundingBoxAugmentOperation : public TensorOperation { float ratio_; }; -#endif - -class CenterCropOperation : public TensorOperation { - public: - explicit CenterCropOperation(std::vector size); - - ~CenterCropOperation() = default; - - std::shared_ptr Build() override; - - Status ValidateParams() override; - - std::string Name() const override { return kCenterCropOperation; } - - private: - std::vector size_; -}; - -class CropOperation : public TensorOperation { - public: - CropOperation(std::vector coordinates, std::vector size); - - ~CropOperation() = default; - - std::shared_ptr Build() override; - - Status ValidateParams() override; - - std::string Name() const override { return kCropOperation; } - - private: - std::vector coordinates_; - std::vector size_; -}; -#ifndef ENABLE_ANDROID class CutMixBatchOperation : public TensorOperation { public: explicit CutMixBatchOperation(ImageBatchFormat image_batch_format, float alpha = 1.0, float prob = 1.0); @@ -639,24 +539,6 @@ class CutOutOperation : public TensorOperation { ImageBatchFormat image_batch_format_; }; -#endif -class DecodeOperation : public TensorOperation { - public: - explicit DecodeOperation(bool rgb = true); - - ~DecodeOperation() = default; - - std::shared_ptr Build() override; - - Status ValidateParams() override; - - std::string Name() const override { return kDecodeOperation; } - - private: - bool rgb_; -}; - -#ifndef ENABLE_ANDROID class EqualizeOperation : public TensorOperation { public: ~EqualizeOperation() = default; @@ -706,25 +588,6 @@ class MixUpBatchOperation : public TensorOperation { float alpha_; }; -#endif -class NormalizeOperation : public TensorOperation { - public: - NormalizeOperation(std::vector mean, std::vector std); - - ~NormalizeOperation() = default; - - std::shared_ptr Build() override; - - Status ValidateParams() override; - - std::string Name() const override { return kNormalizeOperation; } - - private: - std::vector mean_; - std::vector std_; -}; - -#ifndef ENABLE_ANDROID class PadOperation : public TensorOperation { public: PadOperation(std::vector padding, std::vector fill_value = {0}, @@ -1116,26 +979,6 @@ class RescaleOperation : public TensorOperation { float shift_; }; -#endif -class ResizeOperation : public TensorOperation { - public: - explicit ResizeOperation(std::vector size, - InterpolationMode interpolation_mode = InterpolationMode::kLinear); - - ~ResizeOperation() = default; - - std::shared_ptr Build() override; - - Status ValidateParams() override; - - std::string Name() const override { return kResizeOperation; } - - private: - std::vector size_; - InterpolationMode interpolation_; -}; - -#ifndef ENABLE_ANDROID class ResizeWithBBoxOperation : public TensorOperation { public: explicit ResizeWithBBoxOperation(std::vector size, @@ -1245,7 +1088,6 @@ class UniformAugOperation : public TensorOperation { std::vector> transforms_; int32_t num_ops_; }; -#endif } // namespace vision } // namespace dataset diff --git a/mindspore/ccsrc/minddata/dataset/include/vision_lite.h b/mindspore/ccsrc/minddata/dataset/include/vision_lite.h new file mode 100644 index 0000000000..6310380736 --- /dev/null +++ b/mindspore/ccsrc/minddata/dataset/include/vision_lite.h @@ -0,0 +1,174 @@ +/** + * Copyright 2020 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MINDSPORE_CCSRC_MINDDATA_DATASET_INCLUDE_VISION_LITE_H_ +#define MINDSPORE_CCSRC_MINDDATA_DATASET_INCLUDE_VISION_LITE_H_ + +#include +#include +#include +#include +#include +#include "minddata/dataset/core/constants.h" +#include "minddata/dataset/include/transforms.h" +#include "minddata/dataset/util/status.h" + +namespace mindspore { +namespace dataset { + +// Transform operations for performing computer vision. +namespace vision { + +// Char arrays storing name of corresponding classes (in alphabetical order) +constexpr char kCenterCropOperation[] = "CenterCrop"; +constexpr char kCropOperation[] = "Crop"; +constexpr char kDecodeOperation[] = "Decode"; +constexpr char kNormalizeOperation[] = "Normalize"; +constexpr char kResizeOperation[] = "Resize"; + +// Transform Op classes (in alphabetical order) +class CenterCropOperation; +class CropOperation; +class DecodeOperation; +class NormalizeOperation; +class ResizeOperation; + +/// \brief Function to create a CenterCrop TensorOperation. +/// \notes Crops the input image at the center to the given size. +/// \param[in] size A vector representing the output size of the cropped image. +/// If size is a single value, a square crop of size (size, size) is returned. +/// If size has 2 values, it should be (height, width). +/// \return Shared pointer to the current TensorOperation. +std::shared_ptr CenterCrop(std::vector size); + +/// \brief Function to create a Crop TensorOp +/// \notes Crop an image based on location and crop size +/// \param[in] coordinates Starting location of crop. Must be a vector of two values, in the form of {x_coor, y_coor} +/// \param[in] size Size of the cropped area. Must be a vector of two values, in the form of {height, width} +/// \return Shared pointer to the current TensorOp +std::shared_ptr Crop(std::vector coordinates, std::vector size); + +/// \brief Function to create a Decode TensorOperation. +/// \notes Decode the input image in RGB mode. +/// \param[in] rgb A boolean of whether to decode in RGB mode or not. +/// \return Shared pointer to the current TensorOperation. +std::shared_ptr Decode(bool rgb = true); + +/// \brief Function to create a Normalize TensorOperation. +/// \notes Normalize the input image with respect to mean and standard deviation. +/// \param[in] mean A vector of mean values for each channel, w.r.t channel order. +/// The mean values must be in range (0.0, 255.0]. +/// \param[in] std A vector of standard deviations for each channel, w.r.t. channel order. +/// The standard deviation values must be in range (0.0, 255.0] +/// \return Shared pointer to the current TensorOperation. +std::shared_ptr Normalize(std::vector mean, std::vector std); + +/// \brief Function to create a Resize TensorOperation. +/// \notes Resize the input image to the given size. +/// \param[in] size A vector representing the output size of the resized image. +/// If size is a single value, the image will be resized to this value with +/// the same image aspect ratio. If size has 2 values, it should be (height, width). +/// \param[in] interpolation An enum for the mode of interpolation +/// \return Shared pointer to the current TensorOperation. +std::shared_ptr Resize(std::vector size, + InterpolationMode interpolation = InterpolationMode::kLinear); + +class CenterCropOperation : public TensorOperation { + public: + explicit CenterCropOperation(std::vector size); + + ~CenterCropOperation() = default; + + std::shared_ptr Build() override; + + Status ValidateParams() override; + + std::string Name() const override { return kCenterCropOperation; } + + private: + std::vector size_; +}; + +class CropOperation : public TensorOperation { + public: + CropOperation(std::vector coordinates, std::vector size); + + ~CropOperation() = default; + + std::shared_ptr Build() override; + + Status ValidateParams() override; + + std::string Name() const override { return kCropOperation; } + + private: + std::vector coordinates_; + std::vector size_; +}; +class DecodeOperation : public TensorOperation { + public: + explicit DecodeOperation(bool rgb = true); + + ~DecodeOperation() = default; + + std::shared_ptr Build() override; + + Status ValidateParams() override; + + std::string Name() const override { return kDecodeOperation; } + + private: + bool rgb_; +}; + +class NormalizeOperation : public TensorOperation { + public: + NormalizeOperation(std::vector mean, std::vector std); + + ~NormalizeOperation() = default; + + std::shared_ptr Build() override; + + Status ValidateParams() override; + + std::string Name() const override { return kNormalizeOperation; } + + private: + std::vector mean_; + std::vector std_; +}; + +class ResizeOperation : public TensorOperation { + public: + explicit ResizeOperation(std::vector size, + InterpolationMode interpolation_mode = InterpolationMode::kLinear); + + ~ResizeOperation() = default; + + std::shared_ptr Build() override; + + Status ValidateParams() override; + + std::string Name() const override { return kResizeOperation; } + + private: + std::vector size_; + InterpolationMode interpolation_; +}; +} // namespace vision +} // namespace dataset +} // namespace mindspore +#endif // MINDSPORE_CCSRC_MINDDATA_DATASET_INCLUDE_VISION_LITE_H_