0. 이전 주(11.21) 학습 모델 test 결과 리뷰

  1. 보도 블럭의 경우 오류가 가장 빈번하게 발생. 정성적으로 봤을 때 오류를 유형화 하기도 힘듦
  2. 가장 오류가 적게 발생하는 점자 블럭과 비교해서 생각하면, 보도 블럭은 ‘모두 동일하게 노란색’ 이기 때문에 crack 탐지가 쉬운 반면, 보도 블럭의 경우 패턴과 색상이 훨씬 다양하므로 더 어려운 문제라고 생각됨.
  3. 자전거 도로의 경우 대체로 붉은색, 그다음 검은색 아스팔트를 배경으로 흰색 혹은 노란색 선이 보조로 그어져 있다고 유형화 가능. 점자 블럭보다는 다양하고 보도 블럭보다는 덜 다양한 다양성을 지님.

3_12_1_1_2_1_20210817_0000239848.jpg

3_12_1_1_1_2_20210902_0000424637-2.jpg

3_12_1_1_3_2_20211020_0000668588.jpg

3_12_1_1_1_2_20210821_0000383985.jpg

3_12_1_1_3_1_20211116_0000998712.jpg

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

image.png

image.png

1. 증강

각각 0.25 확률로 다음 네 변환 중 하나를 이미지에 대해 수행하도록 작성.

  1. 원본 유지

  2. 반시계90도 회전,

  3. 160X160 랜덤 크롭 후 360X640 리사이즈 (이미지 사이즈 통일),

  4. 플립

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]