Precision(B) | Recall(B) | mAP50(B) | mAP50-95 | |
---|---|---|---|---|
All | 0.823651 | 0.641346 | 0.712915 | 0.52616 |
Braille-block-defect | 0.939846 | 0.885776 | 0.93582 | 0.742313 |
Sidewalk-block-defect | 0.722402 | 0.452266 | 0.528052 | 0.345472 |
Bicycle-road-defect | 0.808706 | 0.585995 | 0.674872 | 0.490695 |
각각 0.25 확률로 다음 네 변환 중 하나를 이미지에 대해 수행하도록 작성.
원본 유지
반시계90도 회전,
160X160 랜덤 크롭 후 360X640 리사이즈 (이미지 사이즈 통일),
플립
transform = A.Compose([
A.OneOf([ # 변환 중 하나를 확률적으로 선택. 여기서는 각각 1.0 * 1/4(변환X, 회전, 플립, 크롭) 확률로 수행됨.
A.NoOp(p=1), # 원본 그대로 유지 (변환x)
A.SafeRotate(limit=(90, 90), # Range from which a random angle is picked.
border_mode=cv2.BORDER_REPLICATE,
p=1.0),
# Flip
A.HorizontalFlip(p=1.0),
# Random Crop
A.Compose([
A.RandomCrop(width=160, height=160, p=1.0),
A.Resize(640, 360), # height, width
], p=1.0)
], p=1.0)
],bbox_params=A.BboxParams('yolo'))
# 증강 이전 (baseline set)
# 0행 : 정상, 1행 : 불량
# 열번호 : class
파일 분포
[[ 182. 1083. 915.]
[1119. 2870. 2308.]]
오브젝트 분포
[[ 182. 1083. 915.]
[2698. 7672. 5397.]]
# 증강 이후
class 0 에 대해서는 trasform 을 두 번 적용해서 파일 갯수가 정확히 2배
class 1 와 2에 대해서는 한 번씩 적용해서 파일 갯수는 동일
다만 적용된 변환 방식이 1/4 확률로 랜덤 크롭이 적용된 경우,
bbox 가 탈락하는 경우가 발생하므로 오브젝트 갯수는 소폭 감소
# 분할 이전
# 0행 : 정상, 1행 : 불량
# 열번호 : class
파일 분포
[[ 364. 1083. 915.]
[2238. 2870. 2308.]]
오브젝트 분포
[[ 590. 1393. 1163.]
[4508. 6321. 4472.]]
일부러 가장 학습이 어려운 class 1이 다른 class 보다 샘플이 많게끔 하였다.
# Train/Val/Test 분할 후 오브젝트 분포
[train]
정상
[426 950 808]
불량
[3204 4416 3124]
[val]
정상
[ 87 222 181]
불량
[657 935 687]
[test]
정상
[ 77 221 174]
불량
[647 970 661]