Lableme로 Coco Dataset과 VOC Dataset 만들기

공대생의 팁 2023. 2. 18. 21:12

 

 고성능의 인공지능을 만들기 위한 가장 중요한 작업 중 하나는 최대한 많은 양질의 데이터를 확보하는 것입니다. 상상을 뛰어넘는 인공지능의 놀라운 발전을 보았을 때 마치 AI를 연구하는 사람들이 고상한 기술을 사용하여 인공지능을 만드는 것처럼 보이지만 안타깝게도 학습 데이터가 확보되지 않은 인공지능은 고성능을 발휘하기 어렵습니다.

 

 그렇다고 해서 데이터만 잔뜩 확보했다고 하여 고성능의 인공지능 기술이 뚝딱 하고 만들어지는 것은 결코 아닙니다. 확보된 데이터를 인공지능이 학습할 수 있도록 전처리 하는 과정이 필요한데 주어진 사진에서 학습하고자 하는 물체의 이름과 위치 등을 표시하여 인공지능이 이를 학습할 수 있도록 만들어주어야 합니다. 흔히 이 전처리 과정을 '레이블링(Labeling)이라고 합니다.

 

사진의 물체 정보 분류(왼쪽), 사진의 물체 위치를 네모상자로 표시(중간), 사진의 물체 위치를 직접 표시(오른쪽)

 

 산업 분야에서 인공지능의 활용 영역이 확대됨에 따라 수집된 데이터의 전처리를 전문으로 하는 기술에 대한 수요가 늘어났고, 이를 처리할 수 있는 성능 좋은 Labeling 기술들이 소개되고 있습니다. 단지 사진을 선택했을 뿐인데 사진 속 특성(Feature)을 추출하고 이에 맞는 Labeling 작업까지 자동으로 해주는 기술이 등장할 만큼 지금 이 순간에도 좋은 도구들이 소개되고 있습니다.

 

 하지만, 인공지능을 시범 도입하기 위해 고가의 Labeling tool을 구매하여 사용하는 것은 상당히 부담스러울 수 밖에 없습니다. 다행히도, 자신의 Field에 인공지능 적용 실용성 여부를 검토할 수 있는 데이터셋 전처리를 가능하게 해주는 무료 도구들이 오픈소스로 공개되어있습니다. 이번 포스팅에서는 지금 이 순간에도 무료로 공개되어 있으며, 누구나 쉽게 어떤 환경에서도 사용할 수 있는 LabelMe를 소개드리도록 하겠습니다.

LabelMe는 pip로 설치하여 바로 사용하실 수 있습니다.

 

$ pip install labelme pyqt5 pyside2

 

혹은 아래의 사이트를 통해 소스코드를 직접 설치하실 수 있습니다.

 

https://github.com/wkentaro/labelme

 

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

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

github.com

 

 labelme를 실행하면 상당히 직관적인 UI툴을 갖추고 있는 것을 보실 수 있습니다. 

 

 

 레이블링을 수행하고자 하는 이미지를 불러온 다음 마우스 오른쪽 버튼을 클릭하여 'Create Polygons'를 클릭하여 이미지의 객체 주변에 점을 찍어가며 객체를 표시해줍니다.

 

 

 주변에 점을 찍다 한 바퀴 정도 돌게되여 처음 찍은 점으로 돌아오게 되었을 때 1개의 폴리곤이 완성되며 이 때 표시한 객체의 속성을 입력해줍니다.

 

 

 Labeling이 완료되면 위와 같이 작업이 완료된 모습을 확인하실 수 있습니다. 혹시 표시하고자 하는 객체를 네모 모양으로 하고싶으신 분은 'Create Rectangle'을 선택하여 표시할 수 도 있습니다.

 

 

 Object Detection을 수행하는 방법과 같이 Rectangle로 객체를 감싼 다음 Label을 붙여주면 됩니다.

 

 

 지금까지 진행한 작업들을 확인해봅니다. LabelMe로 작업하였던 내용들이 이미지 폴더에 함께 들어있는 것을 확인하실 수 있습니다.

 

 

 

Pascal VOC 방식의 Dataset 만들기

 

  지금부터 LabelMe로 만든 Label 정보들을 인공지능이 학습할 수 있도록 전처리과정을 통해 Dataset을 만드는 과정을 설명드리도록 하겠습니다. 데이터를 학습할 때 보통 COCO 와 Pascal VOC 방식의 Dataset이 주로 사용되고 있습니다. LabelMe 저자는 LabelMe로 Label을 적용한 정보를 COCO 혹은 Pascal VOC로 변환해주는 소스코드를 제공하고 있습니다. 아래 링크를 통해 다운로드 받으실 수 있습니다.

 

https://github.com/wkentaro/labelme/tree/main/examples/instance_segmentation

 

 

1. Pascal VOC로 변환(labelme2voc.py)

 

 먼저 자신이 Label한 클래스의 명단을 labels.txt 파일로 아래와 같이 작성해주세요. 저의 경우 객체가 고양이 단 하나 뿐이므로 classcat 하나입니다.

1
2
3
__ignore__
_background_
cat
cs

 

 다음으로 lableme2voc.py를 실행하여 이미지와 Label정보가 담긴 폴더의 내용으로 VOC 데이터셋을 생성합니다.

 

$ python labelme2voc.py '이미지와Label정보가 담긴 폴더명' 'VOC데이터셋 폴더명' --labels labels.txt

 

해당 명령어를 수행하면 아래와 같이 폴더들이 생성되는 것을 확인하실 수 있습니다.

 

 

 

 SegmentationObjectVisualization 폴더의 내용을 보시면 아래와 같이 Label이 잘 되어있는 것을 확인하실 수  있습니다.

 

 

2. COCO로 변환(labelme2coco.py)

 

 다음으로 Coco Dataset으로 변환하는 방법을 살펴보겠습니다. 위에서 VOC Dataset을 만들때 사용하였던 label.txt에 자신이 만든 Label의 클래스를 적어주신 다음 labelme2coco.py를 사용하여 다음과 같이 실행해줍니다.

 

$ python labelme2voc.py '이미지와Label정보가 담긴 폴더명' 'VOC데이터셋 폴더명' --labels labels.txt

 

 위 명령어를 실행하면 COCO 양식의 데이터셋이 생성된 것을 확인하실 수 있습니다.

 

 

Visualization 폴더 내용을 보면 Label이 적용된 것을 확인하실 수 있습니다.

 

 

 

300x250

영상 및 이미지 인공지능 비전 알고리즘 오픈소스 - MMCV

공대생의 팁 2023. 1. 27. 00:18

 

2022년 이미지 창작 알고리즘인 Dalle-2의 등장은 학계를 너머 일반인들에게도 상당히 뜨거운 기술이었습니다. 단지 비슷한 사진을 생성하는 GAN의 한계를 뛰어넘어 오직 인간의 창의력으로만 가능할 것만 같았던 창작의 영역까지 인공지능이 정복했다는 것은 인공지능의 기술이 어디까지 발전하였는지 심지어 사람의 한계를 뛰어넘었는지 확인할 수 있던 순간이었습니다. 반면, 오직 인간만의 영역이라 생각했던 미술 분야 마저 인공지능이 정복하지는 않을까 우려하는 분위기도 보입니다.

 

이토록 AI의 발전속도는 다른 분야와는 비교할 수 없을 정도로 빠르게 변화하고 있는데다 불과 몇 달 만에 더 좋은 성능의 알고리즘이 등장하는 것은 AI학계에서는 일상이 되었습니다. 그러다보니 종종 좋은 아이디어를 가진 알고리즘도 등장하였지만, 빠른 변화 속에 묻혀버린 경우도 없지 않아 있습니다.


이번에 소개드리고자 하는 MMCV는 흔히 MMDetection라는 이름의 알고리즘으로 사람들에게 알려져있으며 지금까지 선보인 Vision 인공지능 알고리즘들을 모아서 단 하나의 프로젝트로 여러 종류의 모델을 사용할 수 있게 해줍니다.

 사실 이렇게 여러 종류의 알고리즘들을 종합하여 활용할 수 있게 하는 프로젝트는 메타(페이스북) AI연구소에서 만든 Detectron의 사례가 있습니다. Detectron 또한 MMCV처럼 모든 종류의 알고리즘을 하나의 프로젝트로 사용할 수 있다는 장점이 있으나 Detectron이 Linux 기반에서 만들어져 Windows에서 사용하기 위해서는 일부 코드를 손봐야 하는 불편함이 있었습니다. 하지만 MMCV는 Windows는 물론 Linux, MacOS 등 어떠한 환경을 가리지 않고 사용할 수 있도록 만든 점이 MMCV의 큰 장점이라 할 수 있습니다.

https://github.com/open-mmlab

 

 MMCV는홍콩중문대학(The Chinese University of Hong Kong) 멀티미디어 연구실(MMLab)에서 박사과정이었던 카이첸의 주도로 개발되었으며, 2018년 MMDetection과 함께 공개되었습니다. 현재 그는 홍콩중문대학을 졸업하여 상하이 AI Laboratory에서 일하고 있으며, 그가 만든 MMCV 프로젝트는 OpenMMLab의 맴버로서 지금까지 전세계의 인공지능 개발자들이 사용하고 있습니다.


https://chenkai.site/

 

Kai Chen

Kai Chen is currently a Research Scientist & PI at Shanghai AI Laboratory. He is leading the OpenMMLab team, which targets at developing state-of-the-art computer vision algorithms for research and industrial applications, as well as building influential o

chenkai.site


MMCV 설치

 

 MMCV를 설치하기에 앞서 자신의 개발 환경에서 Pytorch를 설치한 다음 MMCV를 설치합니다. 자신의 환경에 적합한 MMCV 환경을 구축해주는 Openmim을 설치합니다.

 

$ pip install openmim

 

자신이 설치하고자 하는 MMCV의 버전이 1.x일 경우 mmcv-full을 설치합니다.

 

 $ mim install mmcv-full

 

 만약 자신이 설치하고자 하는 MMCV의 버전이 2.x 이상일 경우 mmcv를 설치해주세요.

 

$ mim install mmcv

 

Python을 실행하여 mmcv가 잘 설치되었는지 확인합니다.

 

import mmcv
print(mmcv.__version__)

 

 축하합니다! 지금부터 여러분은 MMCV를 사용할 수 있게 되었습니다.

 

Config

 

 MMCV을 원하는 목적에 맞게 사용하기 위해서는 MMCV 라이브러리에서 제공하는 Config의 구조를 이해하는 것이 매우 중요합니다.

 MMCV의 Config는 자신이 설계하고자 하는 모델을 직접 설정할 수 있게 해주는 설계도라 할 수 있습니다. MMCV의 라이브러리에서 직접 설정한 기존 모델들은 모두 Config파일로 제공되며 자신이 원하는 모델의 Config 파일을 원본대로 학습할 수도 있고, 자신이 원하는 성능이 구현될 수 있도록 Fine tuning하여 사용할 수도 있습니다.

 

 Config의 기초 원리를 자세하게 정리되어 있는 포스팅이 있어 아래의 링크를 통해 학습하실 수 있습니다.

 

https://better-tomorrow.tistory.com/entry/MMCV-%EC%9D%98-Config

 

MMCV 의 Config

# G.py _base_ = ['./base.py'] item = dict(a = {{ _base_.item1 }}, b = {{ _base_.item2.item3 }}) https://mmcv.readthedocs.io/en/latest/understand_mmcv/config.html Config — mmcv 1.3.16 documentation Config Config class is used for manipulating config and c

better-tomorrow.tistory.com

 

 MMDetection에 설정된 모델들은 config 폴더에 있으며 자신이 원하는 모델의 config를 찾아서 사용하면 됩니다. 아래의 코드는 Mask R-CNN의 config 파일 중 하나입니다.

 

mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py

1
2
3
4
5
_base_ = [
    '../_base_/models/mask_rcnn_r50_fpn.py',
    '../_base_/datasets/coco_instance.py',
    '../_base_/schedules/schedule_1x.py''../_base_/default_runtime.py'
]
cs

 

 config 파일의 소스코드를 확인해보면 _base_를 통해 config 설정들을 상속하고 있는 것을 확인하실 수 있습니다. 각 소스코드를 간단히 설명드리자면

 

../_base_/models/mask_rcnn_r50_fpn.py

학습하고자 하는 모델의 구조를 나타냅니다.

 

../_base_/datasets/coco_instance.py

학습하고자 하는 데이터셋을 설정합니다.

 

../_base_/schedules/schedule_1x.py

optimizer, epoch 등의 학습 정책을 설정합니다.

 

../_base_/default_runtime.py

학습 방식(Single, Multiple)등을 설정합니다.

 

 지금까지 MMCV에 대해 기본적인 내용들을 설명드렸습니다. MMlab에서 공개중인 MMDetection과 MMSegmentation등의 라이브러리를 사용하여 다양한 인공지능 모델들을 체험해보시길 바랍니다!

300x250

웹사이트(브금저장소)에서 재생되는 배경음악을 다운로드 하는 방법

공대생의 팁 2023. 1. 24. 13:26

 

 멜론, 유튜브뮤직 등 요즘은 음원 스트리밍 서비스들이 워낙 많아 인터넷 초창기 시절처럼 불법으로 mp3를 다운로드 받을 필요 없이 월 구독비용만 지불하면 인터넷이 되는 어느곳이든지 음악을 들을 수 있는 세상을 살고 있습니다.

 

 그렇지만 종종 인터넷이 되지 않는 기기와 같이 스트리밍 서비스를 사용할 수 없는 환경에서는 부득이하게 음원을 mp3로 변환해서 사용해야 하는 경우가 있습니다. y2mate와 같이 유튜브 영상에서 음원을 추출해주는 서비스가 있기에 음원을 확보하는 것은 어렵지만은 않습니다.

 

 음원파일을 구할 수 있는 사이트 중 하나였던 브금저장소(BGM Store)에서도 과거에는 다운로드를 할 수 있었으나 최근에는 회원 외에는 다운로드가 제한된 것을 확인할 수 있습니다.

 

 

 Chrome(Microsoft Edge) 웹브라우저에서 자신이 확보하고 싶은 음원 페이지에 접속 하신 후 해당 음원의 재생 버튼을 클릭하신 다음 F12 버튼을 클릭합니다.

 아래와 같은 설정 창이 나타나면 점 세개(…) 버튼을 클릭하신 다음 도크 사이드(별도의 창으로 도킹 해제)를 설정하여 넓은 화면으로 설정창을 변경해줍니다.

 

 

 넓어진 도구 창에서 '응용 프로그램' 탭 선택 후 '프레임→top→미디어 ' 메뉴를 탐색하시면 재생중인 음원의 mp3 파일이 있는 것을 확인하실 수 있습니다.

 

 

 미디어 메뉴에 있는 mp3 파일 부분을 더블클릭하면 웹브라우저에서 mp3 파일의 다운로드가 시작됩니다.

 

300x250