Path: blob/master/site/ko/lite/tutorials/pose_classification.ipynb
37949 views
Copyright 2021 The TensorFlow Authors.
MoveNet ๋ฐ TensorFlow Lite๋ฅผ ์ฌ์ฉํ ์ธ๊ฐ ํฌ์ฆ ๋ถ๋ฅ
์ด ๋ ธํธ๋ถ์ MoveNet ๋ฐ TensorFlow Lite๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์ฆ ๋ถ๋ฅ ๋ชจ๋ธ์ ํ๋ จํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค. ๊ฒฐ๊ณผ๋ MoveNet ๋ชจ๋ธ์ ์ถ๋ ฅ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์๋ค์ด๊ณ ์๊ฐ ํฌ์ฆ์ ์ด๋ฆ๊ณผ ๊ฐ์ ํฌ์ฆ ๋ถ๋ฅ๋ฅผ ์ถ๋ ฅํ๋ ์๋ก์ด TensorFlow Lite ๋ชจ๋ธ์ ๋๋ค.
์ด ๋ ธํธ๋ถ์ ์ ์ฐจ๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํํธ 1: ์ค์ ํฌ์ฆ ๋ ์ด๋ธ๊ณผ ํจ๊ป MoveNet ๋ชจ๋ธ์ด ๊ฐ์งํ ๋๋๋งํฌ(์ ์ฒด ํคํฌ์ธํธ)๋ฅผ ์ง์ ํ๋ CSV ํ์ผ๋ก ํฌ์ฆ ๋ถ๋ฅ ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ฒ๋ฆฌํฉ๋๋ค.
2๋ถ: CSV ํ์ผ์ ๋๋๋งํฌ ์ขํ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ธก๋ ๋ ์ด๋ธ์ ์ถ๋ ฅํ๋ ํฌ์ฆ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋น๋ํ๊ณ ํ๋ จํฉ๋๋ค.
3๋ถ: ํฌ์ฆ ๋ถ๋ฅ ๋ชจ๋ธ์ TFLite๋ก ๋ณํํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ ธํธ๋ถ์ ์๊ฐ ํฌ์ฆ๋ผ๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํ์ง๋ง, ํฌ์ฆ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ๋ก๋ํ ์ ์๋ ์น์ ๋ ํํธ 1์ ํฌํจํ์ต๋๋ค.
์ค๋น
์ด ์น์ ์์๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋๋๋งํฌ ์ขํ์ ์ ๋ต ๋ ์ด๋ธ์ด ํฌํจ๋ CSV ํ์ผ๋ก ํ๋ จ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ ์ฒ๋ฆฌํ๋ ์ฌ๋ฌ ํจ์๋ฅผ ์ ์ํฉ๋๋ค.
์ฌ๊ธฐ์ ๊ด์ฐฐํ ์ ์๋ ์ผ์ ์์ง๋ง ์จ๊ฒจ์ง ์ฝ๋ ์ ์ ํ์ฅํ์ฌ ๋์ค์ ํธ์ถํ ์ผ๋ถ ๊ธฐ๋ฅ์ ๋ํ ๊ตฌํ์ ๋ณผ ์ ์์ต๋๋ค.
๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ๋ชจ๋ฅธ ์ฑ CSV ํ์ผ๋ง ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์ด ์น์ ์ ์คํํ๊ณ 1๋ถ๋ก ์งํํ์ญ์์ค.
MoveNet์ ์ฌ์ฉํ์ฌ ํฌ์ฆ ์ถ์ ์ ์คํํ๋ ์ฝ๋
1๋ถ: ์ ๋ ฅ ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ
ํฌ์ฆ ๋ถ๋ฅ๊ธฐ์ ์ ๋ ฅ ์ MoveNet ๋ชจ๋ธ์ ์ถ๋ ฅ ๋๋๋งํฌ์ด๋ฏ๋ก MoveNet์ ํตํด ๋ ์ด๋ธ์ด ์ง์ ๋ ์ด๋ฏธ์ง๋ฅผ ์คํํ ๋ค์ ๋ชจ๋ ๋๋๋งํฌ ๋ฐ์ดํฐ์ ์ ๋ต ๋ ์ด๋ธ์ CSV ํ์ผ๋ก ์บก์ฒํ์ฌ ๊ต์ก ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์ ์ํด ์ ๊ณตํ ๋ฐ์ดํฐ์ธํธ๋ CG๋ก ์์ฑ๋ ์๊ฐ ํฌ์ฆ ๋ฐ์ดํฐ์ธํธ์
๋๋ค. ์ฌ๊ธฐ์๋ 5๊ฐ์ง ๋ค๋ฅธ ์๊ฐ ํฌ์ฆ๋ฅผ ํ๋ ์ฌ๋ฌ CG ์์ฑ ๋ชจ๋ธ์ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋๋ ํ ๋ฆฌ๋ ์ด๋ฏธ train ๋ฐ์ดํฐ ์ธํธ์ test ๋ฐ์ดํฐ ์ธํธ๋ก ๋ถํ ๋์ด ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด ์น์
์์๋ ์๊ฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ MoveNet์ ํตํด ์คํํ์ฌ ๋ชจ๋ ๋๋๋งํฌ๋ฅผ CSV ํ์ผ๋ก ์บก์ฒํ ์ ์์ต๋๋ค... ๊ทธ๋ฌ๋ ์๊ฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ MoveNet์ ์ ๊ณตํ๊ณ ์ด CSV ํ์ผ์ ์์ฑํ๋ ๋ฐ ์ฝ 15๋ถ์ด ๊ฑธ๋ฆฝ๋๋ค. . is_skip_step_1 ๋งค๊ฐ๋ณ์๋ฅผ True ๋ก ์ค์ ํ์ฌ ์๊ฐ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ๊ธฐ์กด CSV ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๊ณ ๋์ ์ด ์ ์ฒ๋ฆฌ ๋จ๊ณ์์ ์์ฑ๋ ๋์ผํ CSV ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
๋ฐ๋ฉด์ ์์ ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ธํธ๋ก ํฌ์ฆ ๋ถ๋ฅ๊ธฐ๋ฅผ ํ๋ จ์ํค๋ ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ์
๋ก๋ํ๊ณ ์ด ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ฅผ ์คํํด์ผ ํฉ๋๋ค( is_skip_step_1 False๋ก ๋ก๋๋ค). ์๋ ์ง์นจ์ ๋ฐ๋ผ ์์ ์ ํฌ์ฆ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์
๋ก๋ํด์ผ ํฉ๋๋ค.
(์ ํ ์ฌํญ) ์์ ์ ํฌ์ฆ ๋ฐ์ดํฐ ์ธํธ ์ ๋ก๋
๊ณ ์ ํ ๋ ์ด๋ธ์ด ์ง์ ๋ ํฌ์ฆ๋ก ํฌ์ฆ ๋ถ๋ฅ๊ธฐ๋ฅผ ํ๋ จ์ํค๋ ค๋ฉด(์๊ฐ ํฌ์ฆ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ํฌ์ฆ๊ฐ ๋ ์ ์์) ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
์์
use_custom_dataset์ต์ ์ True ๋ก ์ค์ ํฉ๋๋ค.์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ธํธ๊ฐ ์๋ ํด๋๊ฐ ํฌํจ๋ ์์นด์ด๋ธ ํ์ผ(ZIP, TAR ๋๋ ๊ธฐํ)์ ์ค๋นํฉ๋๋ค. ํด๋์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฌ๋ ํฌ์ฆ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ด๋ฏธ ํ๋ จ ์ธํธ์ ํ
์คํธ ์ธํธ๋ก ๋ถํ ํ๋ค๋ฉด dataset_is_split ์ True ๋ก ์ค์ ํ์ญ์์ค. ์ฆ, ์ด๋ฏธ์ง ํด๋์๋ ๋ค์๊ณผ ๊ฐ์ "train" ๋ฐ "test" ๋๋ ํฐ๋ฆฌ๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
yoga_poses/ |__ train/ |__ downdog/ |______ 00000128.jpg |______ ... |__ test/ |__ downdog/ |______ 00000181.jpg |______ ...
yoga_poses/ |__ downdog/ |______ 00000128.jpg |______ 00000181.jpg |______ ... |__ goddess/ |______ 00000243.jpg |______ 00000306.jpg |______ ...
์ผ์ชฝ์ ํ์ผ ํญ(ํด๋ ์์ด์ฝ)์ ํด๋ฆญํ ๋ค์ ์ธ์ ์ ์ฅ์์ ์ ๋ก๋ (ํ์ผ ์์ด์ฝ)๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ณด๊ด ํ์ผ์ ์ ํํ๊ณ ๊ณ์ ์งํํ๊ธฐ ์ ์ ์ ๋ก๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ธ์.
์์นด์ด๋ธ ํ์ผ ๋ฐ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ์ ์ง์ ํ๋ ค๋ฉด ๋ค์ ์ฝ๋ ๋ธ๋ก์ ํธ์งํ์ญ์์ค. (๊ธฐ๋ณธ์ ์ผ๋ก ZIP ํ์ผ์ด ํ์ํ๋ฏ๋ก ์์นด์ด๋ธ๊ฐ ๋ค๋ฅธ ํ์์ธ ๊ฒฝ์ฐ ํด๋น ๋ถ๋ถ๋ ์์ ํด์ผ ํฉ๋๋ค.)
์ด์ ๋ ธํธ๋ถ์ ๋๋จธ์ง ๋ถ๋ถ์ ์คํํฉ๋๋ค.
์ฐธ๊ณ : split_into_train_test() ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ถํ ํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ด๋ฏธ์ง๊ฐ PNG, JPEG ๋๋ BMP์ผ ๊ฒ์ผ๋ก ์์ํ๋ฉฐ ๋ค๋ฅธ ํ์ผ ์ ํ์ ๋ฌด์ํฉ๋๋ค.
์๊ฐ ๋ฐ์ดํฐ ์ธํธ ๋ค์ด๋ก๋
TRAIN ๋ฐ์ดํฐ์ธํธ ์ ์ฒ๋ฆฌ
TEST ๋ฐ์ดํฐ์ธํธ ์ ์ฒ๋ฆฌ
2๋ถ: ๋๋๋งํฌ ์ขํ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ธก๋ ๋ ์ด๋ธ์ ์ถ๋ ฅํ๋ ํฌ์ฆ ๋ถ๋ฅ ๋ชจ๋ธ์ ํ๋ จํฉ๋๋ค.
๋๋๋งํฌ ์ขํ๋ฅผ ์ฌ์ฉํ๊ณ ์ ๋ ฅ ์ด๋ฏธ์ง์ ์ฌ๋์ด ์ํํ๋ ํฌ์ฆ ํด๋์ค๋ฅผ ์์ธกํ๋ TensorFlow ๋ชจ๋ธ์ ๋น๋ํฉ๋๋ค. ๋ชจ๋ธ์ ๋ ๊ฐ์ ํ์ ๋ชจ๋ธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํ์ ๋ชจ๋ธ 1์ ๊ฐ์ง๋ ๋๋๋งํฌ ์ขํ์์ ํฌ์ฆ ์๋ฒ ๋ฉ(ํน์ง ๋ฒกํฐ๋ผ๊ณ ๋ ํจ)์ ๊ณ์ฐํฉ๋๋ค.
ํ์ ๋ชจ๋ธ 2๋ ํฌ์ฆ ํด๋์ค๋ฅผ ์์ธกํ๊ธฐ ์ํด
Dense๋ ์ด์ด๋ฅผ ํตํด ํฌ์ฆ ์๋ฒ ๋ฉ์ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ 1๋ถ์์ ์ฌ์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ธ์ ํ์ตํฉ๋๋ค.
(์ ํ ์ฌํญ) ํํธ 1์ ์คํํ์ง ์์ ๊ฒฝ์ฐ ์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
์ฌ์ ์ฒ๋ฆฌ๋ CSV๋ฅผ TRAIN ๋ฐ TEST ๋ฐ์ดํฐ ์ธํธ์ ๋ก๋ํฉ๋๋ค.
TRAIN ๋ฐ์ดํฐ ์ธํธ๋ฅผ TRAIN (๋ฐ์ดํฐ์ 85%) ๋ฐ VALIDATE (๋๋จธ์ง 15%)๋ก ๋ก๋ํ๊ณ ๋ถํ ํฉ๋๋ค.
ํฌ์ฆ ๋ถ๋ฅ๋ฅผ ์ํด ํฌ์ฆ ๋๋๋งํฌ๋ฅผ ํฌ์ฆ ์๋ฒ ๋ฉ(ํน์ง ๋ฒกํฐ๋ผ๊ณ ๋ ํจ)์ผ๋ก ๋ณํํ๋ ํจ์ ์ ์
๋ค์์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋๋๋งํฌ ์ขํ๋ฅผ ํน์ง ๋ฒกํฐ๋ก ๋ณํํฉ๋๋ค.
ํฌ์ฆ ์ค์ฌ์ ์์ ์ผ๋ก ์ด๋ํฉ๋๋ค.
ํฌ์ฆ ํฌ๊ธฐ๊ฐ 1์ด ๋๋๋ก ํฌ์ฆ ํฌ๊ธฐ ์กฐ์
์ด ์ขํ๋ฅผ ํน์ง ๋ฒกํฐ๋ก ๋ณํฉ
๊ทธ๋ฐ ๋ค์ ์ด ํน์ง ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฒฝ๋ง ๊ธฐ๋ฐ ํฌ์ฆ ๋ถ๋ฅ๊ธฐ๋ฅผ ํ๋ จ์ํต๋๋ค.
ํฌ์ฆ ๋ถ๋ฅ๋ฅผ ์ํ Keras ๋ชจ๋ธ ์ ์
Keras ๋ชจ๋ธ์ ๊ฐ์ง๋ ํฌ์ฆ ๋๋๋งํฌ๋ฅผ ๊ฐ์ ธ์จ ๋ค์ ํฌ์ฆ ์๋ฒ ๋ฉ์ ๊ณ์ฐํ๊ณ ํฌ์ฆ ํด๋์ค๋ฅผ ์์ธกํฉ๋๋ค.
๋ชจ๋ธ ์ฑ๋ฅ์ ๋ ์ ์ดํดํ๊ธฐ ์ํด ์ ์ค๋ถ๋ฅํ ๊ทธ๋ฆฌ๊ธฐ
(์ ํ ์ฌํญ) ์๋ชป๋ ์์ธก ์กฐ์ฌ
๋ชจ๋ธ ์ ํ๋๋ฅผ ํฅ์์ํฌ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์๋ชป ์์ธก๋ TEST ๋ฐ์ดํฐ ์ธํธ์ ํฌ์ฆ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ์ด๋ ๋ก์ปฌ ์์คํ ์์ ํฌ์ฆ ์ด๋ฏธ์ง ํ์ผ์ ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ 1๋จ๊ณ๋ฅผ ์คํํ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
3๋ถ: ํฌ์ฆ ๋ถ๋ฅ ๋ชจ๋ธ์ TensorFlow Lite๋ก ๋ณํ
Keras ํฌ์ฆ ๋ถ๋ฅ ๋ชจ๋ธ์ TensorFlow Lite ํ์์ผ๋ก ๋ณํํ์ฌ ๋ชจ๋ฐ์ผ ์ฑ, ์น ๋ธ๋ผ์ฐ์ ๋ฐ ์์ง ์ฅ์น์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ๋ชจ๋ธ์ ๋ณํํ ๋ ๋์ ๋ฒ์ ์์ํ๋ฅผ ์ ์ฉํ๋ฉด ์ฝ๊ฐ์ ์ ํ๋ ์ ํ๋ก ํฌ์ฆ ๋ถ๋ฅ TensorFlow Lite ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ ์ฝ 4๋ฐฐ ์ค์ด๋ญ๋๋ค.
์ฐธ๊ณ : TensorFlow Lite๋ ์ฌ๋ฌ ์์ํ ์ฒด๊ณ๋ฅผ ์ง์ํฉ๋๋ค. ์์ธํ ์์๋ณด๋ ค๋ฉด ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ทธ๋ฐ ๋ค์ ํด๋์ค ์ธ๋ฑ์ค์์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํด๋์ค ์ด๋ฆ์ผ๋ก์ ๋งคํ์ด ํฌํจ๋ ๋ ์ด๋ธ ํ์ผ์ ์์ฑํฉ๋๋ค.
๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์์ํ๋ฅผ ์ ์ฉํ์ผ๋ฏ๋ก ์์ํ๋ TFLite ๋ชจ๋ธ์ ํ๊ฐํ์ฌ ์ ํ๋ ์ ํ๊ฐ ํ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํ๊ฒ ์ต๋๋ค.
์ด์ TFLite ๋ชจ๋ธ( pose_classifier.tflite )๊ณผ ๋ ์ด๋ธ ํ์ผ( pose_labels.txt )์ ๋ค์ด๋ก๋ํ์ฌ ์ฌ์ฉ์ ์ ์ ํฌ์ฆ๋ฅผ ๋ถ๋ฅํ ์ ์์ต๋๋ค. TFLite ํฌ์ฆ ๋ถ๋ฅ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ข
๋จ ๊ฐ ์์ ๋ Android ๋ฐ Python/Raspberry Pi ์ํ ์ฑ์ ์ฐธ์กฐํ์ธ์.
TensorFlow.org์์ ๋ณด๊ธฐ
Google Colab์์ ์คํ
GitHub์์ ์์ค ๋ณด๊ธฐ
๋
ธํธ๋ถ ๋ค์ด๋ก๋
TF ํ๋ธ ๋ชจ๋ธ ๋ณด๊ธฐ