code: def _schedule_spatial_conv2d_nhwc(
      cfg,
      s,
      data_pad,
      data_vec,
      kernel_vec,
      conv_out,
      output,
      last,
      unipolar,
  ):
      _, _, _, _, _, IB, CI = data_vec.shape
      _, KH, KW, KB, _, _ = kernel_vec.shape
      KB = get_const_int(KB)
      IB = get_const_int(IB)
  
      VC = cfg["tile_co"].size[-1]
      VH = cfg["tile_oh"].size[-1]
      VW = cfg["tile_ow"].size[-1]
  
      ##### Schedule data padding and  packing
      if data_pad is not None:
          s[data_pad].compute_inline()
  
      _, h, _, _, _, _, _ = s[data_vec].op.axis
      cfg.define_split(
          "tile_ah", cfg.axis(h), num_outputs=2, max_factor=32
      )
      oh, ih = cfg["tile_ah"].apply(s, data_vec, h)
      s[data_vec].parallel(oh)
  
      #### Schedule kernel packing
      co, _, _, _, _, _ = s[kernel_vec].op.axis
      cfg.define_split(
          "tile_bco", cfg.axis(co), num_outputs=2, max_factor=32
      )
      oco, ico = cfg["tile_bco"].apply(s, kernel_vec, co)
      s[kernel_vec].parallel(oco)
  
      ##### Schedule Convolution
      n, oh, ow, co, vh, vw, vc = s[conv_out].op.axis
      kh, kw, kb, ib, ci = s[conv_out].op.reduce_axis
  
      ci_o, ci_i = cfg["tile_ci"].apply(s, conv_out, ci)
      re_axes = cfg["reorder_0"].apply(
          s,
          conv_out,
          [n, oh, ow, co, vh, vw, kh, kw, ci_o, kb, ib, vc, ci_i],
      )
  
      # Use microkernel
      kfactor = cfg["tile_ci"].size[1]
      if kfactor % 8 == 0:
          pc = _intrin_popcount(VC, kfactor, KB, IB, unipolar)
          s[conv_out].tensorize(kb, pc)
  
      n, h, w, co = s[last].op.axis
      co, vc = cfg["tile_co"].apply(s, last, co)
      oh, vh = cfg["tile_oh"].apply(s, last, h)
      ow, vw = cfg["tile_ow"].apply(s, last, w)
      s[last].reorder(n, oh, ow, co, vh, vw, vc)
      s[last].vectorize(vc)
      if last != output:
          s[output].compute_inline()
  
      s[conv_out].compute_at(s[last], co)
      s[last].parallel(oh)
      return s
  
file_path: tvm/python/tvm/topi/arm_cpu/bitserial_conv2d.py
imports: from __future__ import absolute_import
  import tvm
  from tvm import te
  from tvm import autotvm
  from tvm import relay
  from ..nn.pad import pad
  from ..nn.bitserial_conv2d import bitserial_conv2d_legalize
  from ..nn.bitserial_util import bitpack, binary_op_multiplier
  from ..nn.utils import get_pad_tuple
  from ..utils import get_const_int, get_const_tuple, traverse_inline
label_desc: Use image node_id 4 for calling a global function with example usage: _schedule_spatial_conv2d_nhwc(cfg, s, data_pad, data_vec, kernel_vec, conv_out, output, last, unipolar) and returns: s