|
|
@@ -31,13 +31,14 @@ namespace Tensorflow |
|
|
|
|
|
|
|
internal static Operation[] _CheckAtLeast3DImage(Tensor image, bool require_static) |
|
|
|
{ |
|
|
|
TensorShape image_shape; |
|
|
|
try |
|
|
|
{ |
|
|
|
if ( image.get_shape().NDims == null ) |
|
|
|
if ( image.shape.NDims == null ) |
|
|
|
{ |
|
|
|
var image_shape = image.get_shape().with_rank(3); |
|
|
|
image_shape = image.shape.with_rank(3); |
|
|
|
} else { |
|
|
|
var image_shape = image.get_shape().with_rank_at_least(3); |
|
|
|
image_shape = image.shape.with_rank_at_least(3); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (ValueError) |
|
|
@@ -58,21 +59,21 @@ namespace Tensorflow |
|
|
|
return new Operation[] { |
|
|
|
check_ops.assert_positive( |
|
|
|
array_ops.shape(image)[-3..], |
|
|
|
@"inner 3 dims of 'image.shape' |
|
|
|
must be > 0."), |
|
|
|
new {@"inner 3 dims of 'image.shape' |
|
|
|
must be > 0."}), |
|
|
|
check_ops.assert_greater_equal( |
|
|
|
array_ops.rank(image), |
|
|
|
3, |
|
|
|
ops.convert_to_tensor(3), |
|
|
|
message: "'image' must be at least three-dimensional.") |
|
|
|
}; |
|
|
|
} else { |
|
|
|
return new Operation[] {}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
internal static Tensor fix_image_flip_shape(Tensor image, Tensor result) |
|
|
|
{ |
|
|
|
TensorShape image_shape = image.get_shape(); |
|
|
|
TensorShape image_shape = image.shape; |
|
|
|
if (image_shape == tensor_shape.unknown_shape()) |
|
|
|
{ |
|
|
|
result.set_shape(new { null, null, null }); |
|
|
@@ -94,36 +95,36 @@ namespace Tensorflow |
|
|
|
seed: seed, |
|
|
|
scope_name: "random_flip_left_right"); |
|
|
|
|
|
|
|
internal static Tensor _random_flip(Tensor image, int flipindex, int seed, |
|
|
|
internal static Tensor _random_flip(Tensor image, int flip_index, int seed, |
|
|
|
string scope_name) |
|
|
|
{ |
|
|
|
using ( var scope = ops.name_scope(null, scope_name, image)) |
|
|
|
using ( var scope = ops.name_scope(null, scope_name, new { image }) ) |
|
|
|
{ |
|
|
|
image = ops.convert_to_tensor(image, name: "image"); |
|
|
|
image = _AssertAtLeast3DImage(image); |
|
|
|
var shape = image.get_shape(); |
|
|
|
Tensor shape = image.shape; |
|
|
|
if ( shape.NDims == 3 || shape.NDims == null ) |
|
|
|
{ |
|
|
|
var uniform_random = random_ops.random_uniform(new Tensor [], 0, 1.0, seed: seed); |
|
|
|
var uniform_random = random_ops.random_uniform(new {}, 0, 1.0, seed: seed); |
|
|
|
var mirror_cond = math_ops.less(uniform_random, .5); |
|
|
|
var result = control_flow_ops.cond( |
|
|
|
pred: mirror_cond, |
|
|
|
true_fn: array_ops.reverse(image, flipindex as int[]), |
|
|
|
true_fn: array_ops.reverse(image, new { flip_index }), |
|
|
|
false_fn: image, |
|
|
|
name: scope |
|
|
|
); |
|
|
|
return fix_image_flip_shape(image, result); |
|
|
|
} else if ( shape.NDims == 4 ) |
|
|
|
{ |
|
|
|
var batch_size = array_ops.shape(image)[0]; |
|
|
|
var uniform_random = random_ops.random_uniform(batch_size, |
|
|
|
var batch_size = array_ops.shape(image); |
|
|
|
var uniform_random = random_ops.random_uniform(batch_size[0], |
|
|
|
0, |
|
|
|
1.0, |
|
|
|
1.0 as float, |
|
|
|
seed: seed); |
|
|
|
var flips = math_ops.round( |
|
|
|
array_ops.reshape(uniform_random, shape: new Tensor [batch_size, 1, 1, 1])); |
|
|
|
array_ops.reshape(uniform_random, shape: new Tensor [batch_size[0], 1, 1, 1])); |
|
|
|
flips = math_ops.cast(flips, image.dtype); |
|
|
|
var flipped_input = array_ops.reverse(image, flip_index + 1 as int[]); |
|
|
|
var flipped_input = array_ops.reverse(image, new { flip_index + 1 }); |
|
|
|
return flips * flipped_input + (1 - flips) * image; |
|
|
|
} else |
|
|
|
{ |
|
|
@@ -131,7 +132,7 @@ namespace Tensorflow |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static Tensor flip_left_right(Tensor image) |
|
|
|
=> _flip(image, 1, "flip_left_right"); |
|
|
|
|
|
|
@@ -144,7 +145,7 @@ namespace Tensorflow |
|
|
|
{ |
|
|
|
image = ops.convert_to_tensor(image, name: "image"); |
|
|
|
image = _AssertAtLeast3DImage(image); |
|
|
|
TensorShape shape = image.get_shape(); |
|
|
|
Tensor shape = image.shape; |
|
|
|
if ( shape.NDims == 3 || shape.NDims == null ) |
|
|
|
{ |
|
|
|
return fix_image_flip_shape(image, array_ops.reverse(image, new { flip_index })); |
|
|
|