Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
vision
Commits
316cc25c
"vscode:/vscode.git/clone" did not exist on "e3ddbe25edeadaa5afc3f8f5bb0d645098a8b26a"
Unverified
Commit
316cc25c
authored
Feb 15, 2023
by
Philip Meier
Committed by
GitHub
Feb 15, 2023
Browse files
Ten crop annotation (#7254)
parent
f0b70002
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
79 additions
and
18 deletions
+79
-18
torchvision/prototype/transforms/_geometry.py
torchvision/prototype/transforms/_geometry.py
+12
-1
torchvision/prototype/transforms/functional/_geometry.py
torchvision/prototype/transforms/functional/_geometry.py
+63
-15
torchvision/transforms/functional.py
torchvision/transforms/functional.py
+3
-1
torchvision/transforms/transforms.py
torchvision/transforms/transforms.py
+1
-1
No files found.
torchvision/prototype/transforms/_geometry.py
View file @
316cc25c
...
@@ -234,7 +234,18 @@ class TenCrop(Transform):
...
@@ -234,7 +234,18 @@ class TenCrop(Transform):
def
_transform
(
def
_transform
(
self
,
inpt
:
Union
[
datapoints
.
ImageType
,
datapoints
.
VideoType
],
params
:
Dict
[
str
,
Any
]
self
,
inpt
:
Union
[
datapoints
.
ImageType
,
datapoints
.
VideoType
],
params
:
Dict
[
str
,
Any
]
)
->
Union
[
List
[
datapoints
.
ImageTypeJIT
],
List
[
datapoints
.
VideoTypeJIT
]]:
)
->
Tuple
[
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
]:
return
F
.
ten_crop
(
inpt
,
self
.
size
,
vertical_flip
=
self
.
vertical_flip
)
return
F
.
ten_crop
(
inpt
,
self
.
size
,
vertical_flip
=
self
.
vertical_flip
)
...
...
torchvision/prototype/transforms/functional/_geometry.py
View file @
316cc25c
...
@@ -1964,8 +1964,6 @@ def five_crop(
...
@@ -1964,8 +1964,6 @@ def five_crop(
if
not
torch
.
jit
.
is_scripting
():
if
not
torch
.
jit
.
is_scripting
():
_log_api_usage_once
(
five_crop
)
_log_api_usage_once
(
five_crop
)
# TODO: consider breaking BC here to return List[datapoints.ImageTypeJIT/VideoTypeJIT] to align this op with
# `ten_crop`
if
torch
.
jit
.
is_scripting
()
or
is_simple_tensor
(
inpt
):
if
torch
.
jit
.
is_scripting
()
or
is_simple_tensor
(
inpt
):
return
five_crop_image_tensor
(
inpt
,
size
)
return
five_crop_image_tensor
(
inpt
,
size
)
elif
isinstance
(
inpt
,
datapoints
.
Image
):
elif
isinstance
(
inpt
,
datapoints
.
Image
):
...
@@ -1983,40 +1981,90 @@ def five_crop(
...
@@ -1983,40 +1981,90 @@ def five_crop(
)
)
def
ten_crop_image_tensor
(
image
:
torch
.
Tensor
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
List
[
torch
.
Tensor
]:
def
ten_crop_image_tensor
(
tl
,
tr
,
bl
,
br
,
center
=
five_crop_image_tensor
(
image
,
size
)
image
:
torch
.
Tensor
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
Tuple
[
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
]:
non_flipped
=
five_crop_image_tensor
(
image
,
size
)
if
vertical_flip
:
if
vertical_flip
:
image
=
vertical_flip_image_tensor
(
image
)
image
=
vertical_flip_image_tensor
(
image
)
else
:
else
:
image
=
horizontal_flip_image_tensor
(
image
)
image
=
horizontal_flip_image_tensor
(
image
)
tl_
flip
,
tr_flip
,
bl_flip
,
br_flip
,
center_flip
=
five_crop_image_tensor
(
image
,
size
)
flip
ped
=
five_crop_image_tensor
(
image
,
size
)
return
[
tl
,
tr
,
bl
,
br
,
center
,
tl_flip
,
tr_flip
,
bl_flip
,
br_flip
,
center_flip
]
return
non_flipped
+
flipped
@
torch
.
jit
.
unused
@
torch
.
jit
.
unused
def
ten_crop_image_pil
(
image
:
PIL
.
Image
.
Image
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
List
[
PIL
.
Image
.
Image
]:
def
ten_crop_image_pil
(
tl
,
tr
,
bl
,
br
,
center
=
five_crop_image_pil
(
image
,
size
)
image
:
PIL
.
Image
.
Image
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
Tuple
[
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
PIL
.
Image
.
Image
,
]:
non_flipped
=
five_crop_image_pil
(
image
,
size
)
if
vertical_flip
:
if
vertical_flip
:
image
=
vertical_flip_image_pil
(
image
)
image
=
vertical_flip_image_pil
(
image
)
else
:
else
:
image
=
horizontal_flip_image_pil
(
image
)
image
=
horizontal_flip_image_pil
(
image
)
tl_flip
,
tr_flip
,
bl_flip
,
br_flip
,
center_flip
=
five_crop_image_pil
(
image
,
size
)
flipped
=
five_crop_image_pil
(
image
,
size
)
return
[
tl
,
tr
,
bl
,
br
,
center
,
tl_flip
,
tr_flip
,
bl_flip
,
br_flip
,
center_flip
]
return
non_flipped
+
flipped
def
ten_crop_video
(
video
:
torch
.
Tensor
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
List
[
torch
.
Tensor
]:
def
ten_crop_video
(
video
:
torch
.
Tensor
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
Tuple
[
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
torch
.
Tensor
,
]:
return
ten_crop_image_tensor
(
video
,
size
,
vertical_flip
=
vertical_flip
)
return
ten_crop_image_tensor
(
video
,
size
,
vertical_flip
=
vertical_flip
)
def
ten_crop
(
def
ten_crop
(
inpt
:
Union
[
datapoints
.
ImageTypeJIT
,
datapoints
.
VideoTypeJIT
],
size
:
List
[
int
],
vertical_flip
:
bool
=
False
inpt
:
Union
[
datapoints
.
ImageTypeJIT
,
datapoints
.
VideoTypeJIT
],
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
Union
[
List
[
datapoints
.
ImageTypeJIT
],
List
[
datapoints
.
VideoTypeJIT
]]:
)
->
Tuple
[
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
ImageOrVideoTypeJIT
,
]:
if
not
torch
.
jit
.
is_scripting
():
if
not
torch
.
jit
.
is_scripting
():
_log_api_usage_once
(
ten_crop
)
_log_api_usage_once
(
ten_crop
)
...
...
torchvision/transforms/functional.py
View file @
316cc25c
...
@@ -827,7 +827,9 @@ def five_crop(img: Tensor, size: List[int]) -> Tuple[Tensor, Tensor, Tensor, Ten
...
@@ -827,7 +827,9 @@ def five_crop(img: Tensor, size: List[int]) -> Tuple[Tensor, Tensor, Tensor, Ten
return
tl
,
tr
,
bl
,
br
,
center
return
tl
,
tr
,
bl
,
br
,
center
def
ten_crop
(
img
:
Tensor
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
List
[
Tensor
]:
def
ten_crop
(
img
:
Tensor
,
size
:
List
[
int
],
vertical_flip
:
bool
=
False
)
->
Tuple
[
Tensor
,
Tensor
,
Tensor
,
Tensor
,
Tensor
,
Tensor
,
Tensor
,
Tensor
,
Tensor
,
Tensor
]:
"""Generate ten cropped images from the given image.
"""Generate ten cropped images from the given image.
Crop the given image into four corners and the central crop plus the
Crop the given image into four corners and the central crop plus the
flipped version of these (horizontal flipping is used by default).
flipped version of these (horizontal flipping is used by default).
...
...
torchvision/transforms/transforms.py
View file @
316cc25c
...
@@ -1049,7 +1049,7 @@ class TenCrop(torch.nn.Module):
...
@@ -1049,7 +1049,7 @@ class TenCrop(torch.nn.Module):
Example:
Example:
>>> transform = Compose([
>>> transform = Compose([
>>> TenCrop(size), # this is a
list
of PIL Images
>>> TenCrop(size), # this is a
tuple
of PIL Images
>>> Lambda(lambda crops: torch.stack([PILToTensor()(crop) for crop in crops])) # returns a 4D tensor
>>> Lambda(lambda crops: torch.stack([PILToTensor()(crop) for crop in crops])) # returns a 4D tensor
>>> ])
>>> ])
>>> #In your test loop you can do the following:
>>> #In your test loop you can do the following:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment