【Pytorch】 detectron2 teardown reports

detectron2 teardown reports

1. docker build & run

$ cd /path/to/detectron2/docker
$ docker build --force-rm --tag detectron2:4.29 . # 4월 29일
$ sudo docker run -d -it      \
    --gpus all         \
    --restart always     \
    -p 8888:8080         \
    --name "detectron2"          \
    --shm-size 8gb      \
    -v /home/junha/docker:/workspace  \
    -v /hdd1T:/dataset   \
    sb020518/detectron2:4.29
  • container 내부에서 $ pip list | grep detectron2 해서 나오는 결과가 코드를 수정해야 반영하는 부분이다.
    • >> detectron2 - (version) 0.4 - (path) /home/appuser/detectron2_repo 여기를 수정해야 한다.
    • 현재 내가 (Container path) /workspace/detectron2/detectron2 = (Local path) ~/docker/detectron2/ 에서 작업을 하기는 희망하지만, 위의 pip이 인식하고 있는 path에서 코드를 수정하지 않으면 반영되지 않는다.
    • 따라서 /home/appuser/detectron2_repo 여기서 먼저 작업한 후, 옮기고 싶은 내용들을 (Local path) ~/docker/detectron2/ 여기로 copy 해놓자.

1.1 “Error: EACCES: permission denied” 해결

  • 링크 : Docker - “Error: EACCES: permission denied,
  • 나의 해결 방법
    1. ubuntu에서 ls -l 을 처서, 폴더 혹은 파일의 권한을 가진 사용자 알기
    2. $ sudo chown -R junha:junha ./detectron2/ 폴더의 소유자를 바꿔주기
    3. 그러면 폴더 내부의 모든 파일들도 소유자가 바뀐다.
    4. 그리고 container에 들어가서 소유자를 확인해보면, container의 userid로 소유자가 바뀌었다.

image-20210429172627484

2. Detectron2 github

간단히 봐야할 파일들

  1. Getting Started with Detectron2
  2. documentation
  3. Detectron2 Model Zoo.
  4. Detectron2 Dataset setting info
  5. Colab Notebook

하나하나 자세히

  1. Getting Started with Detectron2
    • python demo.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --output ./ --input 544.jpg --opts MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
    • tools/train_net.py 에서 모든 Training & Evaluation(–eval-only 옵션)을 할 수 있다.
  2. documentation
    • 내가 torch document를 먼저 보지, torch github를 먼저보지는 않잖아?
    • 따라서 detectron2도 가능하면 documentation을 봐야한다. (이 함수가 무슨 역할을 하는지, 코드를 읽으면서 이해하는게 아니라, 그냥 document에 써있는 그대로로 이해해야 한다.)
  3. Detectron2 Model Zoo.
    • 위에 글들은 쓸데없고, 그냥 표만 읽으면 된다.
    • config file path / model (pth아닌 ptl=pickle 파일) 가 있으니 그대로 사용하면 된다.
    • 만약에 pth파일로 만들고 싶다면, 디버깅 과정에서 torch.save(model.state_dict(), model.pth)
  4. Detectron2 Github 파일 및 폴더 탐구 일지
    • 많이 복잡하기는 한다. 하지만 뭐 디버깅 하면 다 거기서 거기다.
    • documentation을 보고 하나의 라이브러리로써 공부해야한다.
  5. 먼저 Demo.py로 디버깅 해보기
    1. detectron2/detectron2/config/defaults.py 에서 모든 config 내용들이 다 들어간다.(각 파라메터가 무엇을 의미하는지 정확히 나와있으니 언젠간 꼭 한번 쭉 읽어봐야 할 거다. 링크) 그리고 model_zoo에서 가져온 config파일 내용에 대해서만 일부 수정되는 형식이다.
    2. mm 계열처럼 Refistry 를 사용해서, 다중 Architecture의 위치를 기억하고 원하는 걸 가져와서 사용한다.
      • image-20210429214731195
      • model의 type은 위의 5개 중 하나이다. 현재 디버깅 하는 중에는 <class 'detectron2.modeling.meta_arch.rcnn.GeneralizedRCNN'> 이다.
      • 이 안에 backbone, neck, head 모두 다 들어가 있다. GeneralizedRCNN 코드 내부에 __init__ & forward이 매우 심플하니 어떤 것들이 들어가 있는지 참고하면 좋다.
    3. 새로운 데이터셋에 대해서는 from detectron2.data import MetadataCatalog, DatasetCatalog 만 잘 정의해주면 된다. 하지만 나는 이미 많은 사람들이 사용하는 오픈 데이터 셋을 사용하기 때문에, 내가 만들 생각하지 말자.
    4. detectron2.utils.visualizer (특히 draw_instance_predictions 맴버함수)이 나중에 개꿀일 것 같으니 알아두자.
    5. from detectron2.evaluation import COCOEvaluator 를 이용해서 AP coco 결과를 바로 출력하는 방법 있음.
    6. 결론. config 파일을 바꾸는 것 만으로 내가 원하는 모든 작업을 수행할 수 있다.

3. tools/train_net.py 부시기


© All rights reserved By Junha Song.