mmsegmentation 공략하기(설치부터 custom dataset학습까지)

2023. 6. 7. 13:56AI 기술

mmsegmentation(이하 mmseg)는 현재 segmentation SOTA 코드들이 사용하는 환경으로 매우 유용하게 사용되고 있다. 하지만, 생각보다 어려운 설치와 custom data 학습으로 인해 장벽이 존재한다.

 

몇일동안 삽실하며, 학습환경세팅과 실제학습에 들어가기까지 과정 및 오류내용을 공유해보려 한다.

 

본 글은, mmseg를 이용한 BEiT2활용 과정이며, BEiT뿐만 아니라 무수히 많은 모델들이 존재한다.

 

  • 본인 GPU 환경
    • A100 80G 4장 (320G)
    • Ubuntu 22.04.2 LTS
    • CUDA version  11.7

 

1. Installation

1. Docker build (Pytorch 1.7.1 CUDA 11.0 cudnn 8)

 

https://hub.docker.com/layers/pytorch/pytorch/1.7.1-cuda11.0-cudnn8-devel/images/sha256-f0d0c1b5d4e170b4d2548d64026755421f8c0df185af2c4679085a7edc34d150?context=explore

 

2. Docker run

docker run -it --rm \
	-v {local}:{docker} \
        -p {local}:{docker} \
       	{docker-image-name} bash

 

3. Install required

apt-get update
apt-get install sudo
sudo apt-get git
sudo apt-get install vim

 

4. Git clone

git clone https://github.com/microsoft/unilm.git

cd unilm/beit2

pip install -r requirements.txt

 

5. mmcv setting

pip install mmcv-full==1.3.0
pip install mmsegmentation==0.11.0
pip install scipy timm==0.3.2

 

6. visualization required

apt-get -y install libgl1-mesa-glx
apt-get install libglib2.0-0

 

7. etc..

추가적인 오류 검토후 작성

 

 

2. Custom Dataset 준비

(custom dataset이 아니라 이미 있는 dataset으로 학습을 원하면 --> github에 자세하게 나와있으니 그대로 따라가면 된다.)

 

다들 원하는 Image들은 준비가 되었을 것이다.

우선 이미지들은 다음과 같은 형식을 따라야한다.

-dataset
  --image
    	---train
        	----xxx.jpg
            	----yyy.jpg
            	----zzz.jpg
       	---valid
       	---test
        
    --mask
    	---train
        	----xxx.png
            	----yyy.png
            	----zzz.png
       	---valid
       	---test

official documents에 보면 mask에는 suffix를 넣으라고 되있는데, image와 label의 파일명을 동일하게 설정해줘도 된다.

 

※주의 : 기본세팅은 image=.jpg / mask=.png 이다.

 

3. Config file 준비

이 부분에서 많이 헷갈리고, 준비해야되는 파일들도 많다, 하나씩 알아보자

 

1. mmseg/datasets/

이 경로에 .py를 하나 생성하고, 다음과 같은 규칙으로 코드를 작성한다.

import os
import os.path as osp
from functools import reduce

import mmcv
import numpy as np

from .builder import DATASETS
from mmseg.datasets.custom import CustomDataset


@DATASETS.register_module()
class PMCT(CustomDataset):
    CLASSES = ('background', 'abnormal')
    PALETTE = [[255,0,0],[0,255,0]]
    def __init__(self, **kwargs):
        super().__init__(img_suffix='.png', seg_map_suffix='.png', **kwargs)

여기서 각자에 맞게 수정해야될 부분은,

  • Class명
  • CLASSES 인자들
  • PALETTE 값들
  • super().__init__ 에 들어갈 인자들

클래스에 상속받는 Dataset은 CustomDataset을 넣어주는데, 해당 클래스는 custom.py에서 상속받아 사용되는 것이고, 여기서 필요한 parameter들을 각자에 맞게 super().__init__ 인자에 채워넣어 주면된다.

 

2. mmseg/datasets/__init__.py

해당 파일에서

from .{1에서 생성했던 python file명(여기선 pmct)} import {1에서 선언했던 클래스명 (여기선 PMCT)} 추가

 

__all__ 부분에서 클래스명 추가

 

3. 

 

 

 

 

++ 계속 추가 예정