def generate_conv2d_scope_info(self):
        # mostly, conv2d is a sub block in graph, get the scope name
        for node in self.nodes:
            if node.op == 'Conv2D':
                scope = TFConverter.get_scope_name(node.name)
                # for the case tf.nn.conv2d is called directly
                if scope == '':
                    continue
                # for the case tf.nn.conv2d is called within a scope
                if scope + '/kernel' not in self.name_node_dict:
                    continue
                self.conv2d_scope_names.add(scope)

        # get the input name to the conv2d sub block
        for node in self.nodes:
            scope = TFConverter.get_scope_name(node.name)
            if scope in self.conv2d_scope_names:
                if node.op == 'Conv2D' or node.op == 'Shape':
                    for inp in node.input:
                        if TFConverter.get_scope_name(inp) != scope:
                            self.conv2d_scopename_inputname_dict[scope] = inp