Fix bg-channel bug in s_self_tile and s_self_tile_majority (unlocks Tasks 1, 304)
Browse files
own-solver/neurogolf_solver/solvers/wave3.py
CHANGED
|
@@ -14,7 +14,7 @@ from ..constants import GH, GW
|
|
| 14 |
|
| 15 |
|
| 16 |
def s_self_tile(td):
|
| 17 |
-
"""Self-tiling: each non-bg pixel
|
| 18 |
exs = get_exs(td)
|
| 19 |
sp = fixed_shapes(td)
|
| 20 |
if sp is None:
|
|
@@ -46,6 +46,9 @@ def s_self_tile(td):
|
|
| 46 |
_make_int64_init('tile_rp', [1, 1, IH, IW]),
|
| 47 |
numpy_helper.from_array(np.array([0,0,0,0,0,0,pad_h,pad_w], dtype=np.int64), 'pads'),
|
| 48 |
numpy_helper.from_array(np.array(0.0, dtype=np.float32), 'pad_cv'),
|
|
|
|
|
|
|
|
|
|
| 49 |
]
|
| 50 |
nodes = [
|
| 51 |
helper.make_node('Slice', ['input', 'sl_st', 'sl_en'], ['cropped']),
|
|
@@ -54,7 +57,14 @@ def s_self_tile(td):
|
|
| 54 |
helper.make_node('ConvTranspose', ['mask_small', 'up_k'], ['mask_big'],
|
| 55 |
kernel_shape=[IH, IW], strides=[IH, IW]),
|
| 56 |
helper.make_node('Tile', ['cropped', 'tile_rp'], ['tiled']),
|
| 57 |
-
helper.make_node('Mul', ['tiled', 'mask_big'], ['
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
helper.make_node('Pad', ['result', 'pads', 'pad_cv'], ['output'], mode='constant'),
|
| 59 |
]
|
| 60 |
return mk(nodes, inits)
|
|
@@ -94,6 +104,9 @@ def s_self_tile_majority(td):
|
|
| 94 |
_make_int64_init('tile_rp', [1, 1, IH, IW]),
|
| 95 |
numpy_helper.from_array(np.array([0,0,0,0,0,0,pad_h,pad_w], dtype=np.int64), 'pads'),
|
| 96 |
numpy_helper.from_array(np.array(0.0, dtype=np.float32), 'pad_cv'),
|
|
|
|
|
|
|
|
|
|
| 97 |
]
|
| 98 |
nodes = [
|
| 99 |
helper.make_node('Slice', ['input', 'sl_st', 'sl_en'], ['cropped']),
|
|
@@ -106,7 +119,14 @@ def s_self_tile_majority(td):
|
|
| 106 |
helper.make_node('ConvTranspose', ['mask_small', 'up_k'], ['mask_big'],
|
| 107 |
kernel_shape=[IH, IW], strides=[IH, IW]),
|
| 108 |
helper.make_node('Tile', ['cropped', 'tile_rp'], ['tiled']),
|
| 109 |
-
helper.make_node('Mul', ['tiled', 'mask_big'], ['
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
helper.make_node('Pad', ['result', 'pads', 'pad_cv'], ['output'], mode='constant'),
|
| 111 |
]
|
| 112 |
return mk(nodes, inits)
|
|
|
|
| 14 |
|
| 15 |
|
| 16 |
def s_self_tile(td):
|
| 17 |
+
"""Self-tiling: each non-bg pixel -> full copy of input. Output = IH^2 x IW^2."""
|
| 18 |
exs = get_exs(td)
|
| 19 |
sp = fixed_shapes(td)
|
| 20 |
if sp is None:
|
|
|
|
| 46 |
_make_int64_init('tile_rp', [1, 1, IH, IW]),
|
| 47 |
numpy_helper.from_array(np.array([0,0,0,0,0,0,pad_h,pad_w], dtype=np.int64), 'pads'),
|
| 48 |
numpy_helper.from_array(np.array(0.0, dtype=np.float32), 'pad_cv'),
|
| 49 |
+
numpy_helper.from_array(np.float32(0.5), 'half'),
|
| 50 |
+
numpy_helper.from_array(np.ones((1, 1, OH, OW), dtype=np.float32), 'grid_mask'),
|
| 51 |
+
numpy_helper.from_array(np.zeros((1, 9, OH, OW), dtype=np.float32), 'z9'),
|
| 52 |
]
|
| 53 |
nodes = [
|
| 54 |
helper.make_node('Slice', ['input', 'sl_st', 'sl_en'], ['cropped']),
|
|
|
|
| 57 |
helper.make_node('ConvTranspose', ['mask_small', 'up_k'], ['mask_big'],
|
| 58 |
kernel_shape=[IH, IW], strides=[IH, IW]),
|
| 59 |
helper.make_node('Tile', ['cropped', 'tile_rp'], ['tiled']),
|
| 60 |
+
helper.make_node('Mul', ['tiled', 'mask_big'], ['result_raw']),
|
| 61 |
+
# bg-channel fix: set ch0=1 for bg positions within OH x OW grid
|
| 62 |
+
helper.make_node('ReduceMax', ['result_raw'], ['has_color'], axes=[1], keepdims=1),
|
| 63 |
+
helper.make_node('Greater', ['has_color', 'half'], ['has_color_b']),
|
| 64 |
+
helper.make_node('Cast', ['has_color_b'], ['has_color_f'], to=TensorProto.FLOAT),
|
| 65 |
+
helper.make_node('Sub', ['grid_mask', 'has_color_f'], ['bg_mask']),
|
| 66 |
+
helper.make_node('Concat', ['bg_mask', 'z9'], ['bg_oh'], axis=1),
|
| 67 |
+
helper.make_node('Add', ['result_raw', 'bg_oh'], ['result']),
|
| 68 |
helper.make_node('Pad', ['result', 'pads', 'pad_cv'], ['output'], mode='constant'),
|
| 69 |
]
|
| 70 |
return mk(nodes, inits)
|
|
|
|
| 104 |
_make_int64_init('tile_rp', [1, 1, IH, IW]),
|
| 105 |
numpy_helper.from_array(np.array([0,0,0,0,0,0,pad_h,pad_w], dtype=np.int64), 'pads'),
|
| 106 |
numpy_helper.from_array(np.array(0.0, dtype=np.float32), 'pad_cv'),
|
| 107 |
+
numpy_helper.from_array(np.float32(0.5), 'half'),
|
| 108 |
+
numpy_helper.from_array(np.ones((1, 1, OH, OW), dtype=np.float32), 'grid_mask'),
|
| 109 |
+
numpy_helper.from_array(np.zeros((1, 9, OH, OW), dtype=np.float32), 'z9'),
|
| 110 |
]
|
| 111 |
nodes = [
|
| 112 |
helper.make_node('Slice', ['input', 'sl_st', 'sl_en'], ['cropped']),
|
|
|
|
| 119 |
helper.make_node('ConvTranspose', ['mask_small', 'up_k'], ['mask_big'],
|
| 120 |
kernel_shape=[IH, IW], strides=[IH, IW]),
|
| 121 |
helper.make_node('Tile', ['cropped', 'tile_rp'], ['tiled']),
|
| 122 |
+
helper.make_node('Mul', ['tiled', 'mask_big'], ['result_raw']),
|
| 123 |
+
# bg-channel fix: set ch0=1 for bg positions within OH x OW grid
|
| 124 |
+
helper.make_node('ReduceMax', ['result_raw'], ['has_color'], axes=[1], keepdims=1),
|
| 125 |
+
helper.make_node('Greater', ['has_color', 'half'], ['has_color_b']),
|
| 126 |
+
helper.make_node('Cast', ['has_color_b'], ['has_color_f'], to=TensorProto.FLOAT),
|
| 127 |
+
helper.make_node('Sub', ['grid_mask', 'has_color_f'], ['bg_mask']),
|
| 128 |
+
helper.make_node('Concat', ['bg_mask', 'z9'], ['bg_oh'], axis=1),
|
| 129 |
+
helper.make_node('Add', ['result_raw', 'bg_oh'], ['result']),
|
| 130 |
helper.make_node('Pad', ['result', 'pads', 'pad_cv'], ['output'], mode='constant'),
|
| 131 |
]
|
| 132 |
return mk(nodes, inits)
|