Mxnet mobilenet ssd compilation fails for raspberry pi

import os
import zipfile
import tvm
import nnvm
import mxnet as mx
import numpy as np

from nnvm import compiler
from nnvm.frontend import from_mxnet
from tvm import relay
from mxnet.model import load_checkpoint

dshape = (1, 3, 512, 512)
dtype = "float32"
target_host = None

target = tvm.target.arm_cpu('rasp3b')

inf_json = "deploy_ssd_mobilenet_512/deploy_ssd_mobilenet_512-symbol.json"
sym = mx.sym.load(inf_json)
checkp = "deploy_ssd_mobilenet_512/deploy_ssd_mobilenet_512"

_, arg_params, aux_params = load_checkpoint(checkp, 0)

net, params = relay.frontend.from_mxnet(sym, {"data": dshape}, arg_params=arg_params, \
                                            aux_params=aux_params)
with relay.build_config(opt_level=3):
        graph, lib, params = relay.build(net, target, params=params, target_host=target_host)

Error:

Traceback (most recent call last):
  File "./compile.py", line 78, in <module>
    net, target, {"data": dshape}, params=params, target_host=target_host)
  File "/root/tvm/nnvm/python/nnvm/compiler/build_module.py", line 321, in build
    graph = graph.apply("GraphCompile")
  File "/root/tvm/nnvm/python/nnvm/graph.py", line 250, in apply
    check_call(_LIB.NNGraphApplyPasses(self.handle, npass, cpass, ctypes.byref(ghandle)))
  File "/root/tvm/nnvm/python/nnvm/_base.py", line 91, in check_call
    raise NNVMError(py_str(_LIB.NNGetLastError()))
nnvm._base.NNVMError: TVMError: Check failed: a.type() == b.type(): BinaryOp of mismatched types

During handling of the above exception, another exception occurred:

TVMError: Check failed: a.type() == b.type(): BinaryOp of mismatched types
Error during compile graph
--------------------------
Graph(%input0,
      %input1,
      %input2,
      %input3,
      %input4,
      %input5,
      %input6) {
  %input0, shape=[1,84,32,32]
  %input1, shape=[1,126,16,16]
  %input2, shape=[1,126,8,8]
  %input3, shape=[1,126,4,4]
  %input4, shape=[1,126,2,2]
  %input5, shape=[1,84,1,1]
  %input6, shape=[1,84,1,1]
  %1 = transpose(%input0, axes='(0, 2, 3, 1)'), shape=[1,32,32,84]
  %2 = flatten(%1), shape=[1,86016]
  %4 = transpose(%input1, axes='(0, 2, 3, 1)'), shape=[1,16,16,126]
  %5 = flatten(%4), shape=[1,32256]
  %7 = transpose(%input2, axes='(0, 2, 3, 1)'), shape=[1,8,8,126]
  %8 = flatten(%7), shape=[1,8064]
  %10 = transpose(%input3, axes='(0, 2, 3, 1)'), shape=[1,4,4,126]
  %11 = flatten(%10), shape=[1,2016]
  %13 = transpose(%input4, axes='(0, 2, 3, 1)'), shape=[1,2,2,126]
  %14 = flatten(%13), shape=[1,504]
  %16 = transpose(%input5, axes='(0, 2, 3, 1)'), shape=[1,1,1,84]
  %17 = flatten(%16), shape=[1,84]
  %19 = transpose(%input6, axes='(0, 2, 3, 1)'), shape=[1,1,1,84]
  %20 = flatten(%19), shape=[1,84]
  %21 = concatenate(%2, %5, %8, %11, %14, %17, %20, axis='1'), shape=[1,129024]
  %22 = reshape(%21, shape='(0, -1, 21)'), shape=[1,6144,21]
  %23 = transpose(%22, axes='(0, 2, 1)'), shape=[1,21,6144]
  ret %23
}
graph_attr_keys = [shape, shape_num_unknown_nodes, dtype, dtype_num_unknown_nodes]

Stack trace:
  File "/root/tvm/3rdparty/HalideIR/src/ir/./IR.h", line 177
  [bt] (0) /root/tvm/build/libtvm.so(+0x13c242) [0x7f03c6986242]
  [bt] (1) /root/tvm/build/libtvm.so(+0x164e38) [0x7f03c69aee38]
  [bt] (2) /root/tvm/build/libtvm.so(tvm::ir::IRMutator::Mutate_(HalideIR::Internal::LE const*, HalideIR::Expr const&)+0xf6) [0x7f03c6b94136]
  [bt] (3) /root/tvm/build/libtvm.so(+0x345077) [0x7f03c6b8f077]
  [bt] (4) /root/tvm/build/libtvm.so(+0x34ed83) [0x7f03c6b98d83]
  [bt] (5) /root/tvm/build/libtvm.so(+0x1ba6a0) [0x7f03c6a046a0]
  [bt] (6) /root/tvm/build/libtvm.so(tvm::ir::IRMutator::Mutate(HalideIR::Expr)+0x5b) [0x7f03c6a04c3b]
  [bt] (7) /root/tvm/build/libtvm.so(+0x33805e) [0x7f03c6b8205e]
  [bt] (8) /root/tvm/build/libtvm.so(+0x3389f5) [0x7f03c6b829f5]
    raise get_last_ffi_error()
  File "/root/tvm/python/tvm/_ffi/_ctypes/function.py", line 206, in __call__
    stmt = ir_pass.VectorizeLoop(stmt)
  File "/root/tvm/python/tvm/build_module.py", line 387, in lower
    f = tvm.lower(sch, inputs, name=func_name)
  File "/root/tvm/nnvm/python/nnvm/compiler/build_module.py", line 123, in _lower
    raise RuntimeError(msg)
  File "/root/tvm/nnvm/python/nnvm/compiler/build_module.py", line 131, in _lower
    rv = local_pyfunc(*pyargs)
  File "/root/tvm/python/tvm/_ffi/_ctypes/function.py", line 71, in cfun
  File "/root/tvm/3rdparty/HalideIR/src/ir/./IR.h", line 177
  [bt] (0) /root/tvm/build/libtvm.so(+0x13c242) [0x7f03c6986242]
  [bt] (1) /root/tvm/build/libtvm.so(+0x164e38) [0x7f03c69aee38]
  [bt] (2) /root/tvm/build/libtvm.so(tvm::ir::IRMutator::Mutate_(HalideIR::Internal::LE const*, HalideIR::Expr const&)+0xf6) [0x7f03c6b94136]
  [bt] (3) /root/tvm/build/libtvm.so(+0x345077) [0x7f03c6b8f077]
  [bt] (4) /root/tvm/build/libtvm.so(+0x34ed83) [0x7f03c6b98d83]
  [bt] (5) /root/tvm/build/libtvm.so(+0x1ba6a0) [0x7f03c6a046a0]
  [bt] (6) /root/tvm/build/libtvm.so(tvm::ir::IRMutator::Mutate(HalideIR::Expr)+0x5b) [0x7f03c6a04c3b]
  [bt] (7) /root/tvm/build/libtvm.so(+0x33805e) [0x7f03c6b8205e]
  [bt] (8) /root/tvm/build/libtvm.so(+0x3389f5) [0x7f03c6b829f5]
    raise get_last_ffi_error()
  File "/root/tvm/python/tvm/_ffi/_ctypes/function.py", line 206, in __call__
    stmt = ir_pass.VectorizeLoop(stmt)
  File "/root/tvm/python/tvm/build_module.py", line 387, in lower
    f = tvm.lower(sch, inputs, name=func_name)
  File "/root/tvm/nnvm/python/nnvm/compiler/build_module.py", line 123, in _lower
Stack trace:
  [bt] (0) /root/tvm/build/libtvm.so(+0x8b544b) [0x7f03c70ff44b]
  [bt] (1) /root/tvm/nnvm/python/nnvm/../../../build/libnnvm_compiler.so(+0x11f671) [0x7f03be8dc671]
  [bt] (2) /root/tvm/nnvm/python/nnvm/../../../build/libnnvm_compiler.so(+0x11fde7) [0x7f03be8dcde7]
  [bt] (3) /root/tvm/nnvm/python/nnvm/../../../build/libnnvm_compiler.so(+0x117177) [0x7f03be8d4177]
  [bt] (4) /root/tvm/nnvm/python/nnvm/../../../build/libnnvm_compiler.so(+0x11058a) [0x7f03be8cd58a]
  [bt] (5) /root/tvm/nnvm/python/nnvm/../../../build/libnnvm_compiler.so(+0xc8ad0) [0x7f03be885ad0]
  [bt] (6) /root/tvm/nnvm/python/nnvm/../../../build/libnnvm_compiler.so(+0x78f23) [0x7f03be835f23]
  [bt] (7) /root/tvm/nnvm/python/nnvm/../../../build/libnnvm_compiler.so(NNGraphApplyPasses+0x348) [0x7f03be82a3a8]
  [bt] (8) /usr/lib/python3.5/lib-dynload/_ctypes.cpython-35m-x86_64-linux-gnu.so(ffi_call_unix64+0x4c) [0x7f03e77e7e20]

relay frontend:

Traceback (most recent call last):
  File "./compile.py", line 74, in <module>
    graph, lib, params = relay.build(net, target, params=params, target_host=target_host)
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/relay/build_module.py", line 303, in build
    graph_json, lowered_funcs, params = graph_gen.codegen(func)
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/relay/backend/graph_runtime_codegen.py", line 90, in codegen
    self._codegen(func)
  File "tvm/_ffi/_cython/./function.pxi", line 304, in tvm._ffi._cy3.core.FunctionBase.__call__
  File "tvm/_ffi/_cython/./function.pxi", line 239, in tvm._ffi._cy3.core.FuncCall
  File "tvm/_ffi/_cython/./function.pxi", line 228, in tvm._ffi._cy3.core.FuncCall3
  File "tvm/_ffi/_cython/./base.pxi", line 168, in tvm._ffi._cy3.core.CALL
tvm._ffi.base.TVMError: Traceback (most recent call last):
  [bt] (8) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x4abb83) [0x7f22bb3cab83]
  [bt] (7) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x4af896) [0x7f22bb3ce896]
  [bt] (6) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x4abb83) [0x7f22bb3cab83]
  [bt] (5) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x4af896) [0x7f22bb3ce896]
  [bt] (4) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x4abb83) [0x7f22bb3cab83]
  [bt] (3) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x4af518) [0x7f22bb3ce518]
  [bt] (2) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x48b96f) [0x7f22bb3aa96f]
  [bt] (1) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x4932ff) [0x7f22bb3b22ff]
  [bt] (0) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x8e7f8b) [0x7f22bb806f8b]
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/relay/backend/_backend.py", line 52, in lower
    f = _build.lower(sch, inputs, name=func_name)
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/build_module.py", line 387, in lower
    stmt = ir_pass.VectorizeLoop(stmt)
  File "tvm/_ffi/_cython/./function.pxi", line 304, in tvm._ffi._cy3.core.FunctionBase.__call__
  File "tvm/_ffi/_cython/./function.pxi", line 239, in tvm._ffi._cy3.core.FuncCall
  File "tvm/_ffi/_cython/./function.pxi", line 228, in tvm._ffi._cy3.core.FuncCall3
  File "tvm/_ffi/_cython/./base.pxi", line 168, in tvm._ffi._cy3.core.CALL
  [bt] (8) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x3fb671) [0x7f22bb31a671]
  [bt] (7) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x3face5) [0x7f22bb319ce5]
  [bt] (6) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::ir::IRMutator::Mutate(HalideIR::Expr)+0x5d) [0x7f22bb11996d]
  [bt] (5) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x1ac7a2) [0x7f22bb0cb7a2]
  [bt] (4) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x335dc3) [0x7f22bb254dc3]
  [bt] (3) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x32c2f7) [0x7f22bb24b2f7]
  [bt] (2) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::ir::IRMutator::Mutate_(HalideIR::Internal::LE const*, HalideIR::Expr const&)+0xf0) [0x7f22bb2505b0]
  [bt] (1) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x1641ee) [0x7f22bb0831ee]
  [bt] (0) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x145d33) [0x7f22bb064d33]
  File "/home/dlc/tvm/3rdparty/HalideIR/src/ir/./IR.h", line 177
  File "tvm/_ffi/_cython/./function.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/relay/backend/_backend.py", line 60, in lower
    raise RuntimeError(msg)
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/relay/backend/_backend.py", line 52, in lower
    f = _build.lower(sch, inputs, name=func_name)
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/build_module.py", line 387, in lower
    stmt = ir_pass.VectorizeLoop(stmt)
  File "tvm/_ffi/_cython/./function.pxi", line 304, in tvm._ffi._cy3.core.FunctionBase.__call__
  File "tvm/_ffi/_cython/./function.pxi", line 239, in tvm._ffi._cy3.core.FuncCall
  File "tvm/_ffi/_cython/./function.pxi", line 228, in tvm._ffi._cy3.core.FuncCall3
  File "tvm/_ffi/_cython/./base.pxi", line 168, in tvm._ffi._cy3.core.CALL
  [bt] (8) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x3fb671) [0x7f22bb31a671]
  [bt] (7) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x3face5) [0x7f22bb319ce5]
  [bt] (6) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::ir::IRMutator::Mutate(HalideIR::Expr)+0x5d) [0x7f22bb11996d]
  [bt] (5) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x1ac7a2) [0x7f22bb0cb7a2]
  [bt] (4) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x335dc3) [0x7f22bb254dc3]
  [bt] (3) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x32c2f7) [0x7f22bb24b2f7]
  [bt] (2) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::ir::IRMutator::Mutate_(HalideIR::Internal::LE const*, HalideIR::Expr const&)+0xf0) [0x7f22bb2505b0]
  [bt] (1) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x1641ee) [0x7f22bb0831ee]
  [bt] (0) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(+0x145d33) [0x7f22bb064d33]
  File "/home/dlc/tvm/3rdparty/HalideIR/src/ir/./IR.h", line 177
TVMError: Check failed: a.type() == b.type(): BinaryOp of mismatched types
During handling of the above exception, another exception occurred:

TVMError: Check failed: a.type() == b.type(): BinaryOp of mismatched types
Error during compile function
-----------------------------
v0.0.1
fn (%p0: Tensor[(1, 84, 32, 32), float32], %p1: Tensor[(1, 126, 16, 16), float32], %p2: Tensor[(1, 126, 8, 8), float32], %p3: Tensor[(1, 126, 4, 4), float32], %p4: Tensor[(1, 126, 2, 2), float32], %p5: Tensor[(1, 84, 1, 1), float32], %p6: Tensor[(1, 84, 1, 1), float32], __dict__=meta[StrMap][0]) -> Tensor[(1, 21, 6144), float32] {
  %0 = transpose(%p0, axes=[0, 2, 3, 1]) /* ty=Tensor[(1, 32, 32, 84), float32] */
  %1 = nn.batch_flatten(%0) /* ty=Tensor[(1, 86016), float32] */
  %2 = transpose(%p1, axes=[0, 2, 3, 1]) /* ty=Tensor[(1, 16, 16, 126), float32] */
  %3 = nn.batch_flatten(%2) /* ty=Tensor[(1, 32256), float32] */
  %4 = transpose(%p2, axes=[0, 2, 3, 1]) /* ty=Tensor[(1, 8, 8, 126), float32] */
  %5 = nn.batch_flatten(%4) /* ty=Tensor[(1, 8064), float32] */
  %6 = transpose(%p3, axes=[0, 2, 3, 1]) /* ty=Tensor[(1, 4, 4, 126), float32] */
  %7 = nn.batch_flatten(%6) /* ty=Tensor[(1, 2016), float32] */
  %8 = transpose(%p4, axes=[0, 2, 3, 1]) /* ty=Tensor[(1, 2, 2, 126), float32] */
  %9 = nn.batch_flatten(%8) /* ty=Tensor[(1, 504), float32] */
  %10 = transpose(%p5, axes=[0, 2, 3, 1]) /* ty=Tensor[(1, 1, 1, 84), float32] */
  %11 = nn.batch_flatten(%10) /* ty=Tensor[(1, 84), float32] */
  %12 = transpose(%p6, axes=[0, 2, 3, 1]) /* ty=Tensor[(1, 1, 1, 84), float32] */
  %13 = nn.batch_flatten(%12) /* ty=Tensor[(1, 84), float32] */
  %14 = (%1, %3, %5, %7, %9, %11, %13)
  %15 = concatenate(%14, axis=1) /* ty=Tensor[(1, 129024), float32] */
  %16 = reshape(%15, newshape=[0, -1, 21]) /* ty=Tensor[(1, 6144, 21), float32] */
  transpose(%16, axes=[0, 2, 1]) /* ty=Tensor[(1, 21, 6144), float32] */
}
/* meta data */
{
  "root": 1, 
  "nodes": [
    {
      "type_key": ""
    }, 
    {
      "type_key": "StrMap", 
      "keys": [
        "StrMap"
      ], 
      "data": [2]
    }, 
    {
      "type_key": "Array", 
      "data": [3]
    }, 
    {
      "type_key": "StrMap", 
      "keys": [
        "Primitive"
      ], 
      "data": [4]
    }, 
    {
      "type_key": "IntImm", 
      "attrs": {
        "dtype": "int32", 
        "value": "1"
      }
    }
  ], 
  "b64ndarrays": [], 
  "attrs": {"tvm_version": "0.6.dev"}
}

I think it is the same error like this: Relay.build target: rasp3b, something wrong you could workaround it according to my replay on that thread. @hlu1 is also trying to fix this issue. You could see the latest status on this pr:https://github.com/dmlc/tvm/pull/3061