CS 공부/취업준비 이론정리

Object Detection (재활용품)

imsmile2000 2023. 11. 12. 00:22

1. MMDetection이란? 활용방법은?

Pytorch 기반의 Object Detection 오픈소스 라이브러리입니다.

전체 프레임워크를 모듈 단위로 분리해 관리할 수 있다는 것이 가장 큰 특징입니다.

- 1 stage 모델의 경우 Backbone / Neck / DenseHead 모듈

- 2 stage 모델의 경우 여기에 RoIHead 모듈을 추가, 총 4개의 모듈로 구분됩니다.

Faster R-CNN, Cascade R-CNN, RetinaNet, YOLOv3 등의 다양한 객체 탐지 알고리즘을 지원합니다.

 

더 자세한 설명은 https://imsmile2000.tistory.com/185

 

2. UniverseNet은 무엇? 왜 사용하게 됐는지, 장점은?

객체 탐지를 위한 최신 딥러닝 모델 중 하나로, 2020년에 발표된 모델입니다.

기존의 객체 탐지 방법보다 높은 성능을 보여주며, 특히 작은 객체에 대한 탐지 성능이 뛰어납니다. 장점1. Aggregation by Concatenation - 고차원의 feature를 효과적으로 취합하여 더 많은 정보 보존, 더 정교한 탐지장점2. Class-Aware Sampling - 각 클래스에 따라 적절한 양의 샘플을 선택하여, 모델이 모든 클래스를 공정하게 학습할 수 있게 함장점3. Dynamic Anchor Assignment: 동적 앵커 할당 방법 사용하여, 앵커박스와 실제 객체의 일치도 향상. 더 정확한 탐지장점4. 작은 객체 탐지 성능

 

3-1. Correlation Matrix란? 코드?

변수들 간의 상관 관계를 나타내는 정사각형 행렬.

상관 관계를 -1~1의 범위를 가지며, 0은 상관 관계가 없다는 뜻

상관 행렬을 통해 변수들 간의 다중공선성(multicolinearity) 탐지할 수 있다. (다중 선형 회귀 사용하는 모델을 분석하는데 도움이 됨)

import pandas as pd
data=pd.DataFrame({'변수1': [1, 2, 3, 4, 5],
    '변수2': [2, 4, 6, 8, 10],
    '변수3': [3, 6, 9, 12, 15]
    })
correlation_matrix=data.corr()
print(correlation_matrix)

 

3-2. Confusion Matrix란? 코드?

오차 행렬은 분류 모델의 성능을 평가하기 위해 사용되는 행렬입니다.

모델의 예측 결과와 실제 값 사이의 관계를 나타내며 주로 이진 분류에서 사용됩니다.

1. TP: 모델 예측이 참이고 실제 값도 참

2. FP: 모델 예측이 참이고 실제 값은 거짓

3. TN: 모델 예측이 거짓이고 실제 값도 거짓

4. FN: 모델 예측이 거짓이고 실제 값은 참

모델의 예측 결과와 실제 값 사이의 관계를 시각적으로 파악하고, 모델의 성능을 평가

from sklearn.metrics import confusion_matrix

# 실제 값과 예측 결과를 각각의 리스트로 가정
actual = [1, 0, 1, 0, 1]
predicted = [1, 0, 0, 0, 1]

# Confusion matrix 계산
cm = confusion_matrix(actual, predicted)

# Confusion matrix 출력
print(cm)

 

3-2. Confusion matrix 분석 코드를 작성한 이유와 분석 결과는 어떠했나요? 어떤 정보를 얻을 수 있었나요?

다양한 모델이 어떤 class를 잘 예측하고 어떤 class를 잘 예측하지 못했는지 파악하고.

모델이 어떤 클래스를 어떤 다른 클래스로 혼동하는지 파악합니다.

이를 통해서 여러 모델을 앙상블할 때 서로 상호보완이되는 모델끼리 앙상블을 진행하였습니다.

 

4. 실험 자동화 환경을 구축하기 위해 어떤 도구 또는 프레임워크를 사용했나요?

py파일로 모듈화를 시킨뒤 main.py에서 argparser를 통해 loss나 epoch 등의 하이퍼파라미터 값을 바꿀 수 있도록 했고 쉘스크립트에 돌리고 싶은 실험 항목들을 적어놓고 nohup으로 백그라운드 실행시켰습니다.

 

5. EDA를 통해 얻은 인사이트는? 인사이트를 기반으로 어떻게 실험 설계 했는지

이미지 당 bounding box의 개수 -> bbox가 30개 이상인 이미지를 시각화한 결과 객체들이 중첩되어 있어 물체 간 밀도가 높다고 판단

이미지 당 unique class 개수 -> 최소 1개 ~ 최대 1개

클래스 별 bounding box의 개수 -> 배터리가 159개로 가장 적고, 종이가 6352개로 가장 많았음

클래스 별 bounding box 크기 -> 배터리가 상대적으로 작고, 옷이 상대적으로 큼

bounding box 위치 Heatmap 출력 -> 대부분 가운데에 위치

 

EDA 결과 실험을 몇가지 설계했습니다.

1. 밀도가 높은 이미지를 잘 탐지할 수 있는 방법

2. 데이터가 적은 클래스(ex.배터리)의 예측 정확도가 반드시 낮을까?

3. bbox 크기에 따라 모델의 예측에 차이가 있을까? 

 

6-1. NMS, WBF, NMW 설명

1. Non-Maximum Suppression: 겹쳐져 있는 여러 bbox 중에서 하나만 남기고 나머지를 제거하는 방법

  • 이미지에서 class score가 가장 높은 bbox를 찾고 class score가 낮은 bbox는 삭제한다
  • 위에서 찾은 bbox를 기준으로 나머지 bbox에 대해 IOU 계산
  • IOU가 설정한 임계값보다 크면 bbox 제거
  • 반복
  • 중복된 객체를 효과적으로 제거하지만 같은 class의 물체가 겹쳐져 있는 경우에 하나의 bbox만 탐지함

 

2. Weighted Box Fusion:

가중치를 고려하여 여러 bbox를 결합하는 기법

  • 모든 Bounding Box의 Confidence Score를 활용해 새로운 Average Box를 만들어냄
  • 여러 bbox들의 다양한 특성을 고려하여 정보를 유지할 수 있다.
  • 가중치 설정이 어려울 수 있음...

 

3. Non-maximum weighted: NMS와 달리 중복된 박스들을 제거할 때 가중치를 사용하여 박스들을 결합함

  • 개별 bbox의 중요도를 정확하게 반영할 수 있다
  • 가중치 설정에 따라 앙상블 결과가 예민하게 변동될 수 있다

 

6-2. 앙상블 기법 각각 어떤 경우에 사용했는지

우선 하나의 detection 모델을 k-fold ensemble 할때는 NMS 기법을 사용하였다. 같은 모델에 대해서 fold만 다르게 해서 학습한 것이기 때문에 bbox간 큰 차이가 없을 것이라 생각하여 겹쳐진 bbox 중 하나만 남기는 것이 더 효과적이라고 생각했습니다.

이후 Kfold ensemble한 여러 모델의 예측 결과끼리는 WBF, NMW 두가지 방법을 사용하여 다양한 모델의 예측 bbox를 결합하였다. 하지만 WBF(0.6832), NMW(0.6878)로 NMW의 성능이 더 높아서 NMW 기법을 최종 기법으로 채택했다.

 

7. Augmentation 조합 추출 방법, 효과

가장 학습 수렴속도가 빠른 Faster RCNN 모델에 대해서 모든 Augmentation 기법을 각각 실험해보았다.

모델의 mAP50과 General trash, plastic 클래스에 대한 AP50의 평균을 평가지표로 사용하여 상위 11개의 Augmentation을 채택하였다.

 

11개의 Augmentation 기법 중 HueSaturation, CLAHE, MedianBlur처럼 기능이 비슷한 기법끼리는 One of를 적용하여 조합의 다양성을 높였다.

최종 Augmentaion 조합