ํ๋ช : Anything
๋์ ๊ณผ์ ๋ช : ๊ฐ๊ตฌ์ฐ์ ํ ์คํธ, ์ด๋ฏธ์ง ๋ณตํฉ ๊ฒ์ ์์คํ ์ฐ๊ตฌ ๋ฐ ๊ฐ๋ฐ
๊ฐ๋ฐ ๋๊ธฐ : ๊ฐ๊ตฌ๋ ๋ค์ํ ํํ์ ํจํด์ด ์กด์ฌํ๋ค. ์ฐพ๊ณ ์ ํ๋ ๊ฐ๊ตฌ๊ฐ ์์ ๋ ์ด๋ฅผ ๊ฒ์ํ๋ ๊ฒ์๋งค์ฐ ์ด๋ ต๋ค. ๋ฐ๋ผ์ ์์ฐ์ด ์ฒ๋ฆฌ ๊ธฐ์ (NLP)๊ณผ, ์ปดํจํฐ ๋น์ ๊ธฐ์ (CV)์ ํ์ฉํ์ฌ ๋ณธ์ธ์ด ์ํ๋ ํํ์ ํจํด์ ๊ฐ๊ตฌ๋ฅผ ์ฐพ์ ์ ์๋ ๊ฐ๊ตฌ ์ฐ์ ํ ์คํธ, ์ด๋ฏธ์ง ๋ณตํฉ ๊ฒ์ ์์คํ ์ ๊ฐ๋ฐํ๋ค.
๋์ ๋ชฉํ : ์ฌ์ฉ์๊ฐ ํ ์คํธ์ ์ด๋ฏธ์ง๋ฅผ ๋ณตํฉ์ ์ผ๋ก ์ด์ฉํด ํน์ ํจํด์ด ์๋ ๊ฐ๊ตฌ๋ฅผ ๊ฒ์ํ ์ ์๋ ๊ฒ์ ์์ง ๊ฐ๋ฐ
๊ฐ์ :
- ์ฌ์ฉ์๊ฐ ํ ์คํธ์ ํจํด ์ด๋ฏธ์ง ์ ๋ ฅ
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์คํธ๋ tensorflow์ Bidirectional GRU๋ฅผ ์ด์ฉํด ํ์ตํ NLP ๋ชจ๋ธ์ ํตํด 22๊ฐ์ ๊ฐ๊ตฌ ์นดํ ๊ณ ๋ฆฌ ์ค ๊ฐ์ฅ ์ ์ฌํ ๊ฐ๊ตฌ๋ก ๋ถ๋ฅ
- sklearn.neighbors.KNeighborsClassifier()๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํจํด ์ด๋ฏธ์ง(GoogleNet ๋ชจ๋ธ์ transfer learningํ CNN ๋ชจ๋ธ๋ก feature ์ถ์ถ)์ ๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ 4000์ฌ์ฅ์ ํจํด ์ด๋ฏธ์ง feature ์ค ์ ์ฌํ ํจํด ์ด๋ฏธ์ง 4๊ฐ ์ถ์ถ
- yolov5์ cv2.grabCut()์ ์ด์ฉํด 2-1์์ ๋ถ๋ฅ๋ ๊ฐ๊ตฌ์ ์ด๋ฏธ์ง์์ ๋ฐฐ๊ฒฝ ์ ๊ฑฐ
- ORB ๊ธฐ์ (Oriented FAST and Rotated BRIEF)๊ณผ BFMatcher ๊ธฐ์ ์ด์ฉํด "์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํจํด ์ด๋ฏธ์ง + 2-2์์ ์ถ์ถํ 4๊ฐ์ ์ ์ฌ ํจํด"๊ณผ "3์์ ๋ฐฐ๊ฒฝ์ด ์ ๊ฑฐ๋ ๊ฐ๊ตฌ ์ด๋ฏธ์ง"์์ ๋ค์์ ๋น์ทํ ๋ฒกํฐ๊ฐ ์ถ์ถ๋๋ค๋ฉด ํด๋น ํจํด์ ๊ฐ์ง๊ณ ์๋ ๊ฐ๊ตฌ๋ก ํ๋จํ์ฌ ์ถ์ถ
- ์ต์ข ์ ์ผ๋ก, 4์์ ์ถ์ถํ ๊ฐ๊ตฌ ์ด๋ฏธ์ง๋ค์ ์ต์ข ๊ฒ์ ๊ฒฐ๊ณผ๋ฌผ๋ก ๋ณด์ฌ์ค
- Django๋ฅผ ์ด์ฉํด ์ ๊ณผ์ ์ ์น์ผ๋ก ๊ตฌํ
- ์น ํธ์คํ ์๋น์ค Pythonanywhere๋ฅผ ์ด์ฉํด ์๋ฒ ๋ฐฐํฌ
22๊ฐ์ ๊ฐ๊ตฌ ์นดํ ๊ณ ๋ฆฌ :
'๊ฐ์ฃฝ์ํ', '์ํ๋ฒ ๋',
'๋๋ธ/ํธ/ํน์นจ๋', '์ฑ๊ธ/์ํผ์ฑ๊ธ+์นจ๋', '๋๋ฐ์นจ๋',
'์ท์ฅ', '์ด๋ฆฐ์ด์ท์ฅ',
'๋ฐํ
์ด๋ธ', '์ปคํผํ
์ด๋ธ/๋ณด์กฐํ
์ด๋ธ', '์ํ',
'์ํ์์', '๋ฐ์์', '์ฌ๋ฌด์ฉ์์', '์คํด/๋ฒค์น', '์ด๋ฆฐ์ด์์', '์์์ฉ์์', '๊ฐ์ฃฝ์์ฒด์ด', '๋ผํ์์ฒด์ด', '๋ฆฌํด๋ผ์ด๋',
'์ปคํผ', '์ค์์ปคํผ', '๋ธ๋ผ์ธ๋'
Work Flow
Prototype
- "ํ์ฅ์ค์ ์ฐ๋ ์ปคํผ" + ํน์ ํจํด ์ด๋ฏธ์ง ๊ฒ์ โ ํน์ ํจํด ์ด๋ฏธ์ง๊ฐ ์๋ "์ค์์ปคํผ" ์ถ๋ ฅ
- "์ผ์๋ก ๋ง๋ ์์" + ํน์ ํจํด ์ด๋ฏธ์ง ๊ฒ์ โ ํน์ ํจํด ์ด๋ฏธ์ง๊ฐ ์๋ "๋ผํ ์์ฒด์ด" ์ถ๋ ฅ
- "๊ฐ์ฃฝ์ผ๋ก ๋ง๋ ์ํ" + ํน์ ํจํด ์ด๋ฏธ์ง ๊ฒ์ โ ํน์ ํจํด ์ด๋ฏธ์ง๊ฐ ์๋ "๊ฐ์ฃฝ์ํ" ์ถ๋ ฅ
- "๋งคํธ๋ฆฌ์ค ์นจ๋" + ํน์ ํจํด ์ด๋ฏธ์ง ๊ฒ์ โ ํน์ ํจํด ์ด๋ฏธ์ง๊ฐ ์๋ "๋๋ฐ์นจ๋" ์ถ๋ ฅ
์ด๋
ธ๋ฒ ์ดํฐ ์ ์์
๊ฐ์ถ์ ๋ฑ๋ก
-
๊ฐ์
- 22์ข ์ ๊ฐ๊ตฌ๋ฅผ ๋ถ๋ฅํ๋ ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ
- ํ์ต ๋ฐ์ดํฐ๋ IKEA์์ ์น ํฌ๋กค๋งํ ํ ์คํธ ๋ฐ์ดํฐ
- Bidirectional GRU ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ
-
๊ตฌํ ์ฌํญ
- ikea_crawling.ipynb() : BeautifulSoup ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ํ์ต๋ฐ์ดํฐ๋ก ์ฌ์ฉ๋ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ IKEA์ [๊ฐ๊ตฌ ์ค๋ช
]์ ์น ํฌ๋กค๋ง
- NLP_BiGRU.ipynb() :
- konlpy ๋ผ์ด๋ธ๋ฌ์ด์ okt() ํํ์ ๋ถ์๊ธฐ๋ฅผ ์ด์ฉํด ํ ์คํธ ๋ฐ์ดํฐ ํ ํฐํ
- ๋จ์ด์ ๋น๋์๋ฅผ ์ด์ฉํด ํ ์คํธ ๋ฐ์ดํฐ ์ ์ ์ธ์ฝ๋ฉ(์์ ๋น๋์ 1000๊ฐ์ ๋จ์ด๋ง ์ฌ์ฉ)
- ํ ์คํธ ๋ฐ์ดํฐ ์ค ์ต์ฅ ๊ธธ์ด๋ก ํจ๋ฉ
- ์ ๊ณผ์ ์ ๊ฑฐ์ณ ์ ์ฒ๋ฆฌ๋ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ Embedding()์ ์ด์ฉํด ๋จ์ด ์๋ฒ ๋ฉ(128 ์ฐจ์์ ๊ฐ์ง๋ ์๋ฒ ๋ฉ ๋ฒกํฐ 1000๊ฐ(๋จ์ด ์งํฉ์ ํฌ๊ธฐ))
- 'Bidirectional GRU' ๋ชจ๋ธ ์ด์ฉ
- 'categorical_crossentropy' ์์คํจ์ ์ด์ฉ
- 'adam' ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ
- ๊ตฌํํ NLP ์ธ๊ณต์ง๋ฅ์ 'anythingNLP.h5'๋ก ์ ์ฅ
- ikea_crawling.ipynb() : BeautifulSoup ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ํ์ต๋ฐ์ดํฐ๋ก ์ฌ์ฉ๋ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ IKEA์ [๊ฐ๊ตฌ ์ค๋ช
]์ ์น ํฌ๋กค๋ง
-
๊ฒ์ฆ ์ ํ๋
...์ค๋ต...
Epoch 00020: val_acc did not improve from 0.99342
-
๊ฐ์
- ์ ๋ ฅ ๋ฐ์ดํฐ๋ Google์์ ์น ํฌ๋กค๋งํ ๊ฐ๊ตฌ ์ด๋ฏธ์ง(CV_furniture/images/) ์ค NLP์์ ์ถ์ถ๋ ๊ฐ๊ตฌ์ ์ด๋ฏธ์ง
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํจํด + ์ ์ฌ ํจํด 4๊ฐ ์ถ์ถ โ ์ด 5๊ฐ์ ํจํด์ผ๋ก ๊ฐ๊ตฌ ์ด๋ฏธ์ง์ ๋ฒกํฐ ๋น๊ต
- ์ผ์ ๊ธฐ์ค ์ด์์ ๋ฒกํฐ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํจํด์ด ์๋ ๊ฐ๊ตฌ๋ก ํ๋จํด ์ต์ข ๊ฒฐ๊ณผ๋ฌผ๋ก ์ถ๋ ฅ
-
๊ตฌํ ์ฌํญ
- image_webcrawling.ipynb : selenium ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Google ๋๋ผ์ด๋ฒ๋ฅผ ์ด์ฉํด ์
๋ ฅ ๋ฐ์ดํฐ์ธ ๊ฐ๊ตฌ ์ด๋ฏธ์ง๋ฅผ Google์์ ์น ํฌ๋กค๋ง
- CV.ipynb :
- sklearn.neighbors.KNeighborsClassifier()๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํจํด ์ด๋ฏธ์ง(GoogleNet ๋ชจ๋ธ์ transfer learningํ CNN ๋ชจ๋ธ๋ก feature ์ถ์ถ)์ ๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ 4000์ฌ์ฅ์ ํจํด ์ด๋ฏธ์ง(CV_furniture/DTD/) feature ์ค ์ ์ฌํ ํจํด ์ด๋ฏธ์ง 4๊ฐ ์ถ์ถ โ ์ด 5๊ฐ์ ํจํด ์ฌ์ฉ
- yolov5์ cv2.grabCut()์ ์ด์ฉํด ์ ๋ ฅ ๋ฐ์ดํฐ์ ๊ฐ๊ตฌ ์ด๋ฏธ์ง์์ ๊ฐ๊ตฌ ์ธ์์ ํจ์จ์ ๋์ด๊ธฐ ์ํด ๋ฐฐ๊ฒฝ ์ ๊ฑฐ
- ORB ๊ธฐ์ (Oriented FAST and Rotated BRIEF)๊ณผ BFMatcher ๊ธฐ์ ์ ์ด์ฉํด ์์์ ๊ตฌํ 5๊ฐ์ ํจํด๊ณผ ๋ฐฐ๊ฒฝ์ด ์ ๊ฑฐ๋ ๊ฐ๊ตฌ ์ด๋ฏธ์ง ๋ฒกํฐ ๋น๊ต โ ๋ค์์ ๋น์ทํ ๋ฒกํฐ๊ฐ ์ถ์ถ๋๋ค๋ฉด ํด๋น ํจํด์ ๊ฐ์ง๊ณ ์๋ ๊ฐ๊ตฌ๋ก ํ๋จํ์ฌ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ๋ก ์ถ๋ ฅ
- image_webcrawling.ipynb : selenium ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Google ๋๋ผ์ด๋ฒ๋ฅผ ์ด์ฉํด ์
๋ ฅ ๋ฐ์ดํฐ์ธ ๊ฐ๊ตฌ ์ด๋ฏธ์ง๋ฅผ Google์์ ์น ํฌ๋กค๋ง
-
GoogleNet ๋ชจ๋ธ ์ ํ๋
76%
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํจํด๊ณผ ์ ์ฌ ํจํด ์ ์ฌ๋
83.57%
-
๊ฐ์
- Django๋ฅผ ์ด์ฉํด ์ ๊ณผ์ ์ ๊ฒฐํฉํด ๋ฐฑ์๋ ๊ตฌํ
- XD๋ฅผ ์ด์ฉํด ํ๋ก ํธ์๋ ๊ตฌํ
- ์ฌ์ฉ์๊ฐ ํ ์คํธ์ ํจํด ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ์ ๋, ํจํด ์ด๋ฏธ์ง๊ฐ ์๋ ํด๋น ๊ฐ๊ตฌ์ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ ์น ๊ตฌํ
-
๊ตฌํ ์ฌํญ
- anything_site/form/templates/main_page.html : HTML์์ form ๊ธฐ๋ฅ์ ์ด์ฉํด ์ฌ์ฉ์๊ฐ ํ
์คํธ ๋ฐ ํจํด ์ด๋ฏธ์ง ์
๋ก๋
- anything_site/form/views.py :
- request.POST๋ฅผ ์ด์ฉํด ์ ๋ฌ๋ฐ์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์คํธ๋ฅผ NLP ๋ชจ๋ธ์ ํตํด 22๊ฐ์ ๊ฐ๊ตฌ ์นดํ ๊ณ ๋ฆฌ ์ค ๊ฐ์ฅ ์ ์ฌํ ํน์ ๊ฐ๊ตฌ๋ก ์ถ์ถ
- request.FILES๋ฅผ ์ด์ฉํด ์ ๋ฌ๋ฐ์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ํจํด ์ด๋ฏธ์ง๋ฅผ CV ๋ชจ๋ธ์ ํตํด ์ ์ฌ ํจํด ์ด๋ฏธ์ง ์ถ์ถ ๋ฐ ํด๋น ํจํด์ด ์๋ ๊ฐ๊ตฌ ์ด๋ฏธ์ง ์ถ์ถ
- anything_site/form/templates/searched_page.html :
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์คํธ ๋ฐ NLP ๋ชจ๋ธ์ ํตํด ์ถ์ถ๋ ๊ฐ๊ตฌ ์นดํ ๊ณ ๋ฆฌ ๋ก๋
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํจํด ์ด๋ฏธ์ง ๋ฐ CV ๋ชจ๋ธ์ ํตํด ์ถ์ถ๋ ์ ์ฌ ํจํด ์ด๋ฏธ์ง 4๊ฐ ๋ก๋
- ํด๋น ํจํด์ด ์๋ ๊ฐ๊ตฌ ์ด๋ฏธ์ง ๋ก๋
- anything_site/static/style : XD๋ฅผ ์ด์ฉํด ํ๋ก ํธ์๋ ๊ตฌํ(.HTML, .CSS, .JS)
- ์ฐธ๊ณ ์ฌํญ :
- ํจํด ์ด๋ฏธ์ง 4000์ฌ์ฅ(anything_site/static/DTD), ๊ฐ๊ตฌ ์ด๋ฏธ์ง(anything_site/static/images), ํ๋ก ํธ์๋ ํ์ผ(anything_site/static/style) โ Django์ static ํ์ผ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ
- ์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ๋ ํจํด ์ด๋ฏธ์ง โ anything_site/media์ ๋์ ์ผ๋ก ์ ์ฅ โ Django์ media ํ์ผ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ
- anything_site/form/templates/main_page.html : HTML์์ form ๊ธฐ๋ฅ์ ์ด์ฉํด ์ฌ์ฉ์๊ฐ ํ
์คํธ ๋ฐ ํจํด ์ด๋ฏธ์ง ์
๋ก๋