Repository: pytorch/vision

Issue:
Move new model builders from Prototype to main TorchVision 
### 🚀 The feature

Once all model builders are updated to support multiple pretrained weights, we should replace the old builders with the new ones. This involves the following steps:
1. Review the naming conventions for final time based on #5088. Also decide on the naming convention of [_presets.py](https://github.com/pytorch/vision/blob/main/torchvision/prototype/transforms/_presets.py) (`ImageNetEval` or `ClassificationEval`?)
2. Port to `torchvision.models` the inplace code changes of `torchvision.prototype.models`. Porting depends on having agreement on the deprecation of positional arguments across the entire TorchVision. If such agreement doesn't exist at the time of porting, we will need to remove the mandatory keyword arguments from the API prior landing it to the main area.
3. Delete `torchvision.prototype.models` and their prototype tests.
4. Update the existing model tests (`pretrained` => `weights`) and ensure all work without modifying the expected files.
5. Update the reference scripts to work with the new API.
6. Update the documentation of the new model builder methods.
7. Update the tutorials and gallery with how to use the pretrained models and do preprocessing.


cc @datumbox @pmeier @bjuncek


Discussion:

Resolving patch:
diff --git a/torchvision/_utils.py b/torchvision/_utils.py
--- a/torchvision/_utils.py
+++ b/torchvision/_utils.py
@@ -1,5 +1,5 @@
 import enum
-from typing import TypeVar, Type
+from typing import Sequence, TypeVar, Type
 
 T = TypeVar("T", bound=enum.Enum)
 
@@ -18,3 +18,15 @@ def from_str(self: Type[T], member: str) -> T:  # type: ignore[misc]
 
 class StrEnum(enum.Enum, metaclass=StrEnumMeta):
     pass
+
+
+def sequence_to_str(seq: Sequence, separate_last: str = "") -> str:
+    if not seq:
+        return ""
+    if len(seq) == 1:
+        return f"'{seq[0]}'"
+
+    head = "'" + "', '".join([str(item) for item in seq[:-1]]) + "'"
+    tail = f"{'' if separate_last and len(seq) == 2 else ','} {separate_last}'{seq[-1]}'"
+
+    return head + tail
diff --git a/torchvision/prototype/datasets/utils/_dataset.py b/torchvision/prototype/datasets/utils/_dataset.py
--- a/torchvision/prototype/datasets/utils/_dataset.py
+++ b/torchvision/prototype/datasets/utils/_dataset.py
@@ -7,7 +7,8 @@
 from typing import Any, Dict, List, Optional, Sequence, Union, Tuple, Collection
 
 from torch.utils.data import IterDataPipe
-from torchvision.prototype.utils._internal import FrozenBunch, make_repr, add_suggestion, sequence_to_str
+from torchvision._utils import sequence_to_str
+from torchvision.prototype.utils._internal import FrozenBunch, make_repr, add_suggestion
 
 from .._home import use_sharded_dataset
 from ._internal import BUILTIN_DIR, _make_sharded_datapipe
diff --git a/torchvision/prototype/utils/_internal.py b/torchvision/prototype/utils/_internal.py
--- a/torchvision/prototype/utils/_internal.py
+++ b/torchvision/prototype/utils/_internal.py
@@ -28,9 +28,10 @@
 
 import numpy as np
 import torch
+from torchvision._utils import sequence_to_str
+
 
 __all__ = [
-    "sequence_to_str",
     "add_suggestion",
     "FrozenMapping",
     "make_repr",
@@ -43,18 +44,6 @@
 ]
 
 
-def sequence_to_str(seq: Sequence, separate_last: str = "") -> str:
-    if not seq:
-        return ""
-    if len(seq) == 1:
-        return f"'{seq[0]}'"
-
-    head = "'" + "', '".join([str(item) for item in seq[:-1]]) + "'"
-    tail = f"{'' if separate_last and len(seq) == 2 else ','} {separate_last}'{seq[-1]}'"
-
-    return head + tail
-
-
 def add_suggestion(
     msg: str,
     *,


Test patch:
diff --git a/test/builtin_dataset_mocks.py b/test/builtin_dataset_mocks.py
--- a/test/builtin_dataset_mocks.py
+++ b/test/builtin_dataset_mocks.py
@@ -19,8 +19,8 @@
 from datasets_utils import make_zip, make_tar, create_image_folder, create_image_file
 from torch.nn.functional import one_hot
 from torch.testing import make_tensor as _make_tensor
+from torchvision._utils import sequence_to_str
 from torchvision.prototype.datasets._api import find
-from torchvision.prototype.utils._internal import sequence_to_str
 
 make_tensor = functools.partial(_make_tensor, device="cpu")
 make_scalar = functools.partial(make_tensor, ())
diff --git a/test/test_prototype_utils.py b/test/test_internal_utils.py
similarity index 88%
rename from test/test_prototype_utils.py
rename to test/test_internal_utils.py
--- a/test/test_prototype_utils.py
+++ b/test/test_internal_utils.py
@@ -1,5 +1,5 @@
 import pytest
-from torchvision.prototype.utils._internal import sequence_to_str
+from torchvision._utils import sequence_to_str
 
 
 @pytest.mark.parametrize(
diff --git a/test/test_prototype_builtin_datasets.py b/test/test_prototype_builtin_datasets.py
--- a/test/test_prototype_builtin_datasets.py
+++ b/test/test_prototype_builtin_datasets.py
@@ -10,8 +10,8 @@
 from torch.utils.data.datapipes.iter.grouping import ShardingFilterIterDataPipe as ShardingFilter
 from torch.utils.data.graph import traverse
 from torchdata.datapipes.iter import IterDataPipe, Shuffler
+from torchvision._utils import sequence_to_str
 from torchvision.prototype import transforms, datasets
-from torchvision.prototype.utils._internal import sequence_to_str
 
 
 assert_samples_equal = functools.partial(