rogermt commited on
Commit
4fb2819
·
verified ·
1 Parent(s): 29fae7c

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 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,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'], ['result']),
 
 
 
 
 
 
 
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'], ['result']),
 
 
 
 
 
 
 
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)