[Pose Estimation] COCO Dataset Annotation Tool
COCO Keypoint 데이터 세트를 만들기 위해 아래와 같은 툴을 사용 할 수 있다.
- Supervisely
- Visipedia
1. Supervisely
회원 가입 후, 프로젝트를 생성하여 사진을 불러와 주석을 달 수 있다.
먼저 박스를 쳤을 때 포즈 모델이 어떻게 구성될건지 정의해주는 작업이 필요하다.
웹 기반으로 되어있으며, 포즈모델 이외에도 다양한 라벨링 작업을 수행 할 수 있다.
깃허브
https://github.com/supervisely/supervisely
supervisely/supervisely
AI for everyone! :tada: Neural networks, tools and a library we use in Supervisely - supervisely/supervisely
github.com
자세한 사용법은 아래 링크에 소개되어있다.
https://docs.supervise.ly/annotation/images/
Images - Supervisely
Images Images panel shows all images of current dataset. Overview Total number of images in dataset Filter of images Preview picture File name Number of annotations Last modification date (i.e. modification of annotation) Attach new tag to an image Downloa
docs.supervise.ly
2. Visipedia
이건 이미 주석이 달려있는 COCO 데이터세트의 json 을 불러와서 Annotation 을 수정하는 툴이다.
json에 있는 url 로부터 파일을 불러오고, Mongo DB를 연결하여 수정된 주석들을 반영하여 json을 생성한다.
- Load and visualize a COCO style dataset
- Edit Class Labels
- Edit Bounding Boxes
- Edit Keypoints
- Export a COCO style dataet
- Bounding Box Tasks for Amazon Mechanical Turk
새로운 이미지를 COCO 데이터세트에 포함하고 싶다면,
대충 포즈 모델을 하나 돌려서 그 새로운 이미지에 대한 키포인트를 얻어서
Visipedia 를 이용하여 조금씩 수정하여 Annotation 하는 것도 방법이 되겠다.
COCO 데이터 세트에서 Pose Model 생성을 위한 Annotation 목록은 다음과 같다.
- image_id
- file_name
- keypoints
- is_crowd
- num_keypoint
- bbox
여기서 중요한 것은 keypoints 가 (17 x 3) 으로 되어있는데, x, y, v 를 의미하며, 특히나 v 의 의미는 다음과 같다.
v = 0 : not labeled (x = y = 0)
v = 1 : labeled but not visible
v = 2 : labeled and visible
사용법은 깃허브를 참조하도록 한다.
깃허브
https://github.com/visipedia/annotation_tools
visipedia/annotation_tools
Visipedia Annotation Tools. Contribute to visipedia/annotation_tools development by creating an account on GitHub.
github.com
간략히 설명하자면
몽고디비를 설치하고, 실행한 뒤에 위 깃허브 소스를 받아 디비와 연결하고
json 파일을 통해 이미지 및 키포인트 주석 정보들을 로드하고 실행하여 웹에서 수정하는 것이다.
말이 길었네.
아래와 같다.
Visipedia 사용법
1. 우분투에서 몽고 디비 설치
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
Install MongoDB Community Edition on Ubuntu — MongoDB Manual
docs.mongodb.com
1-1. 몽고 디비 파일 설치
$ wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
1-2. 우분투 16.04 인 경우 아래와 같이 몽고 디비를 위한 list file 생성
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
1-3. 업데이트
$ sudo apt-get update
1-4, 몽고 디비 설치
$ sudo apt-get install -y mongodb-enterprise
1-5. 필요한 패키지 설치
$ sudo apt-get install libcurl3 libgssapi-krb5-2 libkrb5-dbg libldap-2.4-2 libpcap0.8 libsasl2-2 snmp openssl
몽고 디비 설치 완료 !
그 다음 반드시 먼저 몽고 디비를 실행해주고, Annotation Tool 을 설치하여 실행한다.
2. 몽고 디비 실행
$ sudo service mongod start
3. 소스 다운로드
$ git clone https://github.com/visipedia/annotation_tools.git
$ cd annotation_tools
3-1. 필요 패키지 설치
$ pip install -r requirements.txt
4. 실행
$ python run.py --port 8008
실행하면 아래와 같이 에러가 뜨는 경우 몽고 디비를 실행하지 않아서 생기는 에러이다.
$ python run.py --port 8008
* Serving Flask app "annotation_tools.annotation_tools" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:8008/ (Press CTRL+C to quit)
127.0.0.1 - - [21/Aug/2019 14:42:42] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 14:45:03] "GET /edit_image HTTP/1.1" 404 -
127.0.0.1 - - [21/Aug/2019 14:45:03] "GET /favicon.ico HTTP/1.1" 404 -
[2019-08-21 14:45:19,505] ERROR in app: Exception on /edit_image/100238 [GET]
Traceback (most recent call last):
File "/home/seohee/.local/lib/python3.5/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/home/seohee/.local/lib/python3.5/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/seohee/.local/lib/python3.5/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/seohee/.local/lib/python3.5/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/seohee/.local/lib/python3.5/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/seohee/.local/lib/python3.5/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/seohee/docker/annotation_tools/annotation_tools/annotation_tools.py", line 46, in edit_image
image = mongo.db.image.find_one_or_404({'id' : image_id})
File "/home/seohee/.local/lib/python3.5/site-packages/flask_pymongo/wrappers.py", line 114, in find_one_or_404
found = self.find_one(*args, **kwargs)
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/collection.py", line 1269, in find_one
for result in cursor.limit(-1):
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/cursor.py", line 1225, in next
if len(self.__data) or self._refresh():
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/cursor.py", line 1117, in _refresh
self.__session = self.__collection.database.client._ensure_session()
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/mongo_client.py", line 1598, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/mongo_client.py", line 1551, in __start_session
server_session = self._get_server_session()
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/mongo_client.py", line 1584, in _get_server_session
return self._topology.get_server_session()
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/topology.py", line 429, in get_server_session
None)
File "/home/seohee/.local/lib/python3.5/site-packages/pymongo/topology.py", line 200, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
제대로 실행할 경우 다음과 같이 뜬다.
$ python run.py --port 8008
* Serving Flask app "annotation_tools.annotation_tools" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:8008/ (Press CTRL+C to quit)
127.0.0.1 - - [21/Aug/2019 15:00:39] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:00:59] "GET /edit_image/100238 HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:00:59] "GET /static/css/leaflet/leaflet.css HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:00:59] "GET /static/css/leaflet.draw/leaflet.draw.css HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:01:34] "POST /annotations/save HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:01:53] "GET /edit_task/?start=0&end=100 HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:01:53] "GET /edit_image/1000 HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:01:59] "POST /annotations/save HTTP/1.1" 200 -
127.0.0.1 - - [21/Aug/2019 15:01:59] "GET /edit_image/100238 HTTP/1.1" 200 -
...
5. (COCO 데이터 세트 주석 파일이 있다면 생략) COCO 데이터 세트 주석 다운로드
$ cd ~/Downloads
$ wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip
$ unzip annotations_trainval2017.zip
6. 디비와 데이터 세트 연결
$ python -m annotation_tools.db_dataset_utils --action load \
--dataset ~/Downloads/annotations/person_keypoints_val2017.json \
--normalize
그럼 다음과 같이 연결된다. val2017 데이터 세트를 열었기 때문에 5000장만 열었다.
Loading Dataset
Inserting 1 categories
WARNING: Adding keypoint styles to category: person
Successfully inserted 1 categories
Inserting 5000 images
Successfully inserted 5000 images
Inserting 11004 annotations
Successfully inserted 11004 annotations
Inserting 8 licenses
Successfully inserted 8 licenses
7. 웹에서 확인
COCO 이미지 번호 100238 에 대한 사진 확인
http://localhost:8008/edit_image/100238
0부터 100까지의 사진 확인
http://localhost:8008/edit_task/?start=0&end=100
카테고리 ID = 1 에 대한 사진 확인 (사람만 확인)
http://localhost:8008/edit_task/?category_id=1 to edit all images that have annotations whose category_id=1
위와 같이 주석을 수정할 수 있고, 존재하는 사진에 주석을 새로 추가 할 수도 있다.
연결을 종료하고 싶다면, 디비와의 연결을 해제하고 몽고 디비 실행했던 것을 종료한다.
8. 디비 연결 해제
$ python -m annotation_tools.db_dataset_utils --action drop
해제가 정상적으로 된 경우 다음과 같이 뜬다.
Dropping the dataset collections.
9. 몽고 디비 종료
$ sudo service mongod stop
9-1. (필요시) 몽고 디비 재시작
$ sudo service mongod restart
'AI Research Topic > Human Pose Estimation' 카테고리의 다른 글
[Pose Estimation] 단일 이미지에서 3차원 자세를 추정하는 방법 및 문제점 (0) | 2020.06.02 |
---|---|
[Pose Estimation] COCO dataset 을 이용한 자세 추정 결과 (0) | 2019.09.17 |
[Pose Estimation] Through-Wall Human Pose Estimation Using Radio Signals (0) | 2019.08.19 |
[Pose Estimation] wrnchAI vs OpenPose (0) | 2019.08.03 |
[Pose Estimation] PoseTrack Dataset (2) | 2019.08.03 |