|
|
|
@@ -46,59 +46,21 @@ class TensorOperation : public std::enable_shared_from_this<TensorOperation> { |
|
|
|
// Transform operations for performing computer vision. |
|
|
|
namespace vision { |
|
|
|
|
|
|
|
class NormalizeOperation; |
|
|
|
// Transform Op classes (in alphabetical order) |
|
|
|
class CenterCropOperation; |
|
|
|
class CropOperation; |
|
|
|
class CutOutOperation; |
|
|
|
class DecodeOperation; |
|
|
|
class ResizeOperation; |
|
|
|
class NormalizeOperation; |
|
|
|
class PadOperation; |
|
|
|
class RandomColorAdjustOperation; |
|
|
|
class RandomCropOperation; |
|
|
|
class CenterCropOperation; |
|
|
|
class UniformAugOperation; |
|
|
|
class RandomHorizontalFlipOperation; |
|
|
|
class RandomVerticalFlipOperation; |
|
|
|
class RandomRotationOperation; |
|
|
|
class PadOperation; |
|
|
|
class CutOutOperation; |
|
|
|
class RandomColorAdjustOperation; |
|
|
|
class CropOperation; |
|
|
|
class RandomVerticalFlipOperation; |
|
|
|
class ResizeOperation; |
|
|
|
class SwapRedBlueOperation; |
|
|
|
|
|
|
|
/// \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. |
|
|
|
/// \param[in] std - a vector of standard deviations for each channel, w.r.t. channel order. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<NormalizeOperation> Normalize(std::vector<float> mean, std::vector<float> std); |
|
|
|
|
|
|
|
/// \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<DecodeOperation> Decode(bool rgb = true); |
|
|
|
|
|
|
|
/// \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<ResizeOperation> Resize(std::vector<int32_t> size, |
|
|
|
InterpolationMode interpolation = InterpolationMode::kLinear); |
|
|
|
|
|
|
|
/// \brief Function to create a RandomCrop TensorOperation. |
|
|
|
/// \notes Crop the input image at a random location. |
|
|
|
/// \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). |
|
|
|
/// \param[in] padding - a vector with the value of pixels to pad the image. If 4 values are provided, |
|
|
|
/// it pads the left, top, right and bottom respectively. |
|
|
|
/// \param[in] pad_if_needed - a boolean whether to pad the image if either side is smaller than |
|
|
|
/// the given output size. |
|
|
|
/// \param[in] fill_value - a vector representing the pixel intensity of the borders, it is used to |
|
|
|
/// fill R, G, B channels respectively. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<RandomCropOperation> RandomCrop(std::vector<int32_t> size, std::vector<int32_t> padding = {0, 0, 0, 0}, |
|
|
|
bool pad_if_needed = false, |
|
|
|
std::vector<uint8_t> fill_value = {0, 0, 0}); |
|
|
|
class UniformAugOperation; |
|
|
|
|
|
|
|
/// \brief Function to create a CenterCrop TensorOperation. |
|
|
|
/// \notes Crops the input image at the center to the given size. |
|
|
|
@@ -108,37 +70,32 @@ std::shared_ptr<RandomCropOperation> RandomCrop(std::vector<int32_t> size, std:: |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<CenterCropOperation> CenterCrop(std::vector<int32_t> size); |
|
|
|
|
|
|
|
/// \brief Function to create a UniformAugment TensorOperation. |
|
|
|
/// \notes Tensor operation to perform randomly selected augmentation. |
|
|
|
/// \param[in] transforms - a vector of TensorOperation transforms. |
|
|
|
/// \param[in] num_ops - integer representing the number of OPs to be selected and applied. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<UniformAugOperation> UniformAugment(std::vector<std::shared_ptr<TensorOperation>> transforms, |
|
|
|
int32_t num_ops = 2); |
|
|
|
/// \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<CropOperation> Crop(std::vector<int32_t> coordinates, std::vector<int32_t> size); |
|
|
|
|
|
|
|
/// \brief Function to create a RandomHorizontalFlip TensorOperation. |
|
|
|
/// \notes Tensor operation to perform random horizontal flip. |
|
|
|
/// \param[in] prob - float representing the probability of flip. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<RandomHorizontalFlipOperation> RandomHorizontalFlip(float prob = 0.5); |
|
|
|
/// \brief Function to create a CutOut TensorOp |
|
|
|
/// \notes Randomly cut (mask) out a given number of square patches from the input image |
|
|
|
/// \param[in] length Integer representing the side length of each square patch |
|
|
|
/// \param[in] num_patches Integer representing the number of patches to be cut out of an image |
|
|
|
/// \return Shared pointer to the current TensorOp |
|
|
|
std::shared_ptr<CutOutOperation> CutOut(int32_t length, int32_t num_patches = 1); |
|
|
|
|
|
|
|
/// \brief Function to create a RandomVerticalFlip TensorOperation. |
|
|
|
/// \notes Tensor operation to perform random vertical flip. |
|
|
|
/// \param[in] prob - float representing the probability of flip. |
|
|
|
/// \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<RandomVerticalFlipOperation> RandomVerticalFlip(float prob = 0.5); |
|
|
|
std::shared_ptr<DecodeOperation> Decode(bool rgb = true); |
|
|
|
|
|
|
|
/// \brief Function to create a RandomRotation TensorOp |
|
|
|
/// \notes Rotates the image according to parameters |
|
|
|
/// \param[in] degrees A float vector size 2, representing the starting and ending degree |
|
|
|
/// \param[in] resample An enum for the mode of interpolation |
|
|
|
/// \param[in] expand A boolean representing whether the image is expanded after rotation |
|
|
|
/// \param[in] center A float vector size 2, representing the x and y center of rotation. |
|
|
|
/// \param[in] fill_value A uint8_t vector size 3, representing the rgb value of the fill color |
|
|
|
/// \return Shared pointer to the current TensorOp |
|
|
|
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 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. |
|
|
|
/// \param[in] std - a vector of standard deviations for each channel, w.r.t. channel order. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<NormalizeOperation> Normalize(std::vector<float> mean, std::vector<float> std); |
|
|
|
|
|
|
|
/// \brief Function to create a Pad TensorOp |
|
|
|
/// \notes Pads the image according to padding parameters |
|
|
|
@@ -162,13 +119,6 @@ std::shared_ptr<RandomRotationOperation> RandomRotation( |
|
|
|
std::shared_ptr<PadOperation> Pad(std::vector<int32_t> padding, std::vector<uint8_t> fill_value = {0}, |
|
|
|
BorderType padding_mode = BorderType::kConstant); |
|
|
|
|
|
|
|
/// \brief Function to create a CutOut TensorOp |
|
|
|
/// \notes Randomly cut (mask) out a given number of square patches from the input image |
|
|
|
/// \param[in] length Integer representing the side length of each square patch |
|
|
|
/// \param[in] num_patches Integer representing the number of patches to be cut out of an image |
|
|
|
/// \return Shared pointer to the current TensorOp |
|
|
|
std::shared_ptr<CutOutOperation> CutOut(int32_t length, int32_t num_patches = 1); |
|
|
|
|
|
|
|
/// \brief Randomly adjust the brightness, contrast, saturation, and hue of the input image |
|
|
|
/// \param[in] brightness Brightness adjustment factor. Must be a vector of one or two values |
|
|
|
/// if it's a vector of two values it needs to be in the form of [min, max]. Default value is {1, 1} |
|
|
|
@@ -185,222 +135,273 @@ std::shared_ptr<RandomColorAdjustOperation> RandomColorAdjust(std::vector<float> |
|
|
|
std::vector<float> saturation = {1.0, 1.0}, |
|
|
|
std::vector<float> hue = {0.0, 0.0}); |
|
|
|
|
|
|
|
/// \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} |
|
|
|
/// \brief Function to create a RandomCrop TensorOperation. |
|
|
|
/// \notes Crop the input image at a random location. |
|
|
|
/// \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). |
|
|
|
/// \param[in] padding - a vector with the value of pixels to pad the image. If 4 values are provided, |
|
|
|
/// it pads the left, top, right and bottom respectively. |
|
|
|
/// \param[in] pad_if_needed - a boolean whether to pad the image if either side is smaller than |
|
|
|
/// the given output size. |
|
|
|
/// \param[in] fill_value - a vector representing the pixel intensity of the borders, it is used to |
|
|
|
/// fill R, G, B channels respectively. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<RandomCropOperation> RandomCrop(std::vector<int32_t> size, std::vector<int32_t> padding = {0, 0, 0, 0}, |
|
|
|
bool pad_if_needed = false, |
|
|
|
std::vector<uint8_t> fill_value = {0, 0, 0}); |
|
|
|
|
|
|
|
/// \brief Function to create a RandomHorizontalFlip TensorOperation. |
|
|
|
/// \notes Tensor operation to perform random horizontal flip. |
|
|
|
/// \param[in] prob - float representing the probability of flip. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<RandomHorizontalFlipOperation> RandomHorizontalFlip(float prob = 0.5); |
|
|
|
|
|
|
|
/// \brief Function to create a RandomRotation TensorOp |
|
|
|
/// \notes Rotates the image according to parameters |
|
|
|
/// \param[in] degrees A float vector size 2, representing the starting and ending degree |
|
|
|
/// \param[in] resample An enum for the mode of interpolation |
|
|
|
/// \param[in] expand A boolean representing whether the image is expanded after rotation |
|
|
|
/// \param[in] center A float vector size 2, representing the x and y center of rotation. |
|
|
|
/// \param[in] fill_value A uint8_t vector size 3, representing the rgb value of the fill color |
|
|
|
/// \return Shared pointer to the current TensorOp |
|
|
|
std::shared_ptr<CropOperation> Crop(std::vector<int32_t> coordinates, std::vector<int32_t> size); |
|
|
|
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 RandomVerticalFlip TensorOperation. |
|
|
|
/// \notes Tensor operation to perform random vertical flip. |
|
|
|
/// \param[in] prob - float representing the probability of flip. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<RandomVerticalFlipOperation> RandomVerticalFlip(float prob = 0.5); |
|
|
|
|
|
|
|
/// \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<ResizeOperation> Resize(std::vector<int32_t> size, |
|
|
|
InterpolationMode interpolation = InterpolationMode::kLinear); |
|
|
|
|
|
|
|
/// \brief Function to create a SwapRedBlue TensorOp |
|
|
|
/// \notes Swaps the red and blue channels in image |
|
|
|
/// \return Shared pointer to the current TensorOp |
|
|
|
std::shared_ptr<SwapRedBlueOperation> SwapRedBlue(); |
|
|
|
|
|
|
|
/// \brief Function to create a UniformAugment TensorOperation. |
|
|
|
/// \notes Tensor operation to perform randomly selected augmentation. |
|
|
|
/// \param[in] transforms - a vector of TensorOperation transforms. |
|
|
|
/// \param[in] num_ops - integer representing the number of OPs to be selected and applied. |
|
|
|
/// \return Shared pointer to the current TensorOperation. |
|
|
|
std::shared_ptr<UniformAugOperation> UniformAugment(std::vector<std::shared_ptr<TensorOperation>> transforms, |
|
|
|
int32_t num_ops = 2); |
|
|
|
|
|
|
|
/* ####################################### Derived TensorOperation classes ################################# */ |
|
|
|
|
|
|
|
class NormalizeOperation : public TensorOperation { |
|
|
|
class CenterCropOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
NormalizeOperation(std::vector<float> mean, std::vector<float> std); |
|
|
|
explicit CenterCropOperation(std::vector<int32_t> size); |
|
|
|
|
|
|
|
~NormalizeOperation() = default; |
|
|
|
~CenterCropOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<float> mean_; |
|
|
|
std::vector<float> std_; |
|
|
|
std::vector<int32_t> size_; |
|
|
|
}; |
|
|
|
|
|
|
|
class DecodeOperation : public TensorOperation { |
|
|
|
class CropOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
explicit DecodeOperation(bool rgb = true); |
|
|
|
CropOperation(std::vector<int32_t> coordinates, std::vector<int32_t> size); |
|
|
|
|
|
|
|
~DecodeOperation() = default; |
|
|
|
~CropOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
bool rgb_; |
|
|
|
std::vector<int32_t> coordinates_; |
|
|
|
std::vector<int32_t> size_; |
|
|
|
}; |
|
|
|
|
|
|
|
class ResizeOperation : public TensorOperation { |
|
|
|
class CutOutOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
explicit ResizeOperation(std::vector<int32_t> size, |
|
|
|
InterpolationMode interpolation_mode = InterpolationMode::kLinear); |
|
|
|
explicit CutOutOperation(int32_t length, int32_t num_patches = 1); |
|
|
|
|
|
|
|
~ResizeOperation() = default; |
|
|
|
~CutOutOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<int32_t> size_; |
|
|
|
InterpolationMode interpolation_; |
|
|
|
int32_t length_; |
|
|
|
int32_t num_patches_; |
|
|
|
}; |
|
|
|
|
|
|
|
class RandomCropOperation : public TensorOperation { |
|
|
|
class DecodeOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
RandomCropOperation(std::vector<int32_t> size, std::vector<int32_t> padding = {0, 0, 0, 0}, |
|
|
|
bool pad_if_needed = false, std::vector<uint8_t> fill_value = {0, 0, 0}); |
|
|
|
explicit DecodeOperation(bool rgb = true); |
|
|
|
|
|
|
|
~RandomCropOperation() = default; |
|
|
|
~DecodeOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<int32_t> size_; |
|
|
|
std::vector<int32_t> padding_; |
|
|
|
bool pad_if_needed_; |
|
|
|
std::vector<uint8_t> fill_value_; |
|
|
|
bool rgb_; |
|
|
|
}; |
|
|
|
|
|
|
|
class CenterCropOperation : public TensorOperation { |
|
|
|
class NormalizeOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
explicit CenterCropOperation(std::vector<int32_t> size); |
|
|
|
NormalizeOperation(std::vector<float> mean, std::vector<float> std); |
|
|
|
|
|
|
|
~CenterCropOperation() = default; |
|
|
|
~NormalizeOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<int32_t> size_; |
|
|
|
std::vector<float> mean_; |
|
|
|
std::vector<float> std_; |
|
|
|
}; |
|
|
|
|
|
|
|
class UniformAugOperation : public TensorOperation { |
|
|
|
class PadOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
explicit UniformAugOperation(std::vector<std::shared_ptr<TensorOperation>> transforms, int32_t num_ops = 2); |
|
|
|
PadOperation(std::vector<int32_t> padding, std::vector<uint8_t> fill_value = {0}, |
|
|
|
BorderType padding_mode = BorderType::kConstant); |
|
|
|
|
|
|
|
~UniformAugOperation() = default; |
|
|
|
~PadOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<std::shared_ptr<TensorOperation>> transforms_; |
|
|
|
int32_t num_ops_; |
|
|
|
std::vector<int32_t> padding_; |
|
|
|
std::vector<uint8_t> fill_value_; |
|
|
|
BorderType padding_mode_; |
|
|
|
}; |
|
|
|
|
|
|
|
class RandomHorizontalFlipOperation : public TensorOperation { |
|
|
|
class RandomColorAdjustOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
explicit RandomHorizontalFlipOperation(float probability = 0.5); |
|
|
|
RandomColorAdjustOperation(std::vector<float> brightness = {1.0, 1.0}, std::vector<float> contrast = {1.0, 1.0}, |
|
|
|
std::vector<float> saturation = {1.0, 1.0}, std::vector<float> hue = {0.0, 0.0}); |
|
|
|
|
|
|
|
~RandomHorizontalFlipOperation() = default; |
|
|
|
~RandomColorAdjustOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
float probability_; |
|
|
|
std::vector<float> brightness_; |
|
|
|
std::vector<float> contrast_; |
|
|
|
std::vector<float> saturation_; |
|
|
|
std::vector<float> hue_; |
|
|
|
}; |
|
|
|
|
|
|
|
class RandomVerticalFlipOperation : public TensorOperation { |
|
|
|
class RandomCropOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
explicit RandomVerticalFlipOperation(float probability = 0.5); |
|
|
|
RandomCropOperation(std::vector<int32_t> size, std::vector<int32_t> padding = {0, 0, 0, 0}, |
|
|
|
bool pad_if_needed = false, std::vector<uint8_t> fill_value = {0, 0, 0}); |
|
|
|
|
|
|
|
~RandomVerticalFlipOperation() = default; |
|
|
|
~RandomCropOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
float probability_; |
|
|
|
std::vector<int32_t> size_; |
|
|
|
std::vector<int32_t> padding_; |
|
|
|
bool pad_if_needed_; |
|
|
|
std::vector<uint8_t> fill_value_; |
|
|
|
}; |
|
|
|
|
|
|
|
class RandomRotationOperation : public TensorOperation { |
|
|
|
class RandomHorizontalFlipOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
RandomRotationOperation(std::vector<float> degrees, InterpolationMode interpolation_mode, bool expand, |
|
|
|
std::vector<float> center, std::vector<uint8_t> fill_value); |
|
|
|
explicit RandomHorizontalFlipOperation(float probability = 0.5); |
|
|
|
|
|
|
|
~RandomRotationOperation() = default; |
|
|
|
~RandomHorizontalFlipOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<float> degrees_; |
|
|
|
InterpolationMode interpolation_mode_; |
|
|
|
std::vector<float> center_; |
|
|
|
bool expand_; |
|
|
|
std::vector<uint8_t> fill_value_; |
|
|
|
float probability_; |
|
|
|
}; |
|
|
|
|
|
|
|
class PadOperation : public TensorOperation { |
|
|
|
class RandomRotationOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
PadOperation(std::vector<int32_t> padding, std::vector<uint8_t> fill_value = {0}, |
|
|
|
BorderType padding_mode = BorderType::kConstant); |
|
|
|
RandomRotationOperation(std::vector<float> degrees, InterpolationMode interpolation_mode, bool expand, |
|
|
|
std::vector<float> center, std::vector<uint8_t> fill_value); |
|
|
|
|
|
|
|
~PadOperation() = default; |
|
|
|
~RandomRotationOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<int32_t> padding_; |
|
|
|
std::vector<float> degrees_; |
|
|
|
InterpolationMode interpolation_mode_; |
|
|
|
std::vector<float> center_; |
|
|
|
bool expand_; |
|
|
|
std::vector<uint8_t> fill_value_; |
|
|
|
BorderType padding_mode_; |
|
|
|
}; |
|
|
|
|
|
|
|
class CutOutOperation : public TensorOperation { |
|
|
|
class RandomVerticalFlipOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
explicit CutOutOperation(int32_t length, int32_t num_patches = 1); |
|
|
|
explicit RandomVerticalFlipOperation(float probability = 0.5); |
|
|
|
|
|
|
|
~CutOutOperation() = default; |
|
|
|
~RandomVerticalFlipOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
int32_t length_; |
|
|
|
int32_t num_patches_; |
|
|
|
float probability_; |
|
|
|
}; |
|
|
|
|
|
|
|
class RandomColorAdjustOperation : public TensorOperation { |
|
|
|
class ResizeOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
RandomColorAdjustOperation(std::vector<float> brightness = {1.0, 1.0}, std::vector<float> contrast = {1.0, 1.0}, |
|
|
|
std::vector<float> saturation = {1.0, 1.0}, std::vector<float> hue = {0.0, 0.0}); |
|
|
|
explicit ResizeOperation(std::vector<int32_t> size, |
|
|
|
InterpolationMode interpolation_mode = InterpolationMode::kLinear); |
|
|
|
|
|
|
|
~RandomColorAdjustOperation() = default; |
|
|
|
~ResizeOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<float> brightness_; |
|
|
|
std::vector<float> contrast_; |
|
|
|
std::vector<float> saturation_; |
|
|
|
std::vector<float> hue_; |
|
|
|
std::vector<int32_t> size_; |
|
|
|
InterpolationMode interpolation_; |
|
|
|
}; |
|
|
|
|
|
|
|
class CropOperation : public TensorOperation { |
|
|
|
class UniformAugOperation : public TensorOperation { |
|
|
|
public: |
|
|
|
CropOperation(std::vector<int32_t> coordinates, std::vector<int32_t> size); |
|
|
|
explicit UniformAugOperation(std::vector<std::shared_ptr<TensorOperation>> transforms, int32_t num_ops = 2); |
|
|
|
|
|
|
|
~CropOperation() = default; |
|
|
|
~UniformAugOperation() = default; |
|
|
|
|
|
|
|
std::shared_ptr<TensorOp> Build() override; |
|
|
|
|
|
|
|
bool ValidateParams() override; |
|
|
|
|
|
|
|
private: |
|
|
|
std::vector<int32_t> coordinates_; |
|
|
|
std::vector<int32_t> size_; |
|
|
|
std::vector<std::shared_ptr<TensorOperation>> transforms_; |
|
|
|
int32_t num_ops_; |
|
|
|
}; |
|
|
|
|
|
|
|
class SwapRedBlueOperation : public TensorOperation { |
|
|
|
|