Repository: pytorch/benchmark
Issue: AttributeError: 'tuple' object has no attribute 'shape'
Root cause: Validation Gap

Command: `python run.py yolov3 -d cpu  -t train --bs 1`
Error: 
```python
Running train method from yolov3 on cpu in eager mode.
Traceback (most recent call last):
  File "run.py", line 230, in <module>
    m = Model(device=args.device, test=args.test, jit=(args.mode == args.mode), batch_size=args.bs, extra_args=extra_args)
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/model.py", line 14, in __call__
    obj.__post__init__()
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/model.py", line 103, in __post__init__
    apply_opt_args(self, self.opt_args)
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/extra_args.py", line 133, in apply_opt_args
    model.set_module(enable_jit(model=module, example_inputs=exmaple_inputs, test=model.test))
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/backends/jit.py", line 8, in enable_jit
    model = torch.jit.script(model, example_inputs=[example_inputs, ])
  File "/opt/conda/lib/python3.8/site-packages/torch/jit/_script.py", line 1275, in script
    obj(*examples)
  File "/opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1186, in _call_impl
    return forward_call(*input, **kwargs)
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/models/yolov3/yolo_models.py", line 240, in forward
    img_size = x.shape[-2:]  # height, width
AttributeError: 'tuple' object has no attribute 'shape'
```
and than, I print the `x`:
```python
(tensor([[[[ 70,  59,  66,  ...,  95,  95,  95],
          [ 62,  55,  57,  ...,  95,  95,  95],
          [ 77,  56,  71,  ...,  95,  95,  95],
          ...,
          [212, 213, 207,  ...,  89,  79,  85],
          [210, 210, 206,  ...,  82,  77,  79],
          [211, 210, 212,  ...,  95,  95,  94]],

         [[ 73,  63,  70,  ...,  95,  95,  95],
          [ 64,  57,  62,  ...,  95,  95,  95],
          [ 77,  60,  75,  ...,  95,  95,  95],
          ...,
          [210, 212, 198,  ...,  88,  78,  86],
          [211, 211, 204,  ...,  81,  78,  80],
          [210, 209, 211,  ...,  93,  94,  92]],

         [[ 77,  65,  73,  ...,  95,  95,  95],
          [ 68,  63,  66,  ...,  95,  95,  95],
          [ 78,  61,  78,  ...,  95,  95,  95],
          ...,
          [203, 201, 182,  ...,  86,  76,  83],
          [208, 206, 196,  ...,  80,  75,  77],
          [203, 205, 209,  ...,  91,  90,  88]]]], dtype=torch.uint8), tensor([[0.00000e+00, 1.60000e+01, 4.76596e-01, 3.57515e-01, 3.57970e-02, 2.86920e-02],
        [0.00000e+00, 0.00000e+00, 4.33369e-01, 3.31210e-01, 3.31870e-02, 5.10650e-02],
        [0.00000e+00, 0.00000e+00, 5.45033e-01, 3.18690e-01, 2.84220e-02, 3.56037e-02],
        [0.00000e+00, 1.30000e+01, 2.30744e-01, 3.08712e-01, 5.38440e-02, 3.70543e-02],
        [0.00000e+00, 1.30000e+01, 3.47440e-01, 3.39916e-01, 6.29530e-02, 3.61806e-02],
        [0.00000e+00, 0.00000e+00, 5.66721e-01, 3.14540e-01, 1.43590e-02, 1.76298e-02],
        [0.00000e+00, 2.00000e+01, 9.61122e-01, 4.03924e-01, 7.77564e-02, 7.39392e-02],
        [0.00000e+00, 2.00000e+01, 8.71885e-01, 4.12452e-01, 9.30309e-02, 5.39799e-02],
        [0.00000e+00, 2.00000e+01, 7.82502e-01, 4.17735e-01, 5.44530e-02, 4.07930e-02],
        [0.00000e+00, 2.00000e+01, 6.61096e-01, 4.12101e-01, 8.62030e-02, 5.21853e-02],
        [0.00000e+00, 1.50000e+01, 8.74655e-02, 7.96599e-01, 1.74931e-01, 4.06803e-01],
        [0.00000e+00, 0.00000e+00, 8.45760e-01, 8.54039e-01, 7.06250e-02, 2.38797e-01],
        [0.00000e+00, 3.80000e+01, 8.65151e-01, 7.29906e-01, 5.95310e-02, 2.56559e-02],
        [0.00000e+00, 3.20000e+01, 8.14604e-01, 6.79664e-01, 1.02190e-02, 1.12343e-02]]), ['/workspace/pytorch_benchmark/benchmark/torchbenchmark/models/yolov3/../../data/.data/coco128/images/train2017/000000000109.jpg'], [None])
```
need to change`img_size = x.shape[-2:]` to `img_size = x[0].shape[-2:]`. 
And another error came up:
```python
Traceback (most recent call last):
  File "run.py", line 230, in <module>
    m = Model(device=args.device, test=args.test, jit=(args.mode == args.mode), batch_size=args.bs, extra_args=extra_args)
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/model.py", line 14, in __call__
    obj.__post__init__()
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/model.py", line 103, in __post__init__
    apply_opt_args(self, self.opt_args)
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/extra_args.py", line 133, in apply_opt_args
    model.set_module(enable_jit(model=module, example_inputs=exmaple_inputs, test=model.test))
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/backends/jit.py", line 8, in enable_jit
    model = torch.jit.script(model, example_inputs=[example_inputs, ])
  File "/opt/conda/lib/python3.8/site-packages/torch/jit/_script.py", line 1275, in script
    obj(*examples)
  File "/opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1186, in _call_impl
    return forward_call(*input, **kwargs)
  File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/models/yolov3/yolo_models.py", line 244, in forward
    torch_utils.scale_img(x.flip(3), s[0], same_shape=False),  # flip-lr and scale
AttributeError: 'tuple' object has no attribute 'flip'
```
Is there some bug about the data structure here?

Sorry but I can't reproduce your result:
```
$ python run.py yolov3 -d cpu -t train --bs 1
Running train method from yolov3 on cpu in eager mode with input batch size 1.
CPU Total Wall Time: 1059.863 milliseconds
```

Looks like the difference is you are trying to torchscript the model (File "/workspace/pytorch_benchmark/benchmark/torchbenchmark/util/backends/jit.py", line 8, in enable_jit), while yolov3 is known to not supporting torchscript.

Taking a closer look, the line 230 of run.py is empty (https://github.com/pytorch/benchmark/blob/main/run.py#L230), not `m = Model(device=args.device, test=args.test, jit=(args.mode == args.mode), batch_size=args.bs, extra_args=extra_args)`, which always sets `jit=True`. Are you working on the latest main branch?

Closed as can't reproduce.