VOC 포맷 데이터 정리하기 (1)

bigjoon·2021년 1월 12일
5
post-thumbnail

2020년 9월, 임베디드 리눅스 보드에서 TensorRT로 경량화된 SSD Mobilnet V2를 동작시켜야할 일이 있었습니다. SSD Mobilenet v2를 커스터마이즈 데이터를 사용하여 파인튜닝을 시켜야 했지요. 커스터마이즈 데이터는 VOC형식의 데이터였어요.
저희는 SSD Mobilenet v2 를 Tensorflow 1.12 버전에서 커스터마이즈 데이터에 대해서 파인튜닝하고 frozen inference graph를 추출해야만 했습니다.(참고.Tensorflow 1.12 버젼은 github에서 tensorflow offical 레포 중 1.13 branch입니다.) 하지만 Tfrecord로 변환 후에도 학습이 진행이 되지 않았어요.
어디가 문제일지 고민을 하다 Dataset이 문제라는 결론을 내리게 되었어요. 이 글은 그래서 VOC형식의 거대한 데이터셋을 다루며 제가 알아낸 문제 해결방법 그리고 만든 스크립트들을 공유하고자 작성하게 되었어요.

이 포스팅이 혹시나 VOC 형식의 큰 데이터를 다루게 될 누군가에게 도움이 되기를 바랍니다.

VOC 포맷 파악하기

다른 연구실로 부터 제공받은 데이터셋은 흔히 Pascal VOC 또는 VOC format이라고 하는 형태로 되어 있었답니다. VOC 포맷의 데이터는 아래의 그림과 같은 폴더의 구조를 갖는답니다.

XX에는 07, 12 와 같은 년도가 들어가 있어요. 저희는 Object Detection에 대해서 신경 쓰기 때문에 아래 그림과 같은 폴더 구조로 되어 있었어요.

  • Annotations 에는 JPEGImages 폴더에 있는 원본 이미지와 똑같은 이름의 .xml 파일들이 있답니다.

  • ImageSets 에는 이미지들을 test,train,trainval, val 로 구분해서 사용하기 위한 파일들이 들어가게 됩니다.

  • JPEGImages에는 .jpg 확장자를 가진 원본 이미지들을 모아놓는 폴더에요.

    문제 발견!

    저희는 여기까지 진행 후 Tfrecord로 데이터를 변환해주는 작업을 진행하였어요. 하지만 이후 학습이 진행이 되질 않았어요. 어디가 문제일지 고심 끝에 Tfrecord가 제대로 만들어진 것인지 볼 수 있게 도와주는 Tfrecord시각화툴을 사용하여 보았지요.
    눈으로 확인해본 결과 박스가 엉뚱한 곳에 있고 심지어 박스 중에 누락된 것들도 많았답니다.

    원인 분석!

    총 30만장의 이미지 중 문제가 발생한 이미지와 Annotation파일(.xml)을 열어보았답니다. 몇가지의 문제가 겹쳐져 복합적으로 발생하고 있었어요.

  • FHD급(1920x1080)이미지라고 알고 있던 것들 중 UHD급(3840x2160)의 이미지가 섞여 있었습니다. 하지만 해당 Annotation(.xml)에는 FHD급의 size로 되어 있었는데 말이죠.

  • 불필요한 객체 정보들 또한 포함되어 있었답니다. 프로젝트에 앞서서 전달 받을 당시엔 15개의 목표가 되는 객체들로 구성되어 있다고 했지만 사실 열어보니 불필요한 객체들이 들어가 있었던 것이죠.

    위의 2가지 이유로 인하여 Tfrecord가 제대로 만들어지지 않았었습니다.

    해결방법!

    해결 방법은 간단했어요.

  • Image와 Annotation을 리사이즈 하는 거지요. 이왕 리사이즈 할건데 학습 할 딥러닝 네트워크 모델의 입력(input) 사이즈와 통일 시키는게 좋겠죠?

  • 전체 데이터(Full Data)에 대해서 리사이징이 끝났다면 이젠 불필요한 객체에 대한 태그들을 지워주는 작업을 하면 되는 거에요.

    이 해결 방법에 대한 코드 사용법은 다음 포스팅 VOC 포맷 데이터 정리하기(2) 에서 계속 설명해드릴게요.



    **VOC 포맷 파악하기여기 를 참고하여 작성하였어요.

profile
Develop Things. Step_by_Step

0개의 댓글