Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Copy-Paste augmentation #12599

Open
wants to merge 79 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
74406d2
copy-paste augmentation fix
Arno1235 Jan 8, 2024
03b47e1
Added comments
Arno1235 Jan 8, 2024
de06dd6
Auto-format by Ultralytics actions
UltralyticsAssistant Jan 8, 2024
5df11fc
Merge branch 'master' into master
Arno1235 Jan 9, 2024
b5a0c67
Merge branch 'master' into master
Arno1235 Jan 12, 2024
e93e1ab
change translation augmentation to array shift
Arno1235 Jan 12, 2024
3f9350e
Auto-format by Ultralytics actions
UltralyticsAssistant Jan 12, 2024
43f41c9
Merge branch 'master' into master
glenn-jocher Jan 17, 2024
7f6070a
Merge branch 'master' into master
glenn-jocher Jan 17, 2024
eb693c1
Merge branch 'master' into master
Arno1235 Jan 25, 2024
ddb8322
Comment shift_array function
Arno1235 Jan 25, 2024
a553b48
Merge branch 'master' into master
Arno1235 Jan 29, 2024
8a7ece9
Merge branch 'master' into master
Arno1235 Jan 29, 2024
42eefa4
Merge branch 'master' into master
Arno1235 Feb 7, 2024
ec9be94
Merge branch 'master' into master
Arno1235 Feb 13, 2024
316ef9e
Merge branch 'master' into master
Arno1235 Feb 26, 2024
f8d48ea
Merge branch 'master' into master
Arno1235 Feb 27, 2024
e282b6b
Merge branch 'master' into master
Arno1235 Mar 1, 2024
a01dc0e
Auto-format by https://ultralytics.com/actions
UltralyticsAssistant Mar 1, 2024
3be76eb
Merge branch 'master' into master
Arno1235 Mar 5, 2024
720400d
Merge branch 'master' into master
Arno1235 Mar 21, 2024
258091e
Merge branch 'master' into master
Arno1235 Apr 2, 2024
4ea9e4c
Merge branch 'master' into master
Arno1235 Apr 8, 2024
71d283e
Merge branch 'master' into master
glenn-jocher Apr 9, 2024
468d116
Merge branch 'master' into master
UltralyticsAssistant Apr 14, 2024
df39897
Merge branch 'master' into master
UltralyticsAssistant Apr 18, 2024
49dd077
Merge branch 'master' into master
UltralyticsAssistant Apr 27, 2024
57207c7
Merge branch 'master' into master
UltralyticsAssistant Apr 28, 2024
7fe1546
Merge branch 'master' into master
UltralyticsAssistant May 5, 2024
6557fe3
Merge branch 'master' into master
UltralyticsAssistant May 12, 2024
04c9afb
Merge branch 'master' into master
UltralyticsAssistant May 12, 2024
a83e308
Merge branch 'master' into master
UltralyticsAssistant May 12, 2024
4ef3c24
Merge branch 'master' into master
UltralyticsAssistant May 12, 2024
edc52ed
Merge branch 'master' into master
UltralyticsAssistant May 13, 2024
b40d778
Merge branch 'master' into master
UltralyticsAssistant May 18, 2024
7cd17c7
Merge branch 'master' into master
UltralyticsAssistant May 24, 2024
928c1aa
Merge branch 'master' into master
UltralyticsAssistant May 28, 2024
ff29cda
Merge branch 'master' into master
UltralyticsAssistant May 29, 2024
9dcaff6
Merge branch 'master' into master
UltralyticsAssistant May 29, 2024
4333292
Merge branch 'master' into master
UltralyticsAssistant May 30, 2024
e5e11a4
Merge branch 'master' into master
UltralyticsAssistant Jun 8, 2024
1f07474
Merge branch 'master' into master
UltralyticsAssistant Jun 8, 2024
4143012
Merge branch 'master' into master
UltralyticsAssistant Jun 9, 2024
17c4e26
Merge branch 'master' into master
UltralyticsAssistant Jun 16, 2024
9cc73d3
Merge branch 'master' into master
UltralyticsAssistant Jun 16, 2024
ad315e2
Merge branch 'master' into master
UltralyticsAssistant Jun 17, 2024
65a5a47
Merge branch 'master' into master
UltralyticsAssistant Jun 19, 2024
f7874ab
Merge branch 'master' into master
UltralyticsAssistant Jun 19, 2024
0260e30
Merge branch 'master' into master
UltralyticsAssistant Jun 20, 2024
56917f2
Merge branch 'master' into master
UltralyticsAssistant Jun 20, 2024
7843f4d
Merge branch 'master' into master
UltralyticsAssistant Jun 20, 2024
6738f62
Merge branch 'master' into master
UltralyticsAssistant Jun 20, 2024
f8eb7ce
Merge branch 'master' into master
UltralyticsAssistant Jun 22, 2024
b743d9d
Merge branch 'master' into master
UltralyticsAssistant Jun 30, 2024
7582660
Merge branch 'master' into master
UltralyticsAssistant Jun 30, 2024
ed08a73
Merge branch 'master' into master
UltralyticsAssistant Jun 30, 2024
92a0908
Merge branch 'master' into master
UltralyticsAssistant Jul 5, 2024
252b280
Merge branch 'master' into master
UltralyticsAssistant Jul 8, 2024
6a0d0b3
Merge branch 'master' into master
UltralyticsAssistant Jul 8, 2024
72f103c
Merge branch 'master' into master
UltralyticsAssistant Jul 8, 2024
d92d25c
Merge branch 'master' into master
UltralyticsAssistant Jul 10, 2024
0efb738
Merge branch 'master' into master
UltralyticsAssistant Jul 13, 2024
27a73ac
Merge branch 'master' into master
UltralyticsAssistant Jul 15, 2024
6f71670
Merge branch 'master' into master
UltralyticsAssistant Jul 15, 2024
7d12833
Merge branch 'master' into master
UltralyticsAssistant Jul 17, 2024
d4d0a6c
Merge branch 'master' into master
UltralyticsAssistant Jul 17, 2024
530fe3a
Merge branch 'master' into master
UltralyticsAssistant Jul 22, 2024
428c3be
Merge branch 'master' into master
UltralyticsAssistant Jul 23, 2024
e1330d1
Merge branch 'master' into master
UltralyticsAssistant Jul 25, 2024
8dbd779
Merge branch 'master' into master
UltralyticsAssistant Jul 29, 2024
f811b6a
Merge branch 'master' into master
UltralyticsAssistant Jul 29, 2024
83cd153
Merge branch 'master' into master
UltralyticsAssistant Aug 11, 2024
ab012d7
Merge branch 'master' into master
UltralyticsAssistant Aug 14, 2024
bb63ed6
Merge branch 'master' into master
UltralyticsAssistant Aug 14, 2024
d06871a
Merge branch 'master' into master
UltralyticsAssistant Aug 19, 2024
fd79aca
Merge branch 'master' into master
UltralyticsAssistant Aug 20, 2024
fd3afc5
Merge branch 'master' into master
UltralyticsAssistant Aug 20, 2024
4089f88
Merge branch 'master' into master
UltralyticsAssistant Aug 24, 2024
8cd17ba
Auto-format by https://ultralytics.com/actions
UltralyticsAssistant Aug 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
change translation augmentation to array shift
  • Loading branch information
Arno1235 committed Jan 12, 2024
commit e93e1ab251bf378725fa67b66f613b8418a7c660
70 changes: 52 additions & 18 deletions utils/augmentations.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,35 +231,69 @@ def random_perspective(
return im, targets


def shift_array(arr, shift_x, shift_y, fill_value=0):
result = np.empty_like(arr)

if shift_y > 0:
result[:shift_y, :] = fill_value
if shift_x > 0:
result[:, :shift_x] = fill_value
result[shift_y:, shift_x:] = arr[:-shift_y, :-shift_x]
elif shift_x < 0:
result[:, shift_x:] = fill_value
result[shift_y:, :shift_x] = arr[:-shift_y, -shift_x:]
else:
result[shift_y:, :] = arr[:-shift_y, :]
elif shift_y < 0:
result[shift_y:, :] = fill_value
if shift_x > 0:
result[:, :shift_x] = fill_value
result[:shift_y, shift_x:] = arr[-shift_y:, :-shift_x]
elif shift_x < 0:
result[:, shift_x:] = fill_value
result[:shift_y, :shift_x] = arr[-shift_y:, -shift_x:]
else:
result[:shift_y, :] = arr[-shift_y:, :]
else:
if shift_x > 0:
result[:, :shift_x] = fill_value
result[:, shift_x:] = arr[:, :-shift_x]
elif shift_x < 0:
result[:, shift_x:] = fill_value
result[:, :shift_x] = arr[:, -shift_x:]
else:
result[:, :] = arr[:, :]

return result


def copy_paste(im, labels, segments, p=0.5):
# Implement Copy-Paste augmentation https://arxiv.org/abs/2012.07177, labels as nx5 np.array(cls, xyxy)
n = len(segments)
if p and n:
im_copy = im.copy()
h, w, c = im.shape # height, width, channels

# One random translation for computational efficiency
translate_x, translate_y = random.randint(-w, w), random.randint(-h, h)

im_new = np.zeros(im.shape, np.uint8)
for j in random.sample(range(n), k=round(p * n)):
im_new = np.zeros(im.shape, np.uint8)
l, s = labels[j], segments[j]
w_box = l[3] - l[1]
h_box = l[4] - l[2]
x1 = random.randint(0, int(w - w_box))
y1 = random.randint(0, int(h - h_box))
box = x1, y1, x1 + w_box, y1 + h_box

if l[3] + translate_x > w or l[1] + translate_x < 0 or l[4] + translate_y > h or l[2] + translate_y < 0:
# box moved outside of the frame
continue

box = l[1] + translate_x, l[2] + translate_y, l[3] + translate_x, l[4] + translate_y
ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area
if (ioa < 0.30).all(): # allow 30% obscuration of existing labels
move_x = x1 - l[1]
move_y = y1 - l[2]
labels = np.concatenate((labels, [[l[0], *box]]), 0)
segments.append(np.concatenate((s[:, 0:1] + move_x, s[:, 1:2] + move_y), 1))
segments.append(np.concatenate((s[:, 0:1] + translate_x, s[:, 1:2] + translate_y), 1))
cv2.drawContours(im_new, [segments[j].astype(np.int32)], -1, (1, 1, 1), cv2.FILLED) # mask

result = cv2.warpAffine(
im_copy, np.float32([[1, 0, move_x], [0, 1, move_y]]), (w, h)
) # image translated
i = cv2.warpAffine(im_new, np.float32([[1, 0, move_x], [0, 1, move_y]]), (w, h)).astype(
bool
) # mask translated
im[i] = result[i]

result = shift_array(im, translate_x, translate_y) # image translated
i = shift_array(im_new, translate_x, translate_y).astype(bool) # mask translated
im[i] = result[i]

# cv2.imwrite('debug.jpg', im) # debug

Expand Down
Loading