์ต๊ทผ์ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ผ์ด ์๊ฒจ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ธ HuggingFace ๋ฅผ ์ฌ์ฉํด๋ดค๋ค.
HuggingFace์ transformers๋ ๋ค์ํ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ ์ ๊ณตํ๊ณ ์์ฒด ํ์ต/ํ๊ฐ API๋ฅผ ์ ๊ณตํ๋ค. ๋ํ ํ๊น ํ์ด์ค ๋ชจ๋ธ์ Pytorch, Tensorflow ํ์ต/ํ๊ฐ ์ฝ๋์๋ ๊ทธ๋๋ก ์ ์ฉํ ์ ์์๋งํผ ํธํ์ฑ์ด ์ข๋ค๊ณ ์๋ ค์ ธ ์๋ค.
๊ทธ๋์ pytorch ํ์ต ์ฝ๋์ ๋ชจ๋ธ๋ง ํ๊น ํ์ด์ค์ ํธ๋์คํฌ๋จธ๋ก ๋ฐ๊ฟ์ ํ์ต์ํค๋ฉด ๋๋๊น ๊ฐ๋จํ๊ฒ ๊ตฌ๋ ์๊ฐํ์ง๋ง... ์๊ฐ๋ณด๋ค ๊ณ ๋ คํด์ผํ ์ ๋ค์ด ์์ด์ ํํ ๋ฆฌ์ผ๋ก ์ ๋ฆฌํด ๋ณธ๋ค.
HuggingFace Vision Model ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ์ ์ค๋น
Vision Transformer(ViT) ๊ธฐ๋ฐ์ ์ด๋ฏธ์ง ํธ๋์คํฌ๋จธ ๋ชจ๋ธ๋ค์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์์ ๊ฐ์ด ํจ์น๋ก ์๋ผ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ค. ์ ๊ณผ์ ์ด ๋ชจ๋ธ ์์ฒด์ ํฌํจ๋ pytorch ๊ธฐ๋ฐ์ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ๋ค๋ ์์ง๋ง, ํ๊น ํ์ด์ค์์๋ ์ด๋ฏธ์ง๋ฅผ ํจ์นํ ์ํค๋ ํด๋์ค์ ๋ชจ๋ธ ํด๋์ค๊ฐ ๋ถ๋ฆฌ๋์ด ์๋ค.
๋๋ฌธ์ ๋ฐ์ดํฐ์ ์์ฒด๋ฅผ ๋ฏธ๋ฆฌ ํจ์นํ์์ผ๋๊ณ ์ฌ์ฉํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ก๋๋ก ๋ฐฐ์น๋จ์๋ก ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ํจ์นํ ์ํฌ ์๋ ์๋ค.
ํ์ต ๋ฐ ํ๊ฐ
ํ๊น ํ์ด์ค ๋ชจ๋ธ ํ์ต์์๋ ํ๊น ํ์ด์ค ์์ฒด ํ์ต API์ธ Trainer ๋ฅผ ์ฌ์ฉํ ์๋ ์๊ณ , ํ๊น ํ์ด์ค ๋ชจ๋ธ์ pytorch ํ์ต ์ฝ๋๋ก ํ์ต์ํฌ ์๋ ์๋ค. ๋ค๋ฅธ ๋ชจ๋ธ๋ค๊ณผ์ ๋น๊ต๋ฅผ ์ํด ๊ธฐ์กด ํ์ต ์ฝ๋์ ๋ชจ๋ธ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ๊ฐ์ธ์ ์ผ๋ก ํ๊น ํ์ด์ค ์์ฒด API๋ฅผ ์ฐ๋๊ฒ ํธํ ๊ฒ ๊ฐ๋ค. ๋ชจ๋ธ configuration ์ค์ ์ด๋ pre-train๋ ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๊ณ ์ ์ฅํ๋ ์ฝ๋, metric ๊ด๋ จ ํจ์๋ค์ด ๊ต์ฅํ ์ฌ์ฉํ๊ธฐ ํธํ๊ฒ ๋์ด์๋ค.
HuggingFace Swin Transformer ์ด๋ฏธ์ง ๋ถ๋ฅ ํํ ๋ฆฌ์ผ
HuggingFace์ ๊ณต์ ๋ ํผ์งํ ๋ฆฌ์ ๋ค์ํ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ ํํ ๋ฆฌ์ผ์ ์ ๊ณตํ๊ณ ์๋๋ฐ, ๊ธฐ๋ณธ์ ์ธ ํ์ต/ํ๊ฐ ์ฝ๋ ํด์์ด ํ์ํ์ ๋ถ์ ์๋ ํํ ๋ฆฌ์ผ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
- HuggingFace ๊ณต์ ํํ ๋ฆฌ์ผ ๋ ํผ์งํ ๋ฆฌ : https://github.com/huggingface/transformers/tree/main/examples/pytorch
- ํํ ๋ฆฌ์ผ ์ฝ๋ : https://github.com/ldj7672/Deep-Learning-Model-Tutorials/blob/main/HuggingFace/HuggingFace_SwinT_image_classification.ipynb
1. ํจํค์ง ๋ค์ด๋ก๋ & ํ๊ฒฝ ์ธํ
- ์ฐ์ HuggingFace์ transformers์ datasets๋ฅผ ์ค์น
2. ๋ฐ์ดํฐ์ ์ค๋น
- ํ๊น ํ์ด์ค ํํ์ด์ง์ ๊ณต๊ฐ๋์ด ์๋ ๋ฐ์ดํฐ์ ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ์ด๋ฆ์ ๋ฌธ์์ด๋ก ๋๊ฒจ์ฃผ๋ฉด ๋ค์ด ๊ฐ๋ฅ (ํํ ๋ฆฌ์ผ์์๋ ๊ณ ์์ด์ ๊ฐ ๋ถ๋ฅ ๋ฐ์ดํฐ์ ์ ์ฌ์ฉ)
- ๋ฐ์ดํฐ์
์ ๋ช๊ฐ ๋ค์ด๋ฐ์ ๋ณด๋ key ๊ฐ์ด ์ผ์ ํ์ง๊ฐ ์์๋ฐ ์ฌ์ฉ ํธ์๋ฅผ ์ํด ๋ณธ์ธ์ ๋ฃฐ๋๋ก ์ง์ ํด์ฃผ๊ณ , ์ธ๋ฑ์ค๋ณ ๋ ์ด๋ธ์ ์ง์
- ๋์ค์ ๋ชจ๋ธ ์ธํผ๋ฐ์ค ์์ 0, 1, 2 ๋ฑ์ ์ซ์๊ฐ ์๋ '๊ฐ', '๊ณ ์์ด' ๊ฐ์ ๋ ์ด๋ธ์ ์ป์ ์ ์์
3. HuggingFace ๋ชจ๋ธ ์ธํ
- ํ๊น ํ์ด์ค ํํ์ด์ง์๋ ๋ค์ํ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ pre-trained ๋ชจ๋ธ์ด ๊ณต๊ฐ๋์ด ์๊ณ , ์ญ์๋ ๋ค์ด๋ฐ์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์
- ์์ ์ค๋ช ํ๋ค์ํผ ํธ๋์คํฌ๋จธ ๊ณ์ด ๋ชจ๋ธ์ CNN ๊ณ์ด ๋ชจ๋ธ๊ณผ ๋ฌ๋ฆฌ ์ด๋ฏธ์ง๋ฅผ ํจ์น๋ก ์๋ผ์ ๋ชจ๋ธ์ ๋ฃ์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ preprocessor์ transformer model ๋ ๊ฐ์ง ๋ค ํ์
- ๋ชจ๋ธ configuration์ ์์ ํ๋ฉด ๋ชจ๋ธ์ ์ฌ๋ฌ๊ฐ์ง ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ ํ ์ ์์
# ๋ฐ์ดํฐ์ transformation ๋ฐ preprocess
- preprocessor์ ์ถ๋ ฅ ์ฌ์ด์ฆ๋ ๊ณ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ด์ฆ์ ๋ง๊ฒ ๋ฐ์ดํฐ์ transformation์ ์ค์
# ๋ฐ์ดํฐ์ split ๋ฐ transform ์ ์ฉ
- ์ด์ ๋ฐ์ดํฐ์ ์ transform์ ์ ์ฉ์ํค๊ณ , ๋ฐ์ดํฐ์ ์ ์ ์ ์ธํ๋์ง ์ด๋ฏธ์ง์ ๋ ์ด๋ธ์ ํ์ธ
4. HuggingFace ํ์ต API 'Trainer' ์ธํ
- pytorch ํ์ต ์ฝ๋์ ๊ฐ์ฅ ๋ง์ด ๋ค๋ฅธ ๋ถ๋ถ์ธ๋ฐ, TrainingArguemntes๋ก ๊ฐ์ข ํ์ต ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๊ณ ํ๊น ํ์ด์ค์ ์์ฒด ํ์ต API ์ธ Trainer๋ฅผ ์ ์ธ
- tokenizer์๋ preprocessor๋ฅผ ์ง์ ํด์ค์ผ ์ด๋ฏธ์ง๋ฅผ ํจ์น๋ก ์๋ผ์ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ ๋ฃ์ด์ฃผ๊ฒ ๋จ
*์ธ์ด ๋ชจ๋ธ์ด๋ ๋ฉํฐ ๋ชจ๋ฌ ๋ชจ๋ธ์ ๊ฒฝ์ฐ tokenizer๋ ๋ฌธ์์ด์ ์๋ฒ ๋ฉํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
5. ๋ชจ๋ธ ํ์ต
Trainer ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ์ ๋ง ๊ฐ๊ฒฐํด์ง. ์ ์ฝ๋๋ง ์คํํ๋ฉด ํ์ต์ด ์๋ฃ๋๊ณ ์ง์ ํ metric์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ํ์ต ๊ฒฐ๊ณผ๋ ์ถ๋ ฅ๋๋ค.
6. ๋ชจ๋ธ ํ๊ฐ
๋ชจ๋ธ evaluation ๋ํ Trainer๋ฅผ ์ฌ์ฉํ๋ฉด ๊ต์ฅํ ๊ฐํธํ๊ฒ ์ํํ ์ ์๋ค.
7. ๋ชจ๋ธ ์ธํผ๋ฐ์ค
- ํ๊น ํ์ด์ค ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋ชจ๋ธ์ ์ ์ฅํ๋ฉด ๋ชจ๋ธ ์ ๋ณด๊ฐ ๋ด๊ธด json ํ์ผ๊ณผ ๋ชจ๋ธ ์จ์ดํธ๊ฐ ์ ์ฅ๋ binํ์ผ์ด ์ ์ฅ
- preprocessor ์ ๊ฒฝ์ฐ pre-train๋ ๊ฒ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ Swin Transformer์ ๊ฒฝ์ฐ์๋ ๋ฐฉ๊ธ ํ์ตํ ๋ชจ๋ธ์ด ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ๋ฅผ from_pretrained()์ ๋๊ฒจ์ค์ ํ์ต๋ ๋ชจ๋ธ์ ๋ถ๋ฌ์ด
๋ชจ๋ธ ์ธํผ๋ฐ์ค ์์๋ ์ญ์๋ ์ด๋ฏธ์ง๋ฅผ ํจ์นํํ๊ธฐ ์ํด preprocessor์ ๋จผ์ ํต๊ณผ์์ผ์ ํธ๋์คํฌ๋จธ ์ ๋ ฅ์ ๋ง๋ค๊ณ ๋ชจ๋ธ์ ์ธํผ๋ฐ์ค ์์ผ์ ์ต์ข ์์ธก ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ค.
... ๊ณ ์์ด์ธ๋ฐ 2 ์ํญ๋ง ํ์ต์์ผ์ ๊ทธ๋ฐ์ง ๊ฐ์์ง๋ผ๊ณ ์ธ์ํ๋ค.. ใ ใ