yolov3_deepsort icon indicating copy to clipboard operation
yolov3_deepsort copied to clipboard

KeyError: "The name 'net/images:0' refers to a Tensor which does not exist. The operation, 'net/images', does not exist in the graph."

Open gasatig opened this issue 4 years ago • 27 comments

getting this error

gasatig avatar Jun 28 '20 09:06 gasatig

I get the same error.

AleBasso80 avatar Jul 01 '20 15:07 AleBasso80

i got the same error too

ikoc avatar Jul 10 '20 12:07 ikoc

i got the same error too

Abdktefane avatar Jul 11 '20 11:07 Abdktefane

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

namwoo-konkuk avatar Jul 13 '20 12:07 namwoo-konkuk

I was using python 3.8 but some of the libs are not suitable with that. I installed python 3.7 , install requirements-gpu.txt then everything worked without problem.

ikoc avatar Jul 13 '20 13:07 ikoc

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

this solved my error

gasatig avatar Jul 13 '20 13:07 gasatig

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

this solved my error too!

Kwonkyu avatar Aug 12 '20 04:08 Kwonkyu

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

This solve my error running object_tracking.py on a MacBook Pro

duyluandethuong avatar Aug 26 '20 07:08 duyluandethuong

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

worked for me. thank you

robisen1 avatar Aug 31 '20 20:08 robisen1

changing this "net/%s:0" to "%s:0" got solved.................. #yolov4

bharath5673 avatar Sep 19 '20 12:09 bharath5673

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

Worked like a charm

Shriram-Coder99 avatar Oct 16 '20 20:10 Shriram-Coder99

I tried it, but it doesn't work for me, by the way I'm using colab, what should I do?

cristiandapp avatar Jan 28 '21 03:01 cristiandapp

encoder = gdet.create_box_encoder(model_filename, batch_size=1)

KeyError: "The name 'net/images:0' refers to a Tensor which does not exist. The operation, 'net/images', does not exist in the graph."

I am having this error in the given line. I am doing this code in google colab.

I have also changed the code in line 84 & 86 with "%s:0". But showing same result again.

Bhaskar476 avatar Feb 21 '21 17:02 Bhaskar476

encoder = gdet.create_box_encoder(model_filename, batch_size=1)

KeyError: "The name 'net/images:0' refers to a Tensor which does not exist. The operation, 'net/images', does not exist in the graph."

I am having this error in the given line. I am doing this code in google colab.

I have also changed the code in line 84 & 86 with "%s:0". But showing same result again. Please help me to solve this error.

Bhaskar476 avatar Feb 28 '21 18:02 Bhaskar476

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

encoder = gdet.create_box_encoder(model_filename, batch_size=1)

KeyError: "The name 'net/images:0' refers to a Tensor which does not exist. The operation, 'net/images', does not exist in the graph."

I am having this error in the given line. I am doing this code in google colab.

I have also changed the code in line 84 & 86 with "%s:0". But showing same result again.

Bhaskar476 avatar Feb 28 '21 18:02 Bhaskar476

If you are running on google colab, try restarting your runtime after making the above changes. It worked for me

ektaarora3501 avatar May 26 '21 15:05 ektaarora3501

@namwoo-konkuk Your solution solves my problems, the output is able to run now. However, there is no detection or bounding box at my output video. I have manually printed out the boxs, scores and classes, but these parameters only return values on the first frame while other remaining frames just remains an empty list. Does anyone here encounter such issue? @theAIGuysCode Could this be the reason that I were only able to generate the 3 files when converting yolo to tensorflow: checkpoint, yolov3.tf.data-00000-of-00001, yolov3.tf.index.

Teezq avatar Jul 26 '21 14:07 Teezq

@namwoo-konkuk Your solution solves my problems, the output is able to run now. However, there is no detection or bounding box at my output video. I have manually printed out the boxs, scores and classes, but these parameters only return values on the first frame while other remaining frames just remains an empty list. Does anyone here encounter such issue? @theAIGuysCode Could this be the reason that I were only able to generate the 3 files when converting yolo to tensorflow: checkpoint, yolov3.tf.data-00000-of-00001, yolov3.tf.index.

Same problem for me. May I know how did you resolve?

BakingBrains avatar Aug 06 '21 16:08 BakingBrains

@BakingBrains I have resolved it by downgrading the python to 3.7 and install libraries that are older version

Teezq avatar Aug 07 '21 05:08 Teezq

change generate_detections.py file in this part with below code , also import .:

import tensorflow.compat.v1 as tf

class ImageEncoder(object):

    def __init__(self, checkpoint_filename, input_name="images",
                 output_name="features"):
        self.session = tf.Session()
        with tf.gfile.GFile(checkpoint_filename, "rb") as file_handle:
            graph_def = tf.GraphDef()
            graph_def.ParseFromString(file_handle.read())
        tf.import_graph_def(graph_def, name="net")
        self.input_var = tf.get_default_graph().get_tensor_by_name(
            "%s:0" % input_name)
        self.output_var = tf.get_default_graph().get_tensor_by_name(
            "%s:0" % output_name)

        assert len(self.output_var.get_shape()) == 2
        assert len(self.input_var.get_shape()) == 4
        self.feature_dim = self.output_var.get_shape().as_list()[-1]
        self.image_shape = self.input_var.get_shape().as_list()[1:]

    def __call__(self, data_x, batch_size=32):
        out = np.zeros((len(data_x), self.feature_dim), np.float32)
        _run_in_batches(
            lambda x: self.session.run(self.output_var, feed_dict=x),
            {self.input_var: data_x}, out, batch_size)
        return out 

senemaktas avatar Sep 01 '21 18:09 senemaktas

i got the same error too

import tensorflow.compat.v1 as tf tf.compat.v1.disable_v2_behavior() it can fix the problem

chenzhuotoday avatar Jan 06 '22 08:01 chenzhuotoday

@BakingBrains I have resolved it by downgrading the python to 3.7 and install libraries that are older version

i got the same error I couldn't solve the problem even with python3.7

Lucio8930 avatar Jan 25 '22 08:01 Lucio8930

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

This solved my problem. Thank you!

DaniloAlves1995 avatar Feb 16 '22 12:02 DaniloAlves1995

in my case, I was able to run with changing input&output node name.

Try to change "net/%s:0" => "%s:0" 83 & 85 lines in 'tools/generate_detections.py'

After I've done it I am having a new issue:

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\User\PycharmProjects\DeepSortV3_pip\deepsort_v3\tracker.py", line 101, in runTracker
    yolo = YoloV3()
  File "C:\Users\User\PycharmProjects\DeepSortV3_pip\deepsort_v3\yolov3_tf2\models.py", line 232, in YoloV3
    outputs = Lambda(lambda x: yolo_nms(x, anchors, masks, classes),
  File "C:\Users\User\PycharmProjects\DeepSortV3_pip\venv\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "C:\Users\User\PycharmProjects\DeepSortV3_pip\deepsort_v3\yolov3_tf2\models.py", line 232, in <lambda>
    outputs = Lambda(lambda x: yolo_nms(x, anchors, masks, classes),
  File "C:\Users\User\PycharmProjects\DeepSortV3_pip\deepsort_v3\yolov3_tf2\models.py", line 195, in yolo_nms
    max_output_size_per_class=FLAGS.yolo_max_boxes,
  File "C:\Users\User\PycharmProjects\DeepSortV3_pip\venv\lib\site-packages\absl\flags\_flagvalues.py", line 478, in __getattr__
    raise _exceptions.UnparsedFlagAccessError(
absl.flags._exceptions.UnparsedFlagAccessError: Exception encountered when calling layer "yolo_nms" (type Lambda).

Trying to access flag --yolo_max_boxes before flags were parsed.

Call arguments received by layer "yolo_nms" (type Lambda):
  • inputs=(('tf.Tensor(shape=(None, None, None, 3, 4), dtype=float32)', 'tf.Tensor(shape=(None, None, None, 3, 1), dtype=float32)', 'tf.Tensor(shape=(None, None, None, 3, 80), dtype=float32)'), ('tf.Tensor(shape=(None, None, None, 3, 4), dtype=float32)', 'tf.Tensor(shape=(None, None, None, 3, 1), dtype=float32)', 'tf.Tensor(shape=(None, None, None, 3, 80), dtype=float32)'), ('tf.Tensor(shape=(None, None, None, 3, 4), dtype=float32)', 'tf.Tensor(shape=(None, None, None, 3, 1), dtype=float32)', 'tf.Tensor(shape=(None, None, None, 3, 80), dtype=float32)'))
  • mask=None
  • training=None

Akfait avatar Jun 22 '22 05:06 Akfait

@BakingBrains I have resolved it by downgrading the python to 3.7 and install libraries that are older version

@Teezq Can you share the other library versions

Karthiktmv avatar Aug 18 '22 13:08 Karthiktmv

vim: expandtab:ts=4:sw=4

import os import errno import argparse import numpy as np import cv2 import tensorflow as tf

def _run_in_batches(f, data_dict, out, batch_size): data_len = len(out) num_batches = int(data_len / batch_size)

s, e = 0, 0
for i in range(num_batches):
    s, e = i * batch_size, (i + 1) * batch_size
    batch_data_dict = {k: v[s:e] for k, v in data_dict.items()}
    out[s:e] = f(batch_data_dict)
if e < len(out):
    batch_data_dict = {k: v[e:] for k, v in data_dict.items()}
    out[e:] = f(batch_data_dict)

def extract_image_patch(image, bbox, patch_shape): """Extract image patch from bounding box.

Parameters
----------
image : ndarray
    The full image.
bbox : array_like
    The bounding box in format (x, y, width, height).
patch_shape : Optional[array_like]
    This parameter can be used to enforce a desired patch shape
    (height, width). First, the `bbox` is adapted to the aspect ratio
    of the patch shape, then it is clipped at the image boundaries.
    If None, the shape is computed from :arg:`bbox`.

Returns
-------
ndarray | NoneType
    An image patch showing the :arg:`bbox`, optionally reshaped to
    :arg:`patch_shape`.
    Returns None if the bounding box is empty or fully outside of the image
    boundaries.

"""
bbox = np.array(bbox)
if patch_shape is not None:
    # correct aspect ratio to patch shape
    target_aspect = float(patch_shape[1]) / patch_shape[0]
    new_width = target_aspect * bbox[3]
    bbox[0] -= (new_width - bbox[2]) / 2
    bbox[2] = new_width

# convert to top left, bottom right
bbox[2:] += bbox[:2]
bbox = bbox.astype(np.int)

# clip at image boundaries
bbox[:2] = np.maximum(0, bbox[:2])
bbox[2:] = np.minimum(np.asarray(image.shape[:2][::-1]) - 1, bbox[2:])
if np.any(bbox[:2] >= bbox[2:]):
    return None
sx, sy, ex, ey = bbox
image = image[sy:ey, sx:ex]
image = cv2.resize(image, tuple(patch_shape[::-1]))
return image

class ImageEncoder(object):

def __init__(self, checkpoint_filename, input_name="images",
             output_name="features"):
    self.session = tf.compat.v1.Session()
    with tf.compat.v1.gfile.GFile(checkpoint_filename, "rb") as file_handle:
        graph_def = tf.compat.v1.GraphDef()
        graph_def.ParseFromString(file_handle.read())
    tf.compat.v1.import_graph_def(graph_def, name="net")
    self.input_var = tf.compat.v1.get_default_graph().get_tensor_by_name(
        "%s:0" % input_name)
    self.output_var = tf.compat.v1.get_default_graph().get_tensor_by_name(
        "%s:0" % output_name)

    assert len(self.output_var.get_shape()) == 2
    assert len(self.input_var.get_shape()) == 4
    self.feature_dim = self.output_var.get_shape().as_list()[-1]
    self.image_shape = self.input_var.get_shape().as_list()[1:]

def __call__(self, data_x, batch_size=32):
    out = np.zeros((len(data_x), self.feature_dim), np.float32)
    _run_in_batches(
        lambda x: self.session.run(self.output_var, feed_dict=x),
        {self.input_var: data_x}, out, batch_size)
    return out

def create_box_encoder(model_filename, input_name="images", output_name="features", batch_size=32): image_encoder = ImageEncoder(model_filename, input_name, output_name) image_shape = image_encoder.image_shape

def encoder(image, boxes):
    image_patches = []
    for box in boxes:
        patch = extract_image_patch(image, box, image_shape[:2])
        if patch is None:
            print("WARNING: Failed to extract image patch: %s." % str(box))
            patch = np.random.uniform(
                0., 255., image_shape).astype(np.uint8)
        image_patches.append(patch)
    image_patches = np.asarray(image_patches)
    return image_encoder(image_patches, batch_size)

return encoder

def generate_detections(encoder, mot_dir, output_dir, detection_dir=None): """Generate detections with features.

Parameters
----------
encoder : Callable[image, ndarray] -> ndarray
    The encoder function takes as input a BGR color image and a matrix of
    bounding boxes in format `(x, y, w, h)` and returns a matrix of
    corresponding feature vectors.
mot_dir : str
    Path to the MOTChallenge directory (can be either train or test).
output_dir
    Path to the output directory. Will be created if it does not exist.
detection_dir
    Path to custom detections. The directory structure should be the default
    MOTChallenge structure: `[sequence]/det/det.txt`. If None, uses the
    standard MOTChallenge detections.

"""
if detection_dir is None:
    detection_dir = mot_dir
try:
    os.makedirs(output_dir)
except OSError as exception:
    if exception.errno == errno.EEXIST and os.path.isdir(output_dir):
        pass
    else:
        raise ValueError(
            "Failed to created output directory '%s'" % output_dir)

for sequence in os.listdir(mot_dir):
    print("Processing %s" % sequence)
    sequence_dir = os.path.join(mot_dir, sequence)

    image_dir = os.path.join(sequence_dir, "img1")
    image_filenames = {
        int(os.path.splitext(f)[0]): os.path.join(image_dir, f)
        for f in os.listdir(image_dir)}

    detection_file = os.path.join(
        detection_dir, sequence, "det/det.txt")
    detections_in = np.loadtxt(detection_file, delimiter=',')
    detections_out = []

    frame_indices = detections_in[:, 0].astype(np.int)
    min_frame_idx = frame_indices.astype(np.int).min()
    max_frame_idx = frame_indices.astype(np.int).max()
    for frame_idx in range(min_frame_idx, max_frame_idx + 1):
        print("Frame %05d/%05d" % (frame_idx, max_frame_idx))
        mask = frame_indices == frame_idx
        rows = detections_in[mask]

        if frame_idx not in image_filenames:
            print("WARNING could not find image for frame %d" % frame_idx)
            continue
        bgr_image = cv2.imread(
            image_filenames[frame_idx], cv2.IMREAD_COLOR)
        features = encoder(bgr_image, rows[:, 2:6].copy())
        detections_out += [np.r_[(row, feature)] for row, feature
                           in zip(rows, features)]

    output_filename = os.path.join(output_dir, "%s.npy" % sequence)
    np.save(
        output_filename, np.asarray(detections_out), allow_pickle=False)

def parse_args(): """Parse command line arguments. """ parser = argparse.ArgumentParser(description="Re-ID feature extractor") parser.add_argument( "--model", default="resources/networks/mars-small128.pb", help="Path to freezed inference graph protobuf.") parser.add_argument( "--mot_dir", help="Path to MOTChallenge directory (train or test)", required=True) parser.add_argument( "--detection_dir", help="Path to custom detections. Defaults to " "standard MOT detections Directory structure should be the default " "MOTChallenge structure: [sequence]/det/det.txt", default=None) parser.add_argument( "--output_dir", help="Output directory. Will be created if it does not" " exist.", default="detections") return parser.parse_args()

def main(): args = parse_args() encoder = create_box_encoder(args.model, batch_size=32) generate_detections(encoder, args.mot_dir, args.output_dir, args.detection_dir)

if name == "main": main()

mukeshnaidu avatar May 21 '23 10:05 mukeshnaidu

Replace generate_detections.py with above code

mukeshnaidu avatar May 21 '23 10:05 mukeshnaidu