본문 바로가기

프로그래밍/종합설계 딥러닝 프로젝트

작은 물체 낮은 검출률 문제(small object's low precision problem)

제가 만든 사과 데이터로 모델을 학습 시키기 전에 작은 물체에 대한 낮은 AP 문제를 해결해야 했습니다.

참고로 작은 물체는 큰 물체에 비해 pointcloud 수 자체도 너무 적기 때문에 3D Detection 난이도가 굉장히 높습니다.

따라서 이 문제를 해결하는것이 이번 프로젝트에서 가장 중요했던 부분이였습니다.

 

작은 물체에 대한 모델 validation 결과

저는 컵을 검출할 정도면 사과도 충분히 검출가능하다고 생각했기 때문에 컵에 대해서 포커스하였고 컵의 정확도를 높이기 위해 원인을 분석하고 솔루션을 적용해 보았습니다.

문제 원인

  1. 상대적으로 너무 적은 데이터량​ : 큰물체(의자 등)에 비해 작은물체(컵 등)는 데이터 비율이 상대적으로 적었습니다.
  2. 구조적인 문제 : 이 모델의 feature size는 8cm 16cm 32cm 64cm 총 4단계로 구성되어 점차 영역을 ​확대해 가면서 feature를 뽑아 냅니다.​ 하지만 굳이 작은 물체를 학습하는데 큰영역의 feature를 뽑을 필요는 없을 뿐더라 시간도 낭비되고 효율이 떨어집니다.

해결 방안

  1. ​10000개의 데이터셋에서 작은 물체(컵)만 따로 뽑아 서브 데이터셋을 만들어 상대적인 데이터량을 많게 합니다.
  2. 모델에서 4단계를 거치지말고 2단계만 거치도록 구조를 변화시킵니다.​ 즉, 작은영역에서만 detection을 진행하도록 하고 시스템부담이 줄어든 대신 voxel_size를 반으로 줄여서 더 자세하게 detection합니다.

복셀 사이즈는 줄일경우 이론적으로 더 자세한 학습이 가능하지만 부작용(side effect)으로 연산량은 엄청나게 증가하기 때문에 줄이기 쉽지 않았으나 구조를 2단으로 가볍게해서 결국 복셀 사이즈를 반으로 줄이는게 가능했습니다.

 

해결방안 1번을 하기위해 10000개의 라벨 데이터를 일일이 찾아 볼수는 없어서 컵 데이터만 뽑아내는 python 문자열 매칭 코드를 작성했습니다.

 

Code

import os
import re

os.chdir('/media/root/cap/sunrgbd/sunrgbd_trainval_ori/label')

count = 0
p = re.compile('cup\s') # cup과 문자열 매칭
l = []

for i in range(1,10336):
    f1 = open("%06d.txt" % i)
    data = f1.read()
    m = p.search(data)
    if m: # 매칭 참
        count = i
        l.append(count)
    else:
        pass
    f1.close
for num in l:
    print(num, end=' ')
print("\n")

 

그 결과 컵에 대한 파일만 뽑아내었습니다.

 

컵에 대한 사진

 

또 해결 방안 2를 하기위해 4단 구조에서 2단 구조로 변경하였습니다. 사진으로 보시면 아래와 같습니다.

 

코드로 보시면 아래와 같습니다.

 

변경전 변경후

빨간색 밑줄친 부분위주로 보시면 복셀사이즈는 반으로 줄었고 in_channels은 4개에서 2개로 구조를 변경하였습니다.

 

이렇게해서 솔루션을 적용한 학습 결과를 보시겠습니다.

 

솔루션 적용후 FCAF3D 학습결과

 

무려 5배 가까이 AP가 증가하였습니다. 이제 예측한 Bounding Box가 어떻게 생성 되었는지 Visualization하여 확인해 보겠습니다.

 

빨간색: 정답 바운딩 박스, 초록색: 예측 바운딩 박스

 

컵 검출이 잘 되었네요. 오히려 예측값이 더 잘 검출한것을 알수 있습니다. SUNRGBD 데이터셋에서 작은물체에 대한 라벨링은 정밀도가 조금 낮은것 같습니다.

 

원본 사진 빨간색: 정답 바운딩 박스, 초록색: 예측 바운딩 박스

위 사진에서는 라벨링 하지 않은 컵들까지도 훈련된 모델이 잘 찾아내는것을 확인할수 있었습니다. 컵도 잘되니 사과도 잘될거란 확신이 들었습니다.

 

 

빨간색: 정답 바운딩 박스, 초록색: 예측 바운딩 박스

위 사진을 보시면 정답 바운딩 박스가 약간 다른곳에 라벨링 되었기 때문에 모델이 학습하는데 혼란을 겪는 모습도 포착되었습니다.

솔루션 3번째로 정밀한 라벨링은 해준다면 작은 물체에 대한 AP도 훨씬 증가할것 같습니다.

이제 사과에 대해 3D Detection을 할 준비가 모두 끝났습니다. 이어서 포스팅 하겠습니다. 감사합니다.