보통, coco dataset은 아래 링크에서 다운로드가 가능하다.
coco dataset download : https://cocodataset.org/#download
근데 오랜만에 다운로드 하러 들어갔더니 아무리 데이터셋을 클릭해도 다운로드가 되지 않았다.
그래서 wget 명령어를 사용해 바로 원하는 디렉토리에 다운을 받고자 했지만... 이전에 사용했던 다운로드 경로가 변경되었는지 다운로드가 정상적으로 되지 않았다.
변경된 다운로드 경로를 열심히 구글링 해서 찾아냈고 같은 삽질을 반복하지 않기 위해 포스팅으로 남겨두게 되었다.
◾ COCO Datastet wget으로 Download하기
다운로드 후 압축 파일을 풀 디렉토리로 이동한 후 아래 명령어들을 입력하여 coco dataset을 다운로드 받으면 된다.
# images
wget http://images.cocodataset.org/zips/train2017.zip # train dataset
wget http://images.cocodataset.org/zips/val2017.zip # validation dataset
wget http://images.cocodataset.org/zips/test2017.zip # test dataset
wget http://images.cocodataset.org/zips/unlabeled2017.zip
# annotations
wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip
wget http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip
wget http://images.cocodataset.org/annotations/image_info_test2017.zip
wget http://images.cocodataset.org/annotations/image_info_unlabeled2017.zip
위 경로들에서 이미지나 annotation 모두 train2017.zip 부분을 원하는 dataset으로 변경(ex. train2015)하여 다운로드를 진행하면 된다.
다운로드 후 unzip까지 하게 되면 아래와 같이 데이터셋이 구성되어 있는 것을 확인할 수 있다.
train 및 validation image set이 위와 같이 구성되며,
annotations_trainval2017.zip 파일을 다운받고 unzip을 하게 되면 위와 같이 annotation 파일들을 얻을 수 있다.
◾ COCO API 사용하기
이렇게 다운받은 coco dataset은 api를 사용하여 python에서 활용할 수 있다.
coco API : https://github.com/cocodataset/cocoapi
coco api를 사용하면 이미지를 시각화 하고 annotation 정보까지 시각화 할 수 있으며
해당 코드는 https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb 여기에서도 확인할 수 있다.
1. coco api 초기화 (python jupyter notebook 사용)
%matplotlib inline
from pycocotools.coco import COCO
import numpy as np
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (8.0, 10.0)
dataDir='..'
dataType='val2017'
# initialize COCO api for person keypoints annotations
annFile = '{}/annotations/person_keypoints_{}.json'.format(dataDir,dataType)
coco=COCO(annFile)
2. COCO categories and supercategories 출력 해 보기
cats = coco.loadCats(coco.getCatIds())
nms=[cat['name'] for cat in cats]
print('COCO categories: \n{}\n'.format(' '.join(nms)))
nms = set([cat['supercategory'] for cat in cats])
print('COCO supercategories: \n{}'.format(' '.join(nms)))
3. 이미지 시각화
# get all images containing given categories, select one at random
catIds = coco.getCatIds(catNms=['person','dog','skateboard']);
imgIds = coco.getImgIds(catIds=catIds );
imgIds = coco.getImgIds(imgIds = [324158])
img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]
# load and display image
# I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))
# use url to load image
I = io.imread(img['coco_url'])
plt.axis('off')
plt.imshow(I)
plt.show()
> output
4. annotation 시각화
# load and display keypoints annotations
plt.imshow(I); plt.axis('off')
ax = plt.gca()
annIds = coco_kps.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco_kps.loadAnns(annIds)
coco_kps.showAnns(anns)
> output
나는 keypoint dataset을 다운받아 사용하고자 했기에 keypoint annotation을 시각화 해 보았다.