Path: blob/master/site/ko/datasets/add_dataset.md
25115 views
์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ์ธํธ ์์ฑํ๊ธฐ
์ด ๊ฐ์ด๋์ ๋ฐ๋ผ ์ ๋ฐ์ดํฐ์ธํธ๋ฅผ ์์ฑํ์ธ์(TFDS ๋๋ ์์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ ์ด์ฉ).
์ํ๋ ๋ฐ์ดํฐ์ธํธ๊ฐ ์ด๋ฏธ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ฐ์ดํฐ์ธํธ ๋ชฉ๋ก์ ํ์ธํ์ธ์.
TL;DR
์ ๋ฐ์ดํฐ์ธํธ๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ TFDS CLI๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
tfds.load('my_dataset')
์ ํจ๊ป ์ ๋ฐ์ดํฐ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
tfds.load
๊ฐ~/tensorflow_datasets/my_dataset/
์์ ์์ฑ๋(์:tfds build
๋ฅผ ํตํด) ๋ฐ์ดํฐ์ธํธ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ๋ก๋ํฉ๋๋ค.๋๋,
my.project.datasets.my_dataset
๋ฅผ ๋ช ์์ ์ผ๋ก ๊ฐ์ ธ์ ๋ฐ์ดํฐ์ธํธ๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค.
๊ฐ์
๋ฐ์ดํฐ์ธํธ๋ ๋ชจ๋ ์ข ๋ฅ์ ํ์์ผ๋ก ๋ชจ๋ ์ฅ์์ ๋ฐฐํฌ๋๋ฉฐ, ํญ์ ๋จธ์ ๋ฌ๋ ํ์ดํ๋ผ์ธ์ ๊ณต๊ธํ ์ ์๋ ํ์์ผ๋ก ์ ์ฅ๋๋ ๊ฒ์ ์๋๋๋ค. TFDS๋ฅผ ์ ๋ ฅํ์ธ์.
TFDS๋ ์ด๋ฌํ ๋ฐ์ดํฐ์ธํธ๋ฅผ ํ์ค ํ์(์ธ๋ถ ๋ฐ์ดํฐ -> ์ง๋ ฌํ๋ ํ์ผ)์ผ๋ก ์ฒ๋ฆฌํ ๋ค์ ๋จธ์ ๋ฌ๋ ํ์ดํ๋ผ์ธ(์ง๋ ฌํ๋ ํ์ผ -> tf.data.Dataset
)์ผ๋ก ๋ก๋ํ ์ ์์ต๋๋ค. ์ง๋ ฌํ๋ ํ ๋ฒ๋ง ์ํ๋ฉ๋๋ค. ์ดํ ์ก์ธ์ค ๋๋ ์ด๋ฌํ ์ฌ์ ์ฒ๋ฆฌ๋ ํ์ผ์์ ์ง์ ์ฝ์ต๋๋ค.
๋๋ถ๋ถ์ ์ ์ฒ๋ฆฌ๋ ์๋์ผ๋ก ์ํ๋ฉ๋๋ค. ๊ฐ ๋ฐ์ดํฐ์ธํธ๋ ๋ค์์ ์ง์ ํ๋ tfds.core.DatasetBuilder
์ ์๋ธ ํด๋์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
๋ฐ์ดํฐ์ ์ถ์ฒ(์: URL)
๋ฐ์ดํฐ์ธํธ์ ๋ชจ์ต(์ฆ, ํน์ฑ)
๋ฐ์ดํฐ ๋ถํ ๋ฐฉ๋ฒ(์:
TRAIN
๋ฐTEST
)๋ฐ์ดํฐ์ธํธ์ ๊ฐ๋ณ ์
๋ฐ์ดํฐ์ธํธ ์์ฑํ๊ธฐ
๊ธฐ๋ณธ ํ
ํ๋ฆฟ: tfds new
TFDS CLI๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ํ ํ๋ฆฟ Python ํ์ผ์ ์์ฑํฉ๋๋ค.
์ด ๋ช
๋ น์ผ๋ก ๋ค์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๋ก์ด my_dataset/
๊ฐ ์์ฑ๋ฉ๋๋ค.
์ฌ๊ธฐ์์ TODO(my_dataset)
๋ฅผ ๊ฒ์ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์์ ํฉ๋๋ค.
๋ฐ์ดํฐ์ธํธ ์์
๋ชจ๋ ๋ฐ์ดํฐ์ธํธ๋ ๋๋ถ๋ถ์ ์์ฉ๊ตฌ๋ฅผ ๊ด๋ฆฌํ๋ tfds.core.DatasetBuilder
์ ์๋ธ ํด๋์ค๋ก ๊ตฌํ๋ฉ๋๋ค. ์ด๋ ๋ค์์ ์ง์ํฉ๋๋ค.
๋จ์ผ ๋จธ์ ์์ ์์ฑํ ์ ์๋ ์์/์ค๊ฐ ํฌ๊ธฐ์ ๋ฐ์ดํฐ์ธํธ(์ด ํํ ๋ฆฌ์ผ)
๋ถ์ฐ ์์ฑ์ด ํ์ํ ๋งค์ฐ ํฐ ๋ฐ์ดํฐ์ธํธ(Apache Beam์ ์ฌ์ฉํ๋ฉฐ, ๋ฐฉ๋ํ ๋ฐ์ดํฐ์ธํธ ๊ฐ์ด๋ ์ฐธ์กฐ)
๋ค์์ tfds.core.GeneratorBasedBuilder
๋ฅผ ๋ฐํ์ผ๋ก ํ๋ ๋ฐ์ดํฐ์ธํธ ๋น๋์ ์ต์ ์์์
๋๋ค.
์ผ๋ถ ํน์ ๋ฐ์ดํฐ ํ์์ ๊ฒฝ์ฐ, ๋๋ถ๋ถ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๋ฐ์ดํฐ์ธํธ ๋น๋๋ฅผ ์ ๊ณตํด ๋๋ฆฝ๋๋ค.
๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ํ 3๊ฐ์ง ์ถ์ ๋ฉ์๋์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
_info
: ๋ฐ์ดํฐ์ธํธ ๋ฉํ๋ฐ์ดํฐ
_info
๋ ๋ฐ์ดํฐ์ธํธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ tfds.core.DatasetInfo
๋ฅผ ๋ฐํํฉ๋๋ค.
๋๋ถ๋ถ์ ํ๋๋ ์์ฒด์ ์ผ๋ก ๋ช ํํด์ผ ํฉ๋๋ค. ์ผ๋ถ ์ ๋ฐ๋:
features
: ๋ฐ์ดํฐ์ธํธ ๊ตฌ์กฐ, ํ์ ๋ฑ์ ์ง์ ํฉ๋๋ค. ๋ณต์กํ ๋ฐ์ดํฐ ํ์(์ค๋์ค, ๋น๋์ค, ์ค์ฒฉ ์ํ์ค ๋ฑ)์ ์ง์ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ ๋๋ ๊ธฐ๋ฅ ์ปค๋ฅํฐ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.disable_shuffling
: ๋ฐ์ดํฐ์ธํธ ์์ ์ ์ง ์น์ ์ ์ฐธ์กฐํ์ธ์.
BibText
CITATIONS.bib
ํ์ผ ์์ฑ:
๋ฐ์ดํฐ์ธํธ ์น์ฌ์ดํธ์์ ์ธ์ฉ ๋ช ๋ น์ด๋ฅผ ๊ฒ์ํฉ๋๋ค(BibTex ํ์์ผ๋ก ์ฌ์ฉ).
arXiv ๋ ผ๋ฌธ์ ๊ฒฝ์ฐ: ๋ ผ๋ฌธ์ ์ฐพ์ ์ค๋ฅธ์ชฝ์ ์๋
BibText
๋งํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.Google Scholar์์ ๋ ผ๋ฌธ์ ์ฐพ์ ์ ๋ชฉ ์๋์ ์๋ ํฐ๋ฐ์ดํ๋ฅผ ํด๋ฆญํ๊ณ ํ์ ์์
BibTeX
๋ฅผ ํด๋ฆญํฉ๋๋ค.๊ด๋ จ ๋ ผ๋ฌธ์ด ์์ผ๋ฉด(์๋ฅผ ๋ค์ด, ์น ์ฌ์ดํธ๋ง ์์), BibTeX ์จ๋ผ์ธ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ BibTeX ํญ๋ชฉ์ ์์ฑํ ์ ์์ต๋๋ค(๋๋กญ๋ค์ด ๋ฉ๋ด์
Online
ํญ๋ชฉ ์ ํ์ด ์์).
TAGS.txt
ํ์ผ ์
๋ฐ์ดํธ:
ํ์ฉ๋ ๋ชจ๋ ํ๊ทธ๋ ์์ฑ๋ ํ์ผ์ ๋ฏธ๋ฆฌ ์ฑ์์ง๋๋ค.
๋ฐ์ดํฐ์ธํธ์ ์ ์ฉ๋์ง ์๋ ๋ชจ๋ ํ๊ทธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ ํจํ ํ๊ทธ๋ tensorflow_datasets/core/valid_tags.txt์ ๋์ด๋ฉ๋๋ค.
ํด๋น ๋ชฉ๋ก์ ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด PR์ ๋ณด๋ด์ธ์.
๋ฐ์ดํฐ์ธํธ ์์ ์ ์ง
๋์ผํ ํด๋์ค์ ์ํ๋ ๋ ์ฝ๋๊ฐ ์ธ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ธํธ ์ ์ฒด์์ ํด๋์ค ๋ถํฌ๋ฅผ ๋ ๊ท ์ผํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ ์ฅํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ์ธํธ์ ๋ ์ฝ๋๊ฐ ์์
๋๋ค. _generate_examples
์์ ์ ๊ณตํ๋ ์์ฑ๋ ํค๋ก ๋ฐ์ดํฐ์ธํธ๊ฐ ๋ถ๋ฅ๋๋๋ก ์ง์ ํ๋ ค๋ฉด disable_shuffling
ํ๋๋ฅผ True
๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, False
๋ก ์ค์ ๋ฉ๋๋ค.
์ ํ์ ๋นํ์ฑํํ๋ฉด ์ค๋๋ฅผ ๋ ์ด์ ๋ณ๋ ฌ๋ก ์ฝ์ ์ ์์ผ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
_split_generators
: ๋ฐ์ดํฐ ๋ค์ด๋ก๋ ๋ฐ ๋ถํ
์์ค ๋ฐ์ดํฐ ๋ค์ด๋ก๋ ๋ฐ ์ถ์ถํ๊ธฐ
๋๋ถ๋ถ์ ๋ฐ์ดํฐ์ธํธ๋ ์น์์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค. ์ด ์์
์ _split_generators
์ tfds.download.DownloadManager
์
๋ ฅ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. dl_manager
๋ ๋ค์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
download
:http(s)://
,ftp(s)://
๋ฅผ ์ง์ํฉ๋๋ค.extract
: ํ์ฌ.zip
,.gz
๋ฐ.tar
ํ์ผ์ ์ง์ํฉ๋๋ค.download_and_extract
:dl_manager.extract(dl_manager.download(urls))
์ ๋์ผํฉ๋๋ค.
์ด๋ฌํ ๋ชจ๋ ๋ฉ์๋๋ pathlib.Path-like ๊ฐ์ฒด์ธ tfds.core.Path
(epath.Path
์ ๋ณ์นญ)๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๋ฌํ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ์์์ ์ค์ฒฉ ๊ตฌ์กฐ(list
, dict
)๋ฅผ ์ง์ํฉ๋๋ค.
์๋ ๋ค์ด๋ก๋ ๋ฐ ์ถ์ถ
์ผ๋ถ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค(์: ๋ก๊ทธ์ธ ํ์). ์ด ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์๋์ผ๋ก ์์ค ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํ์ฌ manual_dir/
(๊ธฐ๋ณธ์ ์ผ๋ก ~/tensorflow_datasets/downloads/manual/
)์ ๋์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด dl_manager.manual_dir
๋ฅผ ํตํด ํ์ผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
manual_dir
์์น๋ tfds build --manual_dir=
๋๋ tfds.download.DownloadConfig
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
์์นด์ด๋ธ ์ง์ ์ฝ๊ธฐ
dl_manager.iter_archive
๋ ์์ถ์ ํ์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ์์นด์ด๋ธ๋ฅผ ์ฝ์ต๋๋ค. ์ด๊ฒ์ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ ์ผ๋ถ ํ์ผ ์์คํ
์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
fobj
์๋ with open('rb') as fobj:
์ ๋์ผํ ๋ฉ์๋๊ฐ ์์ต๋๋ค(์: fobj.read()
).
๋ฐ์ดํฐ์ธํธ ๋ถํ ์ง์ ํ๊ธฐ
๋ฐ์ดํฐ์ธํธ์ ์ฌ์ ์ ์๋ ๋ถํ ์ด ์๋ ๊ฒฝ์ฐ(์: MNIST
์ train
๋ฐ test
๋ถํ ์ด ์์) ์ด๋ฅผ ์ ์งํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋จ์ผ all
๋ถํ ๋ง ์ง์ ํฉ๋๋ค. ์ฌ์ฉ์๋ ํ์ ๋ถํ API(์: split='train[80%:]'
)๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ํ ํ์ ๋ถํ ์ ๋์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ด๋, ์์ ์ธ๊ธํ all
์ ์ ์ธํ ๋ชจ๋ ์ํ๋ฒณ ๋ฌธ์์ด์ ๋ถํ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค.
_generate_examples
: ์์ ์์ฑ๊ธฐ
_generate_examples
๋ ์์ค ๋ฐ์ดํฐ์์ ๊ฐ ๋ถํ ์ ๋ํ ์์ ๋ฅผ ์์ฑํฉ๋๋ค.
์ด ๋ฉ์๋๋ ์ผ๋ฐ์ ์ผ๋ก ์์ค ๋ฐ์ดํฐ์ธํธ ์ํฐํฉํธ(์: CSV ํ์ผ)๋ฅผ ํ๋
ํ๊ณ (key, feature_dict)
ํํ์ ์ฐ์ถํฉ๋๋ค.
key
: ์์ ์๋ณ์.hash(key)
์ฌ์ฉํ์ฌ ์์ ๋ฅผ ๊ฒฐ์ ์ฑ ์๊ฒ ์ ํํ๊ฑฐ๋ ์ ํ์ด ๋นํ์ฑํ๋ ๊ฒฝ์ฐ ํค๋ณ๋ก ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค(๋ฐ์ดํฐ์ธํธ ์์ ์ ์ง ์น์ ์ฐธ์กฐ). ๋ค์๊ฐ ๊ฐ์์ผ ํฉ๋๋ค.๊ณ ์ ํจ: ๋ ์์ ๊ฐ ๋์ผํ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ฒฐ์ ์ฑ์ด ์์:
download_dir
,os.path.listdir
์์์ ์์กดํ์ง ์์์ผ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฒ ์์ฑํ๋ฉด ๋์ผํ ํค๊ฐ ์ฐ์ถ๋ฉ๋๋ค.๋น๊ต ๊ฐ๋ฅ: ์ ํ๋ง์ด ๋นํ์ฑํ๋ ๊ฒฝ์ฐ ํค๊ฐ ๋ฐ์ดํฐ์ธํธ๋ฅผ ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
feature_dict
: ์์ ๊ฐ์ ํฌํจํdict
๊ตฌ์กฐ๋
tfds.core.DatasetInfo
์ ์ ์๋features=
๊ตฌ์กฐ์ ์ผ์นํด์ผ ํฉ๋๋ค.๋ณต์กํ ๋ฐ์ดํฐ ํ์(์ด๋ฏธ์ง, ๋น๋์ค, ์ค๋์ค ๋ฑ)์ ์๋์ผ๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
๊ฐ ๊ธฐ๋ฅ์ ์ข ์ข ์ฌ๋ฌ ์ ๋ ฅ ์ ํ์ ํ์ฉํฉ๋๋ค(์: ๋น๋์ค๋
/path/to/vid.mp4
,np.array(shape=(l, h, w, c))
,List[paths]
,List[np.array(shape=(h, w, c)]
,List[img_bytes]
๋ฑ์ ์์ฉํจ).์์ธํ ๋ด์ฉ์ ๊ธฐ๋ฅ ์ปค๋ฅํฐ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ฒฝ๊ณ : ๋ฌธ์์ด ๋๋ ์ ์์์ ๋ถ์ธ ๊ฐ์ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ util ํจ์ tfds.core.utils.bool_utils.parse_bool
์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ฌธ ๋ถ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ์ธ์(์: bool("False") == True
).
ํ์ผ ์ก์ธ์ค ๋ฐ tf.io.gfile
ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์์คํ ์ ์ง์ํ๋ ค๋ฉด Python ๋ด์ฅ I/O ops๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์.
๋์ dl_manager
๋ Google Cloud Storage์ ์ง์ ํธํ๋๋ pathlib ์ ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
๋๋, ํ์ผ ์ฐ์ฐ์ ๋ด์ฅ๋ API ๋์ tf.io.gfile
API๋ฅผ ์ฌ์ฉํฉ๋๋ค.
open
->tf.io.gfile.GFile
os.rename
->tf.io.gfile.rename
...
tf.io.gfile
๋ณด๋ค๋ Pathlib์ด ์ ํธ๋ฉ๋๋ค(์ด๋ก ์ ๊ทผ๊ฑฐ ์ฐธ์กฐ).
์ถ๊ฐ ์ข ์์ฑ
์ผ๋ถ ๋ฐ์ดํฐ์ธํธ์๋ ์์ฑ ์ค์๋ง ์ถ๊ฐ Python ์ข
์์ฑ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด SVHN ๋ฐ์ดํฐ์ธํธ๋ scipy
๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
TFDS ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฐ์ดํฐ์ธํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, tfds.core.lazy_imports
๋ฅผ ์ฌ์ฉํ์ฌ tensorflow-datasets
ํจํค์ง๋ฅผ ์๊ฒ ์ ์งํ์ธ์. ์ฌ์ฉ์๋ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐ ์ข
์์ฑ์ ์ค์นํฉ๋๋ค.
lazy_imports
๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด:
setup.py
์์ ๋ฐ์ดํฐ์ธํธ์ ํญ๋ชฉ์DATASET_EXTRAS
์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์๋ฅผ ๋ค์ดpip install 'tensorflow-datasets[svhn]'
์ ์คํํ์ฌ ์ถ๊ฐ ์ข ์์ฑ์ ์ค์นํ ์ ์์ต๋๋ค.๊ฐ์ ธ์ค๊ธฐ์ ํญ๋ชฉ์
LazyImporter
์LazyImportsTest
์ ์ถ๊ฐํฉ๋๋ค.tfds.core.lazy_imports
๋ฅผ ์ฌ์ฉํ์ฌDatasetBuilder
์์ ์ข ์์ฑ(์๋ฅผ ๋ค์ด,tfds.core.lazy_imports.scipy
)์ ์ก์ธ์คํฉ๋๋ค.
์์๋ ๋ฐ์ดํฐ
์ผ๋ถ ๋ฐ์ดํฐ์ธํธ๋ ์๋ฒฝํ๊ฒ ์ ๋ฆฌ๋์ง ์์์ผ๋ฉฐ, ์ผ๋ถ ์์๋ ๋ฐ์ดํฐ(์: ์ด๋ฏธ์ง๋ JPEG ํ์ผ์ด์ง๋ง, ์ผ๋ถ๋ ์ ํจํ์ง ์์ JPEG์ผ ๋)๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ค ์์ ๋ ๊ฑด๋๋ฐ์ด์ผ ํ์ง๋ง, ๋ฐ์ดํฐ์ธํธ ์ค๋ช ์ ๋ช ๊ฐ์ ์์ ๊ฐ ์ญ์ ๋์์ผ๋ฉฐ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ์ง ๋ฉ๋ชจ๋ฅผ ๋จ๊ฒจ ์ฃผ์ธ์.
๋ฐ์ดํฐ์ธํธ ๊ตฌ์ฑ/๋ณํ(tfds.core.BuilderConfig)
์ผ๋ถ ๋ฐ์ดํฐ์ธํธ์๋ ๋ฐ์ดํฐ๊ฐ ์ฌ์ ์ฒ๋ฆฌ๋๊ณ ๋์คํฌ์ ๊ธฐ๋ก๋๋ ๋ฐฉ์์ ๋ํ ์ฌ๋ฌ ๊ฐ์ง ๋ณํ ๋๋ ์ต์
์ด ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, cycle_gan์๋ ๊ฐ์ฒด ์๋ณ๋ก ํ๋์ ๊ตฌ์ฑ์ด ์์ต๋๋ค(cycle_gan/horse2zebra
, cycle_gan/monet2photo
,...)
์ด๋ tfds.core.BuilderConfig
๋ฅผ ํตํด ์ํ๋ฉ๋๋ค.
์์ ์ ๊ตฌ์ฑ ๊ฐ์ฒด๋ฅผ
tfds.core.BuilderConfig
์ ์๋ธ ํด๋์ค๋ก ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด,MyDatasetConfig
์ ๊ฐ์ต๋๋ค.์ฐธ๊ณ : https://bugs.python.org/issue33129๋ก ์ธํด ๊ธฐ๋ณธ๊ฐ์ด ํ์ํฉ๋๋ค.
๋ฐ์ดํฐ์ธํธ๊ฐ ๋ ธ์ถํ๋
MyDatasetConfig
๋ฅผ ๋์ดํ๋MyDataset
์์BUILDER_CONFIGS = []
ํด๋์ค ๊ตฌ์ฑ์์ ์ ์ํฉ๋๋ค.์ฐธ๊ณ : ๋ฐ์ดํฐ ํด๋์ค ์์์ ๊ฐ๋ Pytype ๋ฒ๊ทธ๋ก ์ธํด
# pytype: disable=wrong-keyword-args
๊ฐ ํ์ํฉ๋๋ค.MyDataset
์self.builder_config
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์์ฑ์ ๊ตฌ์ฑํฉ๋๋ค(์:shape=self.builder_config.img_size
). ์ฌ๊ธฐ์๋_info()
์์ ์ฌ๋ฌ ๊ฐ์ ์ค์ ํ๊ฑฐ๋ ๋ค์ด๋ก๋ ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
์ฐธ๊ณ :
๊ฐ ๊ตฌ์ฑ์๋ ๊ณ ์ ํ ์ด๋ฆ์ด ์์ต๋๋ค. ๊ตฌ์ฑ์ ์ ๊ทํ๋ ์ด๋ฆ์
dataset_name/config_name
์ ๋๋ค(์:coco/2017
).์ง์ ๋์ง ์์ ๊ฒฝ์ฐ
BUILDER_CONFIGS
์ ์ฒซ ๋ฒ์งธ ๊ตฌ์ฑ์ด ์ฌ์ฉ๋ฉ๋๋ค(์:tfds.load('c4')
์ ๊ธฐ๋ณธ๊ฐ์c4/en
).
BuilderConfig
๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ธํธ์ ์๋ anli
๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฒ์
๋ฒ์ ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค.
"์ธ๋ถ" ์๋ณธ ๋ฐ์ดํฐ ๋ฒ์ : ์: COCO v2019, v2017,...
"๋ด๋ถ" TFDS ์ฝ๋ ๋ฒ์ : ์๋ฅผ ๋ค์ด
tfds.features.FeaturesDict
์ ๊ธฐ๋ฅ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ,_generate_examples
์ ๋ฒ๊ทธ ์์
๋ฐ์ดํฐ์ธํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด:
"์ธ๋ถ" ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ์ ๊ฒฝ์ฐ: ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ํน์ ์ฐ๋/๋ฒ์ ์ ๋์์ ์ก์ธ์คํ๊ธฐ๋ฅผ ์ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ฒ์ ๋น ํ๋์
tfds.core.BuilderConfig
(์:coco/2017
,coco/2019
) ๋๋ ๋ฒ์ ๋น ํ๋์ ํด๋์ค(์:Voc2007
,Voc2012
)๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค."๋ด๋ถ" ์ฝ๋ ์ ๋ฐ์ดํธ์ ๊ฒฝ์ฐ: ์ฌ์ฉ์๋ ์ต์ ๋ฒ์ ๋ง ๋ค์ด๋ก๋ํฉ๋๋ค. ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์๋งจํฑ ๋ฒ์ ๊ด๋ฆฌ์ ๋ฐ๋ผ
VERSION
ํด๋์ค ์์ฑ์ด ์ฆ๊ฐํฉ๋๋ค(์:1.0.0
์์VERSION = tfds.core.Version('2.0.0')
๋ก ์ฆ๊ฐ).
๋ฑ๋ก์ ์ํด ๊ฐ์ ธ์ค๊ธฐ ์ถ๊ฐ
๋ฐ์ดํฐ์ธํธ ๋ชจ๋์ ํ๋ก์ ํธ __init__
๋ก ๊ฐ์ ธ์ tfds.load
, tfds.builder
์ ์๋์ผ๋ก ๋ฑ๋ก๋๋๋ก ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
์๋ฅผ ๋ค์ด, tensorflow/datasets
์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ, ํด๋น ํ์ ๋๋ ํฐ๋ฆฌ์ __init__.py
์ ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค(์: image/__init__.py
.
์ผ๋ฐ์ ์ธ ๊ตฌํ ๋ฌธ์ ์ ๊ฒํ๊ธฐ
์ผ๋ฐ์ ์ธ ๊ตฌํ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ์ธ์.
๋ฐ์ดํฐ์ธํธ ํ ์คํธํ๊ธฐ
๋ค์ด๋ก๋ ๋ฐ ์ค๋น: tfds build
๋ฐ์ดํฐ์ธํธ๋ฅผ ์์ฑํ๋ ค๋ฉด my_dataset/
๋๋ ํฐ๋ฆฌ์์ tfds build
๋ฅผ ์คํํฉ๋๋ค.
๊ฐ๋ฐ์ ์ ์ฉํ ๋ช ๊ฐ์ง ํ๋๊ทธ:
--pdb
: ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋๋ฒ๊น ๋ชจ๋๋ก ๋ค์ด๊ฐ๋๋ค.--overwrite
: ๋ฐ์ดํฐ์ธํธ๊ฐ ์ด๋ฏธ ์์ฑ๋ ๊ฒฝ์ฐ ๊ธฐ์กด ํ์ผ์ ์ญ์ ํฉ๋๋ค.--max_examples_per_split
: ์ ์ฒด ๋ฐ์ดํฐ์ธํธ๊ฐ ์๋ ์ฒ์ X๊ฐ ์์ (๊ธฐ๋ณธ๊ฐ์ 1)๋ง ์์ฑํฉ๋๋ค.--register_checksums
: ๋ค์ด๋ก๋ํ URL์ ์ฒดํฌ์ฌ์ ๊ธฐ๋กํฉ๋๋ค. ๊ฐ๋ฐ ์ค์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํ๋๊ทธ์ ์ ์ฒด ๋ชฉ๋ก์ CLI ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฒดํฌ์ฌ
๊ฒฐ์ ์ฑ์ ๋ณด์ฅํ๊ณ ๋ฌธ์ํ๋ฅผ ๋๊ธฐ ์ํด ๋ฐ์ดํฐ์ธํธ์ ์ฒดํฌ์ฌ์ ๊ธฐ๋กํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ์ํด --register_checksums
๋ก ๋ฐ์ดํฐ์ธํธ๋ฅผ ์์ฑํฉ๋๋ค(์ด์ ์น์
์ฐธ์กฐ).
PyPI๋ฅผ ํตํด ๋ฐ์ดํฐ์ธํธ๋ฅผ ๋ฆด๋ฆฌ์คํ๋ ๊ฒฝ์ฐ checksums.tsv
ํ์ผ์ ๋ด๋ณด๋ด๋ ๊ฒ์ ์์ง ๋ง์ธ์(์: setup.py
์ package_data
์).
๋ฐ์ดํฐ์ธํธ ๋จ์ ํ ์คํธ
tfds.testing.DatasetBuilderTestCase
๋ ๋ฐ์ดํฐ์ธํธ๋ฅผ ์์ ํ ์คํํ๊ธฐ ์ํ ๊ธฐ๋ณธ TestCase
์
๋๋ค. ์ด ๋ "๋๋ฏธ ๋ฐ์ดํฐ"๋ฅผ ์์ค ๋ฐ์ดํฐ์ธํธ์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฐฉํ ํ
์คํธ ๋ฐ์ดํฐ๋ก ์ฌ์ฉํฉ๋๋ค.
ํ ์คํธ ๋ฐ์ดํฐ๋
my_dataset/dummy_data/
๋๋ ํ ๋ฆฌ์ ๋ฃ์ด์ผ ํ๋ฉฐ ๋ค์ด๋ก๋ ๋ฐ ์ถ์ถ๋ ์์ค ๋ฐ์ดํฐ์ธํธ ์ํฐํฉํธ๋ฅผ ๋ชจ๋ฐฉํด์ผ ํฉ๋๋ค. ์คํฌ๋ฆฝํธ(์์ ์คํฌ๋ฆฝํธ)๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ฐ์ดํฐ๋ฅผ ์๋ ๋๋ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.๋ฐ์ดํฐ์ธํธ๊ฐ ๊ฒน์น๋ฉด ํ ์คํธ๊ฐ ์คํจํ๋ฏ๋ก ํ ์คํธ ๋ฐ์ดํฐ ๋ถํ ์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํ ์คํธ ๋ฐ์ดํฐ์๋ ์ ์๊ถ์ด ์๋ ์๋ฃ๊ฐ ํฌํจ๋์ด์๋ ์ ๋ฉ๋๋ค. ์์ฌ์ค๋ฌ์ด ๊ฒฝ์ฐ, ์๋ ๋ฐ์ดํฐ์ธํธ์ ์๋ฃ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ง ๋ง์ธ์.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ์ธํธ๋ฅผ ํ ์คํธํฉ๋๋ค.
ํผ๋๋ฐฑ ๋ณด๋ด๊ธฐ
์ง์ํด์ ๋ฐ์ดํฐ์ธํธ ์์ฑ ์ํฌํ๋ก๋ฅผ ๊ฐ์ ํ๋ ค๊ณ ์๋ํ๊ณ ์์ง๋ง, ๋ฌธ์ ์ ๋ํด ์๊ณ ์๋ ๊ฒฝ์ฐ์๋ง ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ์ธํธ๋ฅผ ์์ฑํ๋ ๋์ ๊ฒช์ ๋ฌธ์ ๋ ์ค๋ฅ๋ ๋ฌด์์ ๋๊น? ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์์๋์, ํน์ ์ฒ์์ ์๋ํ์ง ์์ ๋ถ๋ถ์ด ์์๋์?
GitHub์ ํผ๋๋ฐฑ์ ๊ณต์ ํด ์ฃผ์๊ธธ ๋ฐ๋๋๋ค.