본문 바로가기
AIML 분야/Segmentation

[Semantic Segmentation ] HRNet V2 실험 및 코드

by 포숑은 맛있어 2021. 2. 18.
반응형

github.com/HRNet/HRNet-Semantic-Segmentation/tree/pytorch-v1.1 이걸 돌려보려고 한다.

 

HRNet V2 논문에서는 semantic segmentation 실험을 3가지 데이터셋에서 했다.

Cityscapes, LIP, PASCAL-Context이다.

 

Cityscapes

5000 장의 이미지에 대해서 pixel level로 전체 scene에 어노테이션이 되어있다.

finely-annotated image의 train:val:test 개수는 각각 2975:500:1525이다.

30개의 클래스가 있는데, evaluation에는 이중에서 19개의 클래스만 쓴다고 한다.

www.cityscapes-dataset.com/benchmarks/#scene-labeling-task

 

Benchmark Suite – Cityscapes Dataset

We offer a benchmark suite together with an evaluation server, such that authors can upload their results and get a ranking regarding the different tasks (pixel-level, instance-level, and panoptic semantic labeling as well as 3d vehicle detection). If y

www.cityscapes-dataset.com

HRNet 논문에서는 random crop을 사용하여 512*1024로 사용했다.

원래 segmentation이 그런건지는 몰라도 epoch이 아니라 또 iteration 단위로 적혀있다. 120K iteration을 돌렸다.

배치 사이즈 12, 4 GPUs 사용, syncBN 적용.

 

컴퓨터에 'leftImg8bit_sequence_trainvaltest.zip'라는 파일이 있는데, 이것만 압축파일로 300GB가 넘는데 일단은 압축 해제중이다.

뭔가 느낌상 여기에 'gtFine' 데이터를 같이 받아야만 될 것 같은 느낌이다...

 

 

Pascal-Context

PASCAL VOC 2010 데이터셋이 있는데, 여기에 추가적인 annotation을 제공한 데이터셋이다.

전체 scene에 대해 어노테이션이 제공되기 때문에 원래 original PASCAL semantic segmentation task에서 더 나아간 형태이다.

scene image가 4998, 5105장이 각각 train, test를 위해 사용된다.

클래스는 59개의 semantic classes, 여기에 1개의 background label이 들어간다.

 

이 사이트에서는 어노테이션만 추가로 다운받도록 되어있다.

그래서 PASCAL VOC 2010도 받아야하는데, 이건 1.3GB tar 파일이다. 용량이 작아서 단순 실험용이라면 이걸로 돌려보는 게 좋을 것 같다.

cs.stanford.edu/~roozbeh/pascal-context/

 

PASCAL-Context Dataset

 

cs.stanford.edu

host.robots.ox.ac.uk/pascal/VOC/voc2010/index.html

 

The PASCAL Visual Object Classes Challenge 2010 (VOC2010)

2006 10 classes: bicycle, bus, car, cat, cow, dog, horse, motorbike, person, sheep. Train/validation/test: 2618 images containing 4754 annotated objects. Images from flickr and from Microsoft Research Cambridge (MSRC) dataset The MSRC images were easier th

host.robots.ox.ac.uk

 

아쉽게도 지금 컴퓨터에 있는 게 PASCAL 2007인지라 다른 데이터셋을 더 보려고 한다. 가장 작은 셋에서 실험할 예정.

논문에서는 480*480 이미지로 resize하여 학습한다.

 

 

LIP

50462장의 human 이미지들이 있다. 30462가 학습, 10000가 validation이다.

class는 백그라운드 1개를 포함하여 총 20가지이다.

 

아래 링크에 가면 설명과 함께 다운로드를 받을 수 있는데, 구글드라이브와 바이두 링크를 제공한다.

별로 용량은 크지 않은 것 같다.

sysu-hcp.net/lip/

 

LIP:Look into Person

Our Lab-site Human Cyber Physical Intelligence Integration Lab @ SYSU The LIP Dataset We present a new large-scale dataset focusing on semantic understanding of person. The dataset is an order of magnitude larger and more challenge than similar previous at

sysu-hcp.net

 

학습시에 473*473 resize 하였다.

 

 

혹시 모르니 cityscapes 압축을 풀어봤는데, 역시 원본 이미지'만' 300GB가 넘었던 것이다.

파스칼이나 LIP는 1GB 언저리인데 말이다.

 

역시 모델 한번 돌려볼 용도라면 PASCAL이나 LIP를 돌려주도록 하자.

다운로드 후 아래와 같이 생겼는지 확인해주자.

 

저 list에 있는 디렉토리와 파일들은 원래 git clone하면 딸려오니까 신경쓰지 말자.

LIP의 경우, 그냥 구글 드라이브에 있는거 압축만 풀면 저대로 그대로 설정된다.

 


환경설정

PASCAL-Context를 실험하려면 추가적으로 무슨 셋업을 해줘야한다고 한다.

PASCAL VOC 다운받아보니까 전부 mat 파일로 되어있는데, 그래서인건가?

둘다 다운받긴 했지만 그래서 일단은 LIP로 돌리려고 한다.

 

 

train/validation

 

validation은 상관 없는데 train을 보니 panoptic deeplab처럼 또 distributed 처리를 할 것 처럼 생겼다. 음... segmentation계의 국룰인건가?

각종 yaml 파일은 experiments/데이터셋명/*에 있는 것 같다.

 

Train

python -m torch.distributed.launch --nproc_per_node=4 tools/train.py --cfg <yaml이름>

Validation

python tools/test.py

--cfg <yaml파일명> \
DATASET.TEST_SET testval \
TEST.MODEL_FILE <모델 pth 파일> \
TEST.SCALE_LIST 0.5,0.75,1.0,1.25,1.5,1.75,2.0 \
TEST.FLIP_TEST True

 

 

 

그러면 tools/train.py 를 먼저 봐야겠다.

별로 어려울 부분은 없어보이는데, core.function에 train()과 validate()이 정의된 모양이다.

매 에폭마다 이 함수를 호출하여 학습하며, 한 에폭이 끝나면 pth를 저장한다.

 

모델과 데이터셋을 만드는 과정에서는 eval() 함수를 쓴다. 이걸 쓰는건 처음봤다.

모델

model = eval('models.'+config.MODEL.NAME + '.get_seg_model')(config)

이걸 다시 FullModel()로 감싸는데, 이건 단순히 모델이랑 loss를 담는 데에 지나지 않는다.

 

데이터셋

그냥 'datasets' 폴더 안에 세가지 데이터셋 정의가 각각 되어있는데 왜 굳이 eval함수를 쓴건지는 모르겠다.

아무튼 datasets/lip.py 이런식으로 보고싶은 데이터셋 정의 보면 될 것 같다.

 

 

 

따라서, 데이터셋 파일 / 모델 파일 / train() 및 validate() 함수 각각을 봐주면 될 것 같다.

코드가 그렇게 복잡해보이진 않다.

 

 

코드 실행 (에러)

pytorch 0.4.1 말고, 1.1.0 버전으로 git clone 하자.

이게 master branch가 아니기 때문에 주의.

 

왜냐면 1.1.0이라고 써있긴 한데 그 이상 버전이어도 상관 없다.

그리고 0.4.1이면 inplace_abn 이라는 게 필요한데, 여기서 코드 에러가 난다.

실제 그 inplace_abn을 설치할 필요는 없고 HRNet 코드 안에 제공이 되는데, sync_bn 폴더 내에서 import 에러가 났다.

torch 1.1.0으로 옮기면 신경쓸거 없이 그냥 통째로 sync_bn 폴더를 삭제해도 되기 때문에 그렇게 했다.

이것만 해결하면 문제 없이 코드는 돌아간다.

 

 

 

일단은 실험을 돌려보고 있는데, 1에폭에 내 환경에서는 1 ~ 1.5시간 걸린다.

Pretrained model은 바이두 링크를 통해서만 제공되기 때문에 LIP dataset만 사용하여 학습중이며, 현재 25에폭 기준으로 mIoU는 0.3 수준이다. 모델은 아직 수렴하지 않았다.

논문을 확인해보니 0.4, 0.5 이상은 되어야할 것 같다. 물론 이는 imageNet pretrain을 했을 것이다. Cityscapes는 pretrained 썼다고 하는데 다른 데이터셋에서는 딱히 얘기 없는걸 봐선 사용했을 것 같다.

 

잘 돌아가는거 확인 하고 코드 슥 봐야겠다.

 


Pretrained model 구버전은 다운이 안되는 게 맞는데, 신버전은 된다.

github.com/HRNet/HRNet-Image-Classification  

여기 보면 ImageNet에서 test error가 기존 것 보다 더 작은 모델이 있다.

이걸 가지고 다시 돌리고 있다. 잘 돌아간다.

 

아무튼 동작하는 것을 확인했으니 커스텀 데이터셋에서도 돌릴 수 있도록 코드를 살펴봐야겠다.

저번 panoptic deeplab보다는 훨씬 나을 것 같다.

 

-

 

서버 접속때문에 작성중에 자꾸 글을 날려서 그냥 코드 리뷰는 생략한다. ㅡㅡ;

대략 봤는데 안까먹을거라 믿는다.

 

하나 기록해두자면, LIP annotation은 grayscale로 읽어야한다. 그리고 0,1,2, ... 19 이런 식으로 저장되어있다.

그래서 이미지를 보면 겉보기에는 전부 까맣다.

반응형

댓글