Open-Images Dataset에 필요로 하는 class가 있어서 다운로드를 받으려고 했는데 coco에 비해 정보가 많지 않아서 애를 먹었다..
Open-Images Dataset은 현재 V7까지 나와 있고 버전 별로 이미지 장수에 차이가 있다기 보다는 라벨링 종류가 다양해지거나 좀 더 정밀하게 라벨링이 되어 있다는 차이가 있다.
https://storage.googleapis.com/openimages/web/download_v7.html
V7 다운로드는 위 링크에서 할 수 있으며 지난 버전 역시 위 링크 상단에 있는 탭을 선택해서 다운로드 할 수 있다.
◼️ Annotation file Download
위 링크에서 "Download image labels~"를 클릭하면 annotation 파일을 다운로드 받을 수 있다.
이렇게 다운 받고자 하는 버전에서 3개의 엑셀 파일을 다운 받으면 해당 버전의 annotation을 기준으로 데이터셋을 다운로드 할 수 있다.
◼️ Download Tool code Clone
Open-Images Dataset을 다운받으려면 코드를 실행 해 줘야 한다.
https://github.com/EscVM/OIDv4_ToolKit?tab=readme-ov-file
위 깃허브 레포는 Open-Images Dataset V4를 다운로드 할 수 있는 코드이며 별도의 annotation 엑셀 파일을 다운받지 않으면 V4의 annotation 파일을 다운로드 한 후에 이미지와 txt 파일을 다운로드 한다.
나는 V7을 다운받고자 했으므로(별 차이는 없지만..ㅎ) 위 깃허브 레포를 clone 해 온 뒤에 OID 폴더를 생성 하고 그 안에 다시 csv_folder를 생성한 후 아까 다운 받은 csv 파일들을 넣어주었다.
OID 폴더를 생성하는 이유는 코드를 통해 데이터셋을 다운로드 하게 되면 OID 폴더가 생성 되고 그 안에 V4 annotation 파일과 dataset이 다운로드 되기 때문이다.
때문에 OID/csv_folder에 다운로드 받은 csv 파일들을 넣어주면 내가 원하는 버전의 dataset을 다운로드 할 수 있다.
특정 class의 데이터셋을 다운로드 받기 위해 아까 다운로드 받은 엑셀 파일에서 원하는 class의 이름이 어떻게 지정 되어 있는지 확인을 먼저 했다.
원하는 class의 이름을 확인했다면 이 class 이름을 argument로 입력 해 줘야 한다.
◼️ main.py 실행
clone 해 온 코드에서 main.py를 필요한 argument를 입력하여 실행 시켜 주면 된다.
python main.py downloader --classes Car --type_csv all
downloader 말고도 visualizer, ill_downloader 라는 모드가 있기 때문에 용도에 맞게 mode를 사용하면 된다.
--classes 에는 아까 확인했던 다운받고자 하는 특정 class의 이름을 넣어주면 된다.
--type_csv 에는 train. validation, test를 선택해서 넣거나 3개 다 다운 받으려면 all을 넣어주면 된다.
필요한 arguments를 입력 하고 main.py를 실행 해 주면 아래와 같이 download가 시작된다.
다운로드가 완료되면 아까 만들어 둔 OID 폴더 안에 Dataset 폴더가 생성 되면서 type에 맞게 데이터가 다운로드 된다.
(optional)◼️ Yolo format으로 label 파일 변경
이렇게 다운로드 받은 라벨 파일은 yolo format(x center, y center, width, height 값들이 정규화 되어 있는)이 아니기 때문에 필요 시 yolo format으로 변경 해 줘야 한다.
https://gist.github.com/EscVM/b6e5d60343c88f358742aa9e0de2cc3f
위 링크의 코드를 사용하면 되는데 class name이 두 단어 이상으로 되어 있다면 아래 부분에서 에러가 발생할 것이다.
171 line에서 txt 파일로부터 class name을 받아오는데 Human face 같은 두 단어 이상의 class는 에러가 나더라.. 단어 사이에 공백이 있기 때문에 이를 해결하기 위해 임시 방편으로 위 부분을 아래와 같이 본인이 다운받은 class 이름대로 수정을 해 주었다...
Line[:3] 부분을 본인이 다운 받은 class의 단어 수 만큼 슬라이싱을 해 주면 된다.
python doid_to_yolo.py convert --dataset all --class_name Car --copy True
--dataset 에 train. validation, test를 선택해서 넣거나 3개 다 변환하려면 all을 넣어주면 된다.
--class_name 에는 다운받은 class 이름을, --copy True를 해 주면 이미지도 같이 복사되어서 변환 된 라벨이 저장되는 경로와 동일한 경로로 저장된다.
--class_number 라는 argument도 있는데 default 값은 0이며 이 옵션은 라벨 데이터 변환 시 class id를 뭘로 할지 정할 수 있는 옵션이다.