티스토리 뷰
https://github.com/ultralytics/yolov5/pull/3462
YOLOv5에서 쓰이는 augmentation 중에 영상의 컬러와 명도를 조정함으로써 데이터를 증강시키는 기법이 있다.
이를 수행하는 함수가 augment_hsv 함수이다.
def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5):
r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1 # random gains
hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
dtype = img.dtype # uint8
x = np.arange(0, 256, dtype=np.int16)
lut_hue = ((x * r[0]) % 180).astype(dtype)
lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))).astype(dtype)
cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed
위 코드는 수정하기 전 코드
일단 봤을때
x = np.arange(0, 256, dtype=np.int16)
요녀석 문제다.
왜?
r 이 float 자료형인데 lut_hue, lut_sat, lut_val 생성과정에 x와 r이 쓰인다.
그럼 x는 r과 연산되는 과정에 float 자료형으로 변환된다. 애초에 x를 float형으로 만들면 이 과정을 스킵할 수 있다.
그다음 문제!
img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))).astype(dtype)
cv2.merge(...).astype(dtype) 으로 되어 있는데 이미 cv2.merge(...)의 결과로 나오는 어레이의 자료형은 dtype과 같다.
그렇다면 굳이 저 형변환 함수를 호출할 이유가 없다.
위 문제들을 수정하여 코드를 구현하면 아래와 같다.
def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5):
r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1 # random gains
hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
dtype = img.dtype # uint8
x = np.arange(0, 256, dtype=r.dtype)
lut_hue = ((x * r[0]) % 180).astype(dtype)
lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val)))
cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed
결과로는
1.06배 정도 빨라진다.
속도 증가폭이 크다고는 말할 수 없다... 이런 미미한 개선이 모이고 모이다보면 의미있는 변화를 만들어갈거라 생각한다!
'Contribution 일지' 카테고리의 다른 글
20220525 timm 기여 (0) | 2022.05.25 |
---|---|
YOLOv5 Simpler code for DWConvClass (0) | 2021.08.06 |
YOLOv5: rename class autoShape -> AutoShape (0) | 2021.05.22 |
YOLOv5: image weights compatible faster random index generator v2 for mosaic … (0) | 2021.03.07 |
2021-03-06 YOLOv5: faster random index generator for mosaic augmentation #2345 (0) | 2021.03.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C++ Deploy
- 백트래킹
- 조합
- 위상 정렬 알고리즘
- FairMOT
- 이분탐색
- 백준 11437
- 백준 11053
- LCA
- 문제집
- 백준 1766
- 순열
- ㅂ
- PyCharm
- Lowest Common Ancestor
- MOT
- cosine
- 단축키
- 파이참
- 가장 긴 증가하는 부분 수열
- 자료구조
- 백준
- 인공지능을 위한 선형대수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함