API Reference¶
alpharotate.utils¶
densely_coded_label¶
- alpharotate.utils.densely_coded_label.angle_label_decode(angle_encode_label, angle_range, omega=1.0, mode=0)[source]¶
Decode binary/gray label back to angle label
- Parameters
angle_encode_label – binary/gray label
angle_label – angle label, range in [-90,0) or [-180, 0)
angle_range – 90 or 180
mode – 0: binary label, 1: gray label
- Returns
angle label
- alpharotate.utils.densely_coded_label.angle_label_encode(angle_label, angle_range, omega=1.0, mode=0)[source]¶
Encode angle label as binary/gray label
- Parameters
angle_label – angle label, range in [-90,0) or [-180, 0)
angle_range – 90 or 180
omega – angle discretization granularity
mode – 0: binary label, 1: gray label
- Returns
binary/gray label
Dense Coded Label: Proposed by “Xue Yang et al. Dense Label Encoding for Boundary Discontinuity Free Rotation Detection. CVPR 2021.”
- alpharotate.utils.densely_coded_label.binary_label_decode(binary_label, angle_range, omega=1.0)[source]¶
Decode binary label back to angle label
- Parameters
binary_label – binary label
angle_range – 90 or 180
omega – angle discretization granularity
- Returns
angle label
- alpharotate.utils.densely_coded_label.binary_label_encode(angle_label, angle_range, omega=1.0)[source]¶
Encode angle label as binary label
- Parameters
angle_label – angle label, range in [-90,0) or [-180, 0)
angle_range – 90 or 180
omega – angle discretization granularity
- Returns
binary label
- alpharotate.utils.densely_coded_label.get_all_binary_label(num_label, class_range)[source]¶
Get all binary label according to num_label
- Parameters
num_label – angle_range/omega, 90/omega or 180/omega
class_range – angle_range/omega, 90/omega or 180/omega
- Returns
all binary label
- alpharotate.utils.densely_coded_label.get_all_gray_label(angle_range)[source]¶
Get all gray label
- Parameters
angle_range – 90/omega or 180/omega
- Returns
all gray label
- alpharotate.utils.densely_coded_label.get_code_len(class_range, mode=0)[source]¶
Get encode length
- Parameters
class_range – angle_range/omega
mode – 0: binary label, 1: gray label
- Returns
encode length
smooth_label¶
- alpharotate.utils.smooth_label.angle_smooth_label(angle_label, angle_range=90, label_type=0, radius=4, omega=1)[source]¶
- Parameters
angle_label – angle label, range in [-90,0) or [-180, 0)
angle_range – 90 or 180
label_type – 0: gaussian label, 1: rectangular label, 2: pulse label, 3: triangle label
radius – window radius
omega – angle discretization granularity
- Returns
Circular Smooth Label: Proposed by “Xue Yang et al. Arbitrary-Oriented Object Detection with Circular Smooth Label. ECCV 2020.”
- alpharotate.utils.smooth_label.gaussian_label(label, num_class, u=0, sig=4.0)[source]¶
Get gaussian label
- Parameters
label – angle_label/omega
num_class – angle_range/omega
u – mean
sig – window radius
- Returns
gaussian label
- alpharotate.utils.smooth_label.pulse_label(label, num_class)[source]¶
Get pulse label
- Parameters
label – angle_label/omega
num_class – angle_range/omega
- Returns
pulse label
gaussian_metric¶
- alpharotate.utils.gaussian_metric.box2gaussian(boxes1, boxes2)[source]¶
Convert box \((x,y,w,h, heta)\) to Gaussian distribution \((\mathbf \mu, \mathbf \Sigma)\)
- Parameters
boxes1 – \((x_{1},y_{1},w_{1},h_{1}, heta_{1})\), [-1, 5]
boxes2 – \((x_{2},y_{2},w_{2},h_{2}, heta_{2})\), [-1, 5]
- Returns
\((\mathbf \mu, \mathbf \Sigma)\)
- alpharotate.utils.gaussian_metric.gaussian_kullback_leibler_divergence(boxes1, boxes2)[source]¶
Calculate the kullback-leibler divergence between boxes1 and boxes2
- Parameters
boxes1 – \((x_{1},y_{1},w_{1},h_{1}, heta_{1})\), shape: [-1, 5]
boxes2 – \((x_{2},y_{2},w_{2},h_{2}, heta_{2})\), shape: [-1, 5]
- Returns
kullback-leibler divergence, \(\mathbf D_{kl}\)
- alpharotate.utils.gaussian_metric.gaussian_wasserstein_distance(boxes1, boxes2)[source]¶
Calculate the wasserstein distance between boxes1 and boxes2: \(\mathbf D_{w} = ||\mathbf \mu_{1} - \mathbf \mu_{2}||^{2}_{2} + \mathbf Tr(\mathbf \Sigma_{1} + \mathbf \Sigma_{2} - 2(\mathbf \Sigma_{1}^{1/2}\mathbf \Sigma_{2}\mathbf \Sigma_{1}^{1/2})^{1/2})\)
- Parameters
boxes1 – \((x_{1},y_{1},w_{1},h_{1}, heta_{1})\), shape: [-1, 5]
boxes2 – \((x_{2},y_{2},w_{2},h_{2}, heta_{2})\), shape: [-1, 5]
- Returns
wasserstein distance, \(\mathbf D_{w}\)
- alpharotate.utils.gaussian_metric.kullback_leibler_divergence(mu1, mu2, mu1_T, mu2_T, sigma1, sigma2)[source]¶
Calculate the kullback-leibler divergence between two Gaussian distributions : \(\mathbf D_{kl} = 0.5*((\mathbf \mu_{1}-\mathbf \mu_{2})^T \mathbf \Sigma_{2}^{1/2}(\mathbf \mu_{1}-\mathbf \mu_{2})+0.5*\mathbf Tr(\mathbf \Sigma_{2}^{-1} \mathbf \Sigma_{1})+0.5*\ln |\mathbf \Sigma_{2}|/|\mathbf \Sigma_{1}| -1\)
- Parameters
mu1 – mean \((\mu_{1})\) of the Gaussian distribution, shape: [-1, 1, 2]
mu2 – mean \((\mu_{2})\) of the Gaussian distribution, shape: [-1, 1, 2]
mu1_T – transposition of \((\mu_{1})\), shape: [-1, 2, 1]
mu2_T – transposition of \((\mu_{2})\), shape: [-1, 2, 1]
sigma1 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]
sigma2 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]
- Returns
kullback-leibler divergence, \(\mathbf D_{kl}\)
- alpharotate.utils.gaussian_metric.wasserstein_distance_item2(sigma1, sigma2)[source]¶
Calculate the second term of wasserstein distance: \(\mathbf Tr(\mathbf \Sigma_{1} + \mathbf \Sigma_{2} - 2(\mathbf \Sigma_{1}^{1/2}\mathbf \Sigma_{2}\mathbf \Sigma_{1}^{1/2})^{1/2})\)
- Parameters
sigma1 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]
sigma2 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]
- Returns
the second term of wasserstein distance