[Pose Estimation] COCO Dataset Annotation Tool
COCO Keypoint 데이터 세트를 만들기 위해 아래와 같은 툴을 사용 할 수 있다.
- Supervisely
- Visipedia
1. Supervisely
회원 가입 후, 프로젝트를 생성하여 사진을 불러와 주석을 달 수 있다.
먼저 박스를 쳤을 때 포즈 모델이 어떻게 구성될건지 정의해주는 작업이 필요하다.
웹 기반으로 되어있으며, 포즈모델 이외에도 다양한 라벨링 작업을 수행 할 수 있다.
깃허브
https://github.com/supervisely/supervisely
자세한 사용법은 아래 링크에 소개되어있다.
https://docs.supervise.ly/annotation/images/
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
간략히 설명하자면
몽고디비를 설치하고, 실행한 뒤에 위 깃허브 소스를 받아 디비와 연결하고
json 파일을 통해 이미지 및 키포인트 주석 정보들을 로드하고 실행하여 웹에서 수정하는 것이다.
말이 길었네.
아래와 같다.
Visipedia 사용법
1. 우분투에서 몽고 디비 설치
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
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 |