본문 바로가기

인공지능

YOLACT 설치 및 커스텀 데이터 학습(리뷰)

 

YOLACT 예제

저는 윈도우 환경에서 설치 하였고 python버전은 3.6 입니다. 

먼저 링크를 따라가서 yolact 파일들을 다운받아 저장합니다.

github.com/dbolya/yolact

 

dbolya/yolact

A simple, fully convolutional model for real-time instance segmentation. - dbolya/yolact

github.com

그 다음 환경세팅을 하기위해 Anaconda를 설치해 줍니다.

www.anaconda.com/products/individual

 

Anaconda | Individual Edition

Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

Anaconda Prompt 를 이용하여 가상환경을 셋팅해 주세요. 

그리고 파이토치를 다운 받습니다. ( 버전은 1.0.1 이상 및 TorchVision을 설치합니다.)

파이토치 설치할 때 cuda 번전과 맞게 설치 해 주셔야 합니다.

pytorch.org/

 

PyTorch

An open source deep learning platform that provides a seamless path from research prototyping to production deployment.

pytorch.org

설치가 완료 된 후에 Anaconda Prompt를 열어 셋팅한 가상환경을 열어서 패키지를 다운 받습니다.

# Cython 은 pycocotools 전에 설치해야합니다.
pip install cython
pip install opencv-python pillow pycocotools matplotlib

패키지까지 설치가 완료가 되면 이제 가중치 모델을 가지고 직접 이미지나 동영상에 대해 디텍팅을 해볼 수 있습니다.

 

가중치 모델 

resnet50 : drive.google.com/file/d/1yp7ZbbDwvMiFJEq4ptVKTYTI2VeRDXl0/view

 

yolact_resnet50_54_800000.pth

 

drive.google.com

다운은 받은 뒤 yolact > weights 디렉토리에 넣어줍니다.

 

이미지 파일 디텍팅 명령어

python eval.py --trained_model=weights/yolact_resnet50_54_800000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png

--image=<이미지 파일 경로>이미지파일 <-- 이렇게 설정해 줍니다. (각자 다르기 때문에 경로 설정은 잘 해주셔야 합니다.)

 

동영상 파일 디텍팅 명령어

python eval.py --trained_model=weights/yolact_resnet50_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=my_video.mp4

--video=<동영상 파일 경로>동영상파일 <--여기서 또한 각자 가지고 있는 동영상 파일 경로설정을 잘 해주셔야 합니다.

 

예제를 돌려보고 성공하시면 다음 커스텀 데이터 학습을 해보겠습니다.

 

학습을 하기위해서 제일 먼저 coco형식의 dataset이 필요합니다.

dataset을 만들기 위해서 labelme를 이용하여 이미지 주석 처리를 해야합니다.

 

labelme설치:

github.com/wkentaro/labelme

 

wkentaro/labelme

Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). - wkentaro/labelme

github.com

labelme파일을 다운받아 저장 하고 Anaconda Prompt에서 labelme모듈을 설치합니다.

pip install labelme

설치가 다되었으면 다운받은 labelme 디렉토리로 이동하여 명령어를 통해 labelme를 열어줍니다.

python labelme

python labelme 명령어 실행

실행 화면:

여기서 Open Dir 눌러 자신이 주석처리 할 이미지파일들의 디렉토리를 열어주세요. 

(주석처리 하기 앞서 모든 이미지파일들의 크기가 일정해야 합니다. yolact 학습할때 크기가 일정하지 못하면 오류가 발생합니다. 저는 512*512사이즈로 진행하겠습니다.)

 

이미지가 뜨게 되면 Create Polygons 버튼을 누르고 학습할 물체를 주석처리 하시면 됩니다. 점들이 서로 다 이어지게 되면 주석 이름을 설정하는 거기서 클래스이름을 적어 주시면 됩니다.(저는 농구공를 예시로 했습니다.)

 

 

Save를 눌러 json파일을 저장해 줍니다. 

이제 여기까지 왔다면 이 주석된 파일들과 이미지를 coco Dataset으로 만들어 주겠습니다.

labelme2coco를 이용하여 coco Dataset으로 만들어 줄 겁니다.

github.com/Tony607/labelme2coco

 

Tony607/labelme2coco

How to create custom COCO data set for instance segmentation - Tony607/labelme2coco

github.com

링크를 타고 들어가 다운을 받습니다.

labelme2coco-master 폴더 안에 images파일이 있는데 여기에 주석처리한 이미지와 json파일들을 다 넣어 줍니다.

Anaconda Prompt를 이용하여 labelme2coco.py를 실행시켜 줍니다.

python labelme2coco.py images

명령어 입력시 나온 화면

images는 경로를 지정한겁니다.

성공적으로 완료가 되면 trainval.json파일이 만들어 집니다. 

 

여기까지 커스텀 데이터를 가지고 coco Dataset을 만들었습니다. 이제 이 데이터셋을 가지고 학습을 시켜 보겠습니다.

 

yolact이 설치되있는 폴더안 data폴더에 들어가 train이라는 폴더를 생성해 주시고 폴더안에 coco dataset인 trainval.json파일과 주석처리한 이미지들을 넣습니다.

 

학습을 하기전에 환경설정을 해주어야 합니다.

yolact폴더 안에 data폴더에  config.py파일을 설정해 주어야 합니다. 파일 수정을 위해 notepad나 다른 수정 툴을 이용해 열어줍니다. 

 

 

# --------------------- DATASETS --------------------------- #
 ...
 
 cig_basket_dataset = dataset_base.copy({
    'name': 'Basketball',

    'train_images': './data/train/imges/',
    'valid_images': './data/train/imges/',

    'train_info': './data/train/trainval.json',
    'valid_info': './data/train/trainval.json',

    'class_names': ('basketball'),
    'label_map' : {0 : 1}
})

DATASTES 가 정의 되있는 섹터를 찾아서 맨 뒤에 위에 코드를 추가합니다. 경로는 각자 설정해 주셔야합니다. 꼭 저랑 같지 않아요. 

그 다음 밑으로 가다보면 YOLACT v1.0 CONFIGS 이 설정된 섹터를 찾아서 맨 뒤에 코드를 추가해 줍니다.

# --------------------YOLACT v1.0 CONFIGS -------------------- # 

...

yolact_resnet50_cig_basket_config = yolact_resnet50_config.copy({
    'name': 'yolact_plus_resnet50_cig_basket', # Will default to yolact_resnet50_pascal
    
    # Dataset stuff
    'dataset': cig_basket_dataset,
    'num_classes': len(cig_basket_dataset.class_names) + 1,

    'max_size' : 512,
    'max_iter': 120000,
    'lr_steps': (60000, 100000),
    
    'backbone': yolact_resnet50_config.backbone.copy({
        'pred_scales': [[32], [64], [128], [256], [512]],
        'use_square_anchors': False,
    })
})

max_size는 이미지 크기와 같게 설정해 줍니다.

 

이제 학습하는데 준비는 거의 다 되었습니다. 마지막으로 학습을 하기 위해서는 사전 학습 된 모델이 필요하기 때문에

resnet50-19c8e357.pth파일을 다운 받아서 weights파일에 넣어줍니다.

drive.google.com/file/d/1Jy3yCdbatgXa5YYIdTCRrSV0S9V5g1rn/view

 

resnet50-19c8e357.pth

 

drive.google.com

이제 훈련 명령어만 입력한다면 학습을 할 수 있습니다.

#1개의 배치가 약 1.5기가의 VRAM을 차지하므로 적절하게 지정
python train.py --config=yolact_resnet50_cig_basket_config --batch_size=5

mAp값을 보면서 자신이 원하는 곳에서 훈련을 일찍 중단 할수 있습니다. ( Ctrl + C  키를 이용한다)

훈령된 pth파일들은 weights폴더안에 자동으로 저장 됩니다.

 

이런식으로 mAp값이 출력 되는데 이것을 보면서 자신 적당히 잘 됬다고 생각하면 중단하면 됩니다.

 

중단된 가중치를 가지고 다시 훈련을 재개 하려면 코드를 입력합니다.

#특정 가중치 파일로 yolact_resnet50 훈련을 재개하고 가중치 파일의 이름에 지정된 반복부터 시작합니다.
python train.py --config=yolact_resnet50_cig_basket_config --resume=weights/yolact_plus_resnet50_cig_basket_4268_106703_interrupt.pth --start_iter = -1

--resume=<자신이 중단해서 만들어진 pth파일>

 

 

이제 커스텀 데이터 학습을 통해 만들어지 가중치 모델을 가지고 평가해 보겠습니다.

저는 만번 학습한 모델을 가지고 평가해 보겠습니다.

python eval.py --trained_model=weights/yolact_plus_resnet50_cig_basket_399_10000.pth --config=yolact_resnet50_cig_basket_config --score_threshold=0.3 --top_k=15 --image=data/ball2.jpg

--trained_model=<커스텀 학습된 가중치 모델>

--config=<환경 설정한 파일>

--score_threshold=<임계치 설정>

--image=<디텍팅할 이미지 경로및 파일>

 

실행 결과

농구공 학습후 다른 농구공 사진을 인식한 결과