Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pytorch Object Detection Example 코드 관련 #1

Open
sjmin99 opened this issue May 14, 2023 · 1 comment
Open

Pytorch Object Detection Example 코드 관련 #1

sjmin99 opened this issue May 14, 2023 · 1 comment

Comments

@sjmin99
Copy link

sjmin99 commented May 14, 2023

실습 목표

  • 5월 15(월)에 실습할 내용은 Pytorch SSDLite Example 입니다.

  • Pytorch의 torchvision 라이브러리에서 제공하는 Object Detection 코드들을 활용해 나만의 검출기를 만드는 실습을 진행합니다.

  • 실습은 아래의 colab 노트북을 이용합니다. 각 링크의 colab 노트북을 개인 드라이브에 저장하여 실습을 진행해주시면 됩니다.

실습 자료

  • torchvision SSDLite 실습 예제 링크
@sjmin99
Copy link
Author

sjmin99 commented May 14, 2023

Annotation 관련 매뉴얼

Multi Class Object Detection 모델 학습을 위해서는 학습 영상 및 해당 영상 내 객체에 대한 bounding box 정보와 class 정보가 필요합니다. 데이터에 모델 학습에 사용할 label 정보를 추가하는 행위를 annotation이라고 하며 아래 글은 LabelImage Tool을 통해 annotation 하는 방법이 작성되어 있습니다.

LabelImage Tool 활용

  1. 먼저 해당 링크를 클릭하여 LabelImage Tool 프로그램을 다운받습니다.
  • 참고로 링크를 통해 제공된 Tool은 Window용이기 때문에 MacOS 혹은 Linux를 활용하시는 분들이라면 실행이 안될 수 있습니다. (테스트를 하지 못함.) 최대한 Window 환경을 활용해주시거나 LabelImage 공식 홈페이지를 참고하셔서 본인의 환경에 맞게 프로그램을 실행시켜주세요.
  1. 다운받은 압축 파일의 압축을 해제하면 다음과 같은 경로로 폴더들이 구성되어 있습니다.
LabelImage_for_window
|── windows_v1.6.0
|     |─data
|     |   |─predefined_classes.txt
|     |
|     |─labelImg.exe

여기서 먼저 data 폴더 안에 predefined_classes.txt는 labelImg Tool에서 bounding box의 class를 지정해줄 때 활용되는 class category를 의미합니다.

현재 다운받은 폴더 속 txt 파일 안에는 dog, person, cat 등 15개의 class가 명시되어있으며, 본인의 검출기가 학습시킬 class에 맞게 내용을 변경해주면 됩니다.

해당 예제에서는 페트병과 알루미늄 캔에 대한 간단한 검출기를 학습시킬 것이기에, 카테고리를 pet와 aluminum_can으로 변경하였습니다.
image

  1. 올바르게 저장을 했다면 labelImg.exe 파일을 실행시킵니다.

  2. labelImg 프로그램을 실행시켰다면 아래와 같은 UI가 나타나게 됩니다. 각 버튼의 기능은 다음과 같습니다.
    image

  3. 영상을 읽어온 후 annotation 과정을 수행합니다.
    image

  4. drag하여 bounding box를 선택하면 아래 그림과 같이 작은 창이 뜨게 됩니다. 해당 창은 방금 친 bounding box에 대하여 class label을 부여하는 것으로, 2번 단계에서 txt 파일에 카테고리를 어떻게 설정했느냐에 따라서 보여지는 것이 달라집니다. 해당 예제에서는 pet와 aluminum_can으로 변경하였기에 2개의 class에 대해서만 선택이 가능합니다.
    image

  5. Save 버튼을 눌러 annotation 정보를 저장합니다.
    image

  • 처음 세이브를 할 때는 아래 그림과 같이 annotation file을 어디에 저장할지 경로가 뜰텐데 경로 변경 없이 save 버튼을 누르면 train data가 있는 폴더안에 저장이 됩니다. 학습 데이터가 존재하는 폴더를 확인해보시면 train image와 동일한 이름의 xml 파일이 존재합니다.
    image
  1. 6~7번 과정을 train image 전체에 대해서 반복적으로 수행하여 annotation을 모두 마무리합니다.
    image

*** 한가지 팁을 드리면 labelImg에는 단축키가 존재합니다. 이는 아래와 같습니다.
image
*** 또한 save 버튼을 매번 누르지 않고 자동으로 저장하는 기능을 키기 위해서는 좌측 상단 View - Auto Saving 항목을 체크해주시면 됩니다.
image

  1. 그 후는 예전 실습과 동일하게 train image를 tar 압축 파일로 압축하여 google drive에 저장한 후 gdown 명령어를 통하여 colab 실습 코드 내부에서 불러오면 됩니다. 이때 train image 뿐만 아니라 annotation 정보가 들어있는 xml 파일도 함께 하나에 폴더에 넣어서 tar 포맷으로 압축해주시면 됩니다.

  2. 아래 실습 코드를 통해 xml 파일을 로드 후 multi classs object detection 학습을 수행하면 됩니다.

LabelImg Tool 오류 발생시

만약 open dir 버튼을 통해 영상을 업로드하는 것이 안되거나, annotation을 한 bounding box에 대해 save 버튼을 눌러도 저장이 안되는 등 여러가지 에러가 발생하실 경우 좌측 상단 file - ResetALL 버튼을 클릭 한 후 다시 tool을 실행시켜주시면 됩니다.
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant