๐Ÿ˜Bow

BOW( Bag of Words)

์šฐ๋ฆฌ ๋ง๋กœํ•˜๋ฉด ๋‹จ์–ด์ฃผ๋จธ๋‹ˆ. ์›๋ž˜ ๋ฌธ์„œ ๋ถ„๋ฅ˜์— ์‚ฌ์šฉํ•˜๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜.

๋ฌธ์„œ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ปดํ“จํ„ฐ๋กœ ๋ฌธ์„œ์˜ ๋ฌธ๋งฅ์„ ์ดํ•ดํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ ๋ฌธ๋งฅ์ด ์•„๋‹Œ ๋ฌธ์„œ์— ๋“ฑ์žฅํ•˜๋Š” ๋‚ฑ๋ง์˜ ๋นˆ๋„๋ฅผ ์„ธ์„œ ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๋Š” ๋‚ฑ๋ง๋กœ ๋ฌธ์„œ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์›๋ฆฌ.

์˜์ƒ ๋ถ„์•ผ์—์„œ๋Š” ๋‚ฑ๋ง ๋Œ€์‹  ํŠน์ง• ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์‚ฌ์šฉ.

BOW ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ์ฒด ์ธ์‹

๋‚ฑ๋ง ๋Œ€์‹  SIFT, SURF์™€ ๊ฐ™์€ ํŠน์ง• ์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์‚ฌ์šฉ

์˜ˆ: ์˜์ƒ์— ์žˆ๋Š” ๋น„ํ–‰๊ธฐ์™€ ๋ชจํ„ฐ์‚ฌ์ดํด์„ ๋ถ„๋ฅ˜ํ•  ๋•Œ,

  1. SIFT์™€ ๊ฐ™์€ ํŠน์ง• ์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ํ•˜๋‚˜์˜ ์ €์žฅ ๊ณต๊ฐ„์— ์ฐจ๊ณก์ฐจ๊ณก ๋ชจ์•„๋‘ก๋‹ˆ๋‹ค.

  2. ๋งˆ๊ตฌ์žก์ด๋กœ ๋’ค์„ž์—ฌ ์žˆ๋Š” ์ˆ˜๋งŽ์€ ๋น„ํ–‰๊ธฐ์™€ ๋ชจํ„ฐ์‚ฌ์ดํด์˜ ํŠน์ง•์„ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ k-means ํด๋Ÿฌ์Šคํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ตฐ์ง‘ํ™”.

  3. ๊ฐ๊ฐ์˜ ๋น„ํ–‰๊ธฐ์™€ ๋จธํ„ฐ ์‚ฌ์ดํด ์‚ฌ์ง„์— ๋Œ€ํ•ด์„œ ์‹œ๊ฐ ์‚ฌ์ „์„ ๋งŒ๋“ค ๋–„์™€ ๊ฐ™์€ ํŠน์ง• ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์‹œ๊ฐ ์‚ฌ์ „์— ๋“ฑ๋ก๋œ ํŠน์ง• ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ ๋งค์นญ๋˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ํžˆ์Šคํ† ๋žจ์„ ์ž‘์„ฑํ•˜๊ณ  ๋ ˆ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์ง์ง€์–ด ์ค€๋น„.

์ถœ์ฒ˜: https://medium.com/@aybukeyalcinerr/bag-of-visual-words-bovw-db9500331b2f

  1. ๊ฐ ์ด๋ฏธ์ง€์˜ ํžˆ์Šคํ† ๊ทธ๋žจ๊ณผ ๋ ˆ์ด๋ธ”๋กœ SVM๊ณผ ๊ฐ™์€ ๋ถ„๋ฅ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๊ฒŒ ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์ž…๋ ฅ์œผ๋กœ ์ฃผ๊ณ  ํ›ˆ๋ จ์‹œํ‚ต๋‹ˆ๋‹ค.

BOW API

  • trainer = cv2.BOWTrainer : BOW ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”์ƒ ํด๋ž˜์Šค

  • trainer.add(descriptors) : ํŠน์ง• ๋””์Šคํฌ๋ฆฝํ„ฐ ์ถ”๊ฐ€

descriptors : ํŠน์ง• ๋””์Šคํฌ๋ฆฝํ„ฐ (SIFT, SURF, ORB ๋“ฑ)

  • dictionary = trainer.cluster(): ๊ตฐ์ง‘ํ™”ํ•ด์„œ ์‚ฌ์ „ ์ƒ์„ฑ

dictionary : ์‹œ๊ฐ ์‚ฌ์ „

  • trainer = cv2.BOWMeansTrainer(clusterCount) : k-means ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค

clusterCount: ๊ตฐ์ง‘ํ™”ํ•  ํด๋Ÿฌ์Šคํ„ฐ ๊ฐœ์ˆ˜

  • extractor = cv2.BOWImgDescriptorExtractor(dextractor, dmatcher) : ๋งค์นญ์ ์œผ๋กœ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ณ„์‚ฐํ•˜๋Š” ํด๋ž˜์Šค ์ƒ์„ฑ์ž

dextractor : DesctiptorExtractor๋ฅผ ์ƒ์†ํ•œ ํŠน์ง• ๋งค์นญ๊ธฐ
dmatcher : DesctiptorMatcher๋ฅผ ์ƒ์†ํ•œ ํŠน์ง• ๋งค์นญ

  • extractor.setVocabulary(dictionary): ์‚ฌ์ „ ๊ฐ์ฒด ์„ค์ •

dictionary : BOWTrainer๋กœ ์ƒ์„ฑํ•œ ์‚ฌ์ „ ๊ฐ์ฒด

  • histogram = extractor.compute(img, keypoint) : ์ด๋ฏธ์ง€์™€ ์‚ฌ์ „์˜ ๋งค์นญ์ ์œผ๋กœ ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ

img : ๊ณ„์‚ฐํ•  ์ด๋ฏธ์ง€
keypoint : ์ด๋ฏธ์ง€์— ์ถ”์ถœํ•œ ํ‚ค ํฌ์ธํŠธ
histogram : ์ด๋ฏธ์ง€์™€ ์‚ฌ์ „์˜ ๋งค์นญ์  ํžˆ์Šคํ† ๊ทธ๋žจ

์‹ค์Šต