일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준 효율적인 해킹
- 백준 1325번
- pytorch 이미지 확인
- 백준 3190번
- 프로그래머스 43164번
- gradient descent optimization
- 프로그래머스 42883번
- 가상환경 확인
- Kullback-Leibler Divergence
- 프로그래머스 보석 쇼핑
- zip 압축해제 명령어
- 프로그래머스 72410번
- os 확인 명령어
- object detection
- 가상환경 제거
- 카카오 보석 쇼핑
- DeepLabv3+
- vscode sftp
- 프로그래머스 67258번
- 프로그래머스 42839번
- YOLO detection
- 프로그래머스 42885번
- jupyter 셀 추가 단축키
- Optimization algorithms
- 원격서버 로컬 동기화
- 프로그래머스 67256번
- MMdetection
- 프로그래머스 67257번
- jupyter 명령어 모드 단축키
- augmentation 이후 이미지 확인
- Today
- Total
소소한 블로그
[13주차 - Day55] MMDetection의 pipeline을 custom하는 법 본문
지난 Object detection 경연에서는 MMDetection을 사용했습니다.
* 참고
https://github.com/open-mmlab/mmdetection
MMDetection을 사용하고 있는 동안 생각보다
기존의 코드를 수정하고 싶을때나,
기존에는 없는 것을 새로 추가하고 싶을때가
많았습니다.
실제로 저는 기존 Mosaic, MixUp 클래스를 수정하여 새로운 클래스를 등록했고,
Mosaic, MixUp의 적용이 40%, 10%가 되게끔 새로운 클래스를 등록하기도 했습니다.
(50%는 Mosaic, MixUp 적용 모두 안함)
또한 Label smoothing를 위해 새로운 클래스를 등록해보기도 했고,
log에 뜨는 시간을 한국시간으로 표시하고 싶어 이와 관련된 클래스를 등록하기도 했습니다.
이번 게시물은 MMDetection에서 새로운 pipeline을 등록하는 것을 다뤄볼 예정입니다.
특히 위에서 언급한 새로운 MixUp 클래스를 등록하는 것을 예시로
이 과정을 설명하려고 합니다.
먼저 MMDetection에서 pipeline은 데이터를 변환시키는 역할을 한다고 생각하면 됩니다.
MMDetection에서의 전형적인 pipeline 단계는 아래와 같습니다.
살펴보면 크기를 조정하는 Resize, 좌우반전을 랜덤하게 적용하는 RandomFlip,
이미지 픽셀을 정규화해주는 Normalize, 패딩처리를 해주는 Pad
가 있음을 확인할 수 있습니다.
MMDetection에서 기본적으로 제공하는 pipeline은
https://github.com/open-mmlab/mmdetection/blob/master/mmdet/datasets/pipelines/transforms.py
이 파일에서 확인할 수 있습니다.
Albumentation이나 torchvision에서 제공하는 tranforms를 써봤다면
이런 이미지 변환 효과에 익숙할겁니다.
여기서는 'NewMixUp'이라는 새로운 pipeline을 등록하여 사용해보도록 하겠습니다.
먼저 기존 MixUp 클래스가 있음에도 불구하고
새로운 클래스를 만든 이유는 아래와 같습니다.
- 기존 MixUp 클래스에는 적용되는 확률값을 조정할 수 없습니다.
즉 무조건 1의 확률로 모든 데이터셋에 대해 MixUp이 적용됩니다. - 타겟 이미지(MixUp을 위해 랜덤하게 선택되는 이미지)의 bounding box 개수에 제한을 주고 싶었습니다.
왜냐하면 EDA를 한 결과 평균적으로 4.72의 bounding box가 있었으며,
bounding box가 6개 이하인 데이터가 전체의 75%가 되었기 때문입니다.
따라서 타겟 이미지에 너무 많은 bounding box가 있으면 안되겠다고 생각했습니다.
* 어떻게 코드를 수정했는지는 여기서는 다루지 않겠습니다.
미리 말하자면 새로운 pipeline을 등록하여 사용하는 방법은 여러개가 될 수 있고,
따라서 제가 작성한 방법이 유일한 방법은 아닙니다.
1. custom 폴더를 새로 만들어 NewMixUp이 선언된 new_mixup.py 작성하기.
저 같은 경우에는 custom한 클래스가 5개(.py파일 5개)였기 때문에,
이것들을 따로 cutom 폴더로 관리하고 싶었습니다.
따라서 mmdetection > mmdet > custom 폴더를 새로 만들었습니다.
2. mmdetection > mmdet > core > utils > __init__.py에 'NewMixUp' 포함시키기
line 5, 13에서 처럼 NewMixUp을 등록해줍니다.
3. 사용하는 config파일의 train_pipeline에서 NewMixUp을 지정해주기
위에서 __init__.py에 NewMixUp을 등록했다면
config파일에서 따로 해당 클래스를 import해줄 필요없이 바로 사용하면 됩니다.
끝!
MMDetection을 사용하면서 느낀점은 한글자료가 별로 없다는 것이었습니다.
따라서 MMDetection 공식 홈페이지와 github 코드를 참고하며 코드를 작성해봤습니다.
혹시 MMDetection을 사용해볼 예정이라면
다름아닌 공식 홈페이지와 github 코드를 보며 공부하는 것을 추천합니다.
'부스트캠프 AI Tech' 카테고리의 다른 글
[4주차 - Day19] pre-trained model의 transfer-learning (0) | 2021.12.04 |
---|---|
[9주차 - Day38] MMDetection 사용법 (0) | 2021.11.21 |
[12주차 - Day51] COCO 데이터 형식 EDA (0) | 2021.10.20 |
[11주차 - Day48] 정리안된 기록 (0) | 2021.10.19 |
[8주차 - Day36] VSCode에서 로컬과 원격서버 동기화하기 (4) | 2021.09.24 |