Skip to content

wonbeomjang/AI_APP_WEB_Canary_Canary_2021

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿค์นด๋‚˜๋ฆฌ์•„ : ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ๊ตฐ์‚ฌ๋ณด์•ˆ ๊ฒฝ๋ณด ์‹œ์Šคํ…œ


Canary๋Š” ๋จธ์‹ ๋Ÿฌ๋‹์„ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์ง„ ์•ˆ์˜ ๋ณด์•ˆ ์œ„๋ฐ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์š”์†Œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์ž๋™ ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ ํ•ด์ฃผ๋Š” ํ†ตํ•ฉ ๋ณด์•ˆ ๊ฒฝ๋ณด ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. Canary App, Canary in Instagram, Admin logweb์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์•ฑ์—์„œ ์ฒ˜๋ฆฌ๋œ ์‚ฌ์ง„์—๋Š” QR์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—‚๏ธํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์‚ฌ์ง„์˜ ๋ณด์•ˆ ๋‚ด์šฉ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์นด๋ฉ”๋ผ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์„œ,

  • ๊ตฐ ๋‚ด์—์„œ ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ๊ณผ ๋™์‹œ์—,
  • SNS์— ์˜ฌ๋ฆด ์‚ฌ์ง„์˜ ๋ณด์•ˆ ์œ„๋ฐ˜ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฝ๊ณ ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ž๋ฐœ์ ์œผ๋กœ ๋ณด์•ˆ์„ ์ค€์ˆ˜ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋˜ ํ˜„์žฌ SNS์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ๊ฒŒ์‹œ๋ฌผ์„ ๊ฒ€์‚ฌ๋ฅผ ํ•ด ๋ณด์•ˆ์— ๋Œ€ํ•œ ๊ฒฝ๊ฐ์‹ฌ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ“ƒ์ฃผ์ œ ์ •์˜ ๋ฌธ์„œ

๋ฌธ์ œ ๋ฐœ๊ฒฌํ•˜๊ธฐ

  • 2018๋…„ 12์›” 27์ผ ๊ตญ๋ฐฉ๋ถ€๋Š” โ€˜๋ณ‘์˜๋ฌธํ™” ํ˜์‹  ์ •์ฑ…โ€™์œผ๋กœ ๋ณ‘์‚ฌ๋“ค์˜ ์ผ๊ณผ ํ›„ ํ•ธ๋“œํฐ ์‚ฌ์šฉ์„ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ์˜ํ–ฅ์œผ๋กœ ๊ตฐ๋Œ€ ๋‚ด์˜ ๋งŽ์€ ๋ถ€์กฐ๋ฆฌ๊ฐ€ ์‚ฌ๋ผ์กŒ๊ณ  ๋ณ‘์‚ฌ๋“ค์˜ ์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ์ค„์–ด๋“œ๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ๊ธ์ •์ ์ธ ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๊ตฐ์‚ฌ ๋ณด์•ˆ์„ ์ด์œ ๋กœ ํœด๋Œ€ํฐ์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ ์นด๋ฉ”๋ผ ์‚ฌ์šฉ์„ ์ „๋ฉด์ ์œผ๋กœ ํ†ต์ œ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ •์˜

  • ํ˜„์žฌ '๊ตญ๋ฐฉ๋ชจ๋ฐ”์ผ๋ณด์•ˆ' ์–ดํ”Œ๋กœ ๊ตฐ ์žฅ๋ณ‘๋“ค์˜ ์นด๋ฉ”๋ผ ์‚ฌ์šฉ์ด ์ „๋ฉด์ ์œผ๋กœ ์ฐจ๋‹จ๋œ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.
  • ์ถ”์–ต ๋‚จ๊ธฐ๊ธฐ, ๋ถ€๋ชจ๋‹˜๊ป˜ ์ž์‹ ์˜ ๋ชจ์Šต ๋ณด์—ฌ๋“œ๋ฆฌ๊ธฐ, ๊ณต์ต์„ ์œ„ํ•œ ์ œ๋ณด ๋“ฑ ์นด๋ฉ”๋ผ๊ฐ€ ์žˆ์–ด์•ผ๋งŒ ๊ฐ€๋Šฅํ•œ ์ผ๋“ค์„ ํ•  ์ˆ˜ ์—†๊ณ , ์ด๋กœ ์ธํ•œ ์žฅ๋ณ‘๋“ค์˜ ์‚ฌ๊ธฐ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์นด๋ฉ”๋ผ ์‚ฌ์šฉ์„ ์ œ์•ฝ ์—†์ด ํ—ˆ์šฉํ•  ์‹œ ๊ตฐ์‚ฌ๊ธฐ๋ฐ€ ๋“ฑ์˜ ์œ ์ถœ ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌ, ๊ตญ๊ฐ€ ์•ˆ๋ณด์— ์‹ฌ๊ฐํ•œ ์œ„ํ˜‘์ด ๊ฐ€ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด ๋‚ด๊ธฐ

  • "๋ณด์•ˆ ์œ„๋ฐ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์š”์†Œ๋“ค์„ ์‹๋ณ„ํ•˜์—ฌ ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด ์ฃผ๋Š” ์นด๋ฉ”๋ผ๋ฅผ ๋งŒ๋“ค์ž."
  • "๋ชจํ˜ธํ•œ ๊ตฐ์‚ฌ ๋ณด์•ˆ ๊ทœ์ •์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ์–ด ๋ณด์•ˆ ์‚ฌ๊ณ ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜์ž."
  • "๋˜ํ•œ, ์ด๋ฏธ ์—…๋กœ๋“œ ๋œ SNS ๊ฒŒ์‹œ๊ธ€๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ๋‹ค๋ฉด ๋ณด์•ˆ์œ„๋ฐ˜ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฝ๊ณ ํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ž."
๐Ÿ—’์‚ฌ์šฉ์ž ์ •์˜ ๋ฌธ์„œ

ํŽ˜๋ฅด์†Œ๋‚˜

ํŽ˜๋ฅด์†Œ๋‚˜

์‹œ๋‚˜๋ฆฌ์˜ค

#1

๋ง‰ ์ž๋Œ€๋ฐฐ์น˜๋ฅผ ๋ฐ›์€ ์•ˆ์ค€ํ˜ธ ์ด๋ณ‘. ํƒ๋ฐฐ๋กœ ์Šค๋งˆํŠธํฐ์„ ๋ฐ›๋Š”๋‹ค.

  1. ์•ˆ์ค€ํ˜ธ ์ด๋ณ‘์€ ์ฒ˜์Œ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•œ๋‹ค. 0-1. ๊ตฐ๋ฒˆ, ์ด๋ฆ„, ๊ณ„๊ธ‰์„ ์ž…๋ ฅํ•˜์—ฌ ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  2. ๋“œ๋””์–ด ์Šค๋งˆํŠธํฐ์„ ๋ฐ›์•„ ๋‘๊ทผ๋Œ€๋Š” ๋งˆ์Œ์œผ๋กœ ์‚ฌ์ง„์„ ์ฐ๊ธฐ ์œ„ํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ผ ๋‹ค.
  3. ์ดฌ์˜ ๋ชจ๋“œ๋กœ ๋“ค์–ด๊ฐ€์„œ ์นด๋ฉ”๋ผ๋ฅผ ์ผ  ํ›„ ์ƒํ™œ๊ด€ TV๋ฅผ ๋ฐฐ๊ฒฝ์œผ๋กœ ์‚ฌ์ง„์„ ์ฐ๋Š”๋‹ค.
  4. ์ž ์‹œ ํ›„, TV ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ๋ชจ์ž์ดํฌ ๋œ ์‚ฌ์ง„๊ณผ ํ•จ๊ป˜ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
  5. ์‚ฌ์ง„ ์ €์žฅ ์‹œ ์‚ฌ์ง„์— QR์ฝ”๋“œ๊ฐ€ ์ƒˆ๊ฒจ์ง„๋‹ค. QR์ฝ”๋“œ์—๋Š” ์•ˆ์ค€ํ˜ธ ์ด๋ณ‘์˜ ๊ตฐ๋ฒˆ์ด ์•”ํ˜ธํ™”๋˜์–ด ๋“ค์–ด๊ฐ„๋‹ค.
  6. ๋ชจ์ž์ดํฌ๊ฐ€ ๋œ ์‚ฌ์ง„์„ SNS์— ์˜ฌ๋ ค ์ž๋ž‘ํ•œ๋‹ค.

#2

๊ธด ๊ตฐ์ƒํ™œ์„ ๋๋‚ด๊ณ  ๋“œ๋””์–ด ์ „์—ญํ•œ ์ตœ์ข…ํ›ˆ ๋ณ‘์žฅ. ๊ฐ™์ด ์ „์—ญํ•˜๋Š” ๋™๊ธฐ๋“ค๊ณผ ๊ธฐ๋… ์‚ฌ์ง„์„ ์ฐ๋Š”๋‹ค.

  1. ์ตœ์ข…ํ›ˆ ๋ณ‘์žฅ๊ณผ ๋™๊ธฐ๋“ค์€ ๋ถ€๋Œ€ ์•ž์—์„œ ๊ธฐ๋… ์‚ฌ์ง„์„ ์ดฌ์˜ํ•œ๋‹ค.
  2. SNS์— ์ด ๊ธ€์„ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „, ์ตœ์ข…ํ›ˆ ๋ณ‘์žฅ์€ ํ˜น์‹œ ์‚ฌ์ง„์— ๊ตฐ์‚ฌ๋ณด์•ˆ ์œ„๋ฐ˜์€ ์—†๋Š”์ง€ ๊ฑฑ์ •๋œ๋‹ค.
  3. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•œ ํ›„, ๋ฐฉ๊ธˆ ์ „ ์ฐ์€ ์‚ฌ์ง„์„ ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ์„ ํƒํ•œ๋‹ค.
  4. ์ž ์‹œ ํ›„, ๋ถ€๋Œ€๋งˆํฌ์™€ ๊ตฐ ํ‘œ์ง€ํŒ ๋ถ€๋ถ„์ด ๋ชจ์ž์ดํฌ ๋œ ์‚ฌ์ง„๊ณผ ํ•จ๊ป˜ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
  5. ์‚ฌ์ง„ ์ €์žฅ ์‹œ ์‚ฌ์ง„์— QR์ฝ”๋“œ๊ฐ€ ์ƒˆ๊ฒจ์ง„๋‹ค. QR์ฝ”๋“œ์—๋Š” ์ตœ์ข…ํ›ˆ ๋ณ‘์žฅ์˜ ๊ตฐ๋ฒˆ์ด ์•”ํ˜ธํ™”๋˜์–ด ๋“ค์–ด๊ฐ„๋‹ค.
  6. ์ตœ์ข…ํ›ˆ ๋ณ‘์žฅ์€ ์•ˆ์‹ฌํ•˜๋ฉด์„œ SNS์— ์‚ฌ์ง„์„ ์—…๋กœ๋“œ ํ•œ๋‹ค.

#3

์˜ˆ๋น„๊ตฐ ์œ ์‹œ์ง„ ์”จ. ์ธ์Šคํƒ€๊ทธ๋žจ์— ์˜ฌ๋ ธ๋˜ ๊ตฐ๋Œ€ ์‚ฌ์ง„๋“ค์„ ๋ณธ๋‹ค.

  1. ์œ ์‹œ์ง„ ์”จ๋Š” ์ธ์Šคํƒ€๊ทธ๋žจ์— ์˜ฌ๋ ธ๋˜ ํ›ˆ๋ จ ์‚ฌ์ง„์„ ๋ณธ๋‹ค.
  2. ์˜›๋‚  ์‚ฌ์ง„์„ ๋ณด๋˜ ์ค‘, ํ•œ ์‚ฌ์ง„์— ํƒฑํฌ๊ฐ€ ์ฐํžŒ ๊ฒƒ์„ ๋ณธ๋‹ค.
  3. Canary Instagram bot์— ์ด ์‚ฌ์ง„์„ ๊ฒ€ํ† ํ•ด ์ค„ ๊ฒƒ์„ ๋ฉ”์‹œ์ง€๋กœ ์š”์ฒญํ•œ๋‹ค.
  4. ์ž ์‹œ ํ›„, ํƒฑํฌ๊ฐ€ ๋ชจ์ž์ดํฌ ๋œ ์‚ฌ์ง„๊ณผ ํ•จ๊ป˜ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๋ฅผ ๋ฉ”์‹œ์ง€๋กœ ๋ฐ›๋Š”๋‹ค.
  5. ์œ ์‹œ์ง„ ์”จ๋Š” SNS ์‚ฌ์ง„์„ ์ˆ˜์ •ํ•œ๋‹ค.
๐Ÿ“ˆ์‹œ์Šคํ…œ ํ๋ฆ„๋„

User-case Diagram

Sequence Diagram

Architecture

๐Ÿ–Š๊ฐœ๋ฐœ ๋ฌธ์„œ

๐Ÿ“”๊ธฐ๋Šฅ ์„ค๋ช…

๐ŸคCanary app

์•ฑ์„ ์ฒ˜์Œ ์‹คํ–‰ ์‹œ, ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์„ฑ๋ช…๊ณผ ๊ตฐ๋ฒˆ์„ ํ†ตํ•ด ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด๋Š” ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

  • ์นด๋ฉ”๋ผ ๋ชจ๋“œ: ๊ตฐ ๋‚ด๋ถ€์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์นด๋ฉ”๋ผ์ž…๋‹ˆ๋‹ค. ์ดฌ์˜ํ•œ ์‚ฌ์ง„ ์•ˆ์˜ ๋ณด์•ˆ ์œ„๋ฐ˜ ์š”์†Œ๋ฅผ ์‹๋ณ„ ํ›„ ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ์ž๊ฐ€ ์ฐ์€ ์‚ฌ์ง„์€ ์Šค๋งˆํŠธํฐ์— ๋ฐ”๋กœ ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์— ์ „์†ก๋˜์–ด, ๋ณด์•ˆ ์œ„๋ฐ˜ ์š”์†Œ๋ฅผ ์‹๋ณ„ ํ›„ ์ ์ ˆํ•œ ๊ฐ•๋„๋กœ ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

  • ๊ฐค๋Ÿฌ๋ฆฌ ๋ชจ๋“œ: ๊ฐค๋Ÿฌ๋ฆฌ์— ์ด๋ฏธ ์ €์žฅ๋œ ์‚ฌ์ง„์„ ๋ชจ์ž์ดํฌ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ์‹œ, ํ•ด๋‹น ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•˜์—ฌ ์นด๋ฉ”๋ผ๋กœ ์ดฌ์˜ํ•  ๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ ์œ„๋ฐ˜ ์š”์†Œ๋Š” ์‚ฌ์šฉ์ž์˜ ์†Œ์† ๋ถ€๋Œ€ ๋ฐ ์œ„์น˜ ์‹๋ณ„ ๊ฐ€๋Šฅ ์—ฌ๋ถ€, ๊ธฐ๋ฐ€ ์œ ์ถœ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด(์†Œ์ด, ๋ฆฌ๋ณผ๋ฒ„), ๋ฐฉํƒ„์กฐ๋ผ, ๋ถ€๋Œ€๋งˆํฌ, ๋ชจ๋‹ˆํ„ฐ, ๋…ธํŠธ๋ถ, ์„œ๋ฅ˜, ํ‘œ์ง€ํŒ, ํฌ, ์ฐจ๋Ÿ‰, ํƒฑํฌ, ๊ตฐ์šฉ ๋น„ํ–‰๊ธฐ, ๋ฏธ์‚ฌ์ผ, ํ•ญ๊ณต๋ชจํ•จ

๊ตฐ๋ณต์˜ ๊ฒฝ์šฐ ์ดฌ์˜ ๋‹น์‹œ ๋งฅ๋ฝ์— ๋”ฐ๋ผ ๋ณด์•ˆ ์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌ๋Š” ํ•˜์ง€ ์•Š๋˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ถœ ์—ฌ๋ถ€๋ฅผ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜๋ฆฌ๋œ ์‚ฌ์ง„์ด ๋ฐ˜ํ™˜๋  ๋•Œ, ๊ฒ€์ถœ๋œ ๊ฐ์ฒด์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฌธ์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋œ ์‚ฌ์ง„์„ ํ„ฐ์น˜ํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ํšŒ์›๊ฐ€์ž… ์‹œ ์ž…๋ ฅํ•œ ๊ตฐ๋ฒˆ์„ ์•”ํ˜ธํ™”ํ•œ ๊ฐ’์„ ์ด์šฉํ•ด ๋งŒ๋“  QR์ฝ”๋“œ๊ฐ€ ์‚ฌ์ง„์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์ง„ ์ฒ˜๋ฆฌ์ž์˜ ์‹ ์›์„ ํŒŒ์•…ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ๋ˆˆ์œผ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸคAdmin Server

Canary app์˜ ์‚ฌ์šฉ log๋ฅผ ๋ณด๊ณ ์™€ model, dataset version๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” API Server์ž…๋‹ˆ๋‹ค.
node js์—์„œ๋„ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์“ฐ๋Š” ๋งŒํผ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก REST API Server๋กœ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Canary app ์‚ฌ์šฉ ๋‚ ์งœ์™€ ์‚ฌ์šฉ์ž id, ์ด๋ฏธ์ง€์—์„œ ๊ฒ€์ถœ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ๋‚จ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ชจ๋ธ์˜ weight ์ฃผ์†Œ๋ฅผ ์กฐํšŒํ•˜์—ฌ canary server์˜ ๋ชจ๋ธ์„ ์ตœ์‹ ๋ชจ๋ธ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Django๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Django admin ๋˜ํ•œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸคCanary in instagram

์ฃผ์š” sns ์ค‘ ํ•˜๋‚˜์ธ ์ธ์Šคํƒ€๊ทธ๋žจ ์‚ฌ์šฉ์ž์˜ ๋ณด์•ˆ ์œ„๋ฐ˜ ์—ฌ๋ถ€๋ฅผ ํƒ์ง€ํ•˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ direct message๋กœ ๊ฒฝ๊ณ ํ•ด์ค๋‹ˆ๋‹ค.

Canary app์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋™์ผํ•œ model๋กœ ์œ„ํ˜‘ ์š”์†Œ๋ฅผ ํƒ์ง€ํ•˜๊ณ , ์ฒ˜๋ฆฌ๋œ ์‚ฌ์ง„๊ณผ ๊ฒฝ๊ณ ๋ฌธ์„ DM์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ๋™์‹œ์— ์—ฌ๋Ÿฌ Request๊ฐ€ ๋“ค์–ด์™€๋„ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ง€์›๋˜๋Š” ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์€ ๊ฒŒ์‹œ๋ฌผ ๊ฒ€์‚ฌ์™€ ์Šคํ† ๋ฆฌ ๊ฒ€์‚ฌ์ž…๋‹ˆ๋‹ค.

์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ

  • ๋„์›€ (๋˜๋Š” Help)
  1. ์‚ฌ์šฉ์ž์—๊ฒŒ ์‚ฌ์šฉ๋ฒ•์„ DM์œผ๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๋ฌผ ๊ฒ€์‚ฌํ•˜๊ธฐ
  1. Canary๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฆฐ Post ์ค‘, ๊ฒ€์‚ฌ ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ์ตœ๊ทผ 3๊ฐœ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฒ€์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ ์ ˆํžˆ ๋ชจ์ž์ดํฌ ๋œ ์ด๋ฏธ์ง€์™€ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๋ฅผ DM์œผ๋กœ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค. + Canary๊ฐ€ ํ•ด๋‹น Post๋ฅผ Like ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ ๊ฒ€์‚ฌํ•˜๊ธฐ
  1. Canary๊ฐ€ ์‚ฌ์šฉ์ž์˜ Story ์ค‘, osam_canary๊ฐ€ ํƒœ๊ทธ ๋œ story๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฒ€์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ ์ ˆํžˆ ๋ชจ์ž์ดํฌ ๋œ ์ด๋ฏธ์ง€์™€ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๋ฅผ DM์œผ๋กœ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ ๊ตฌ์„ฑ / ํ•„์ˆ˜ ์กฐ๊ฑด ์•ˆ๋‚ด (Prerequisites)

  • ECMAScript 6 ์ง€์› ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์šฉ
  • ๊ถŒ์žฅ: Google Chrome ๋ฒ„์ ผ 77 ์ด์ƒ
  • python >= 3.6
  • pytorch >= 1.7

๐Ÿ”จ๊ธฐ์ˆ  ์Šคํƒ (Technique Used)

Server(back-end)

Node js MySQL Goorm Server Deploy
Node js ์„ค๋ช…

MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ

  • Database ๋ช… : Node_db

  • DB ๊ด€๋ฆฌ์ž ๋ช… : node_admin

  • User Table

    • id : ์œ ์ € id
    • name : ์œ ์ € ์ด๋ฆ„
    • d_num : ์œ ์ € ๊ตฐ๋ฒˆ
    • password : ์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ
    • time : ์œ ์ € ์ƒ์„ฑ TimeStamp
mysql> desc user_t;
+----------+-------------+------+-----+-------------------+----------------+
| Field    | Type        | Null | Key | Default           | Extra          |
+----------+-------------+------+-----+-------------------+----------------+
| id       | int(10)     | NO   | PRI | NULL              | auto_increment |
| name     | varchar(20) | NO   |     | NULL              |                |
| d_num    | varchar(10) | NO   | UNI | NULL              |                |
| password | varchar(70) | NO   |     | NULL              |                |
| time     | datetime    | YES  |     | CURRENT_TIMESTAMP |                |
+----------+-------------+------+-----+-------------------+----------------+

mysql> select * from user_t;
+----+-------------+------------+--------------------------------------------------------------+---------------------+
| id | name        | d_num      | password                                                     | time                |
+----+-------------+------------+--------------------------------------------------------------+---------------------+
| 23 | test user   | 2000001111 | 1234                                                         | 2021-10-15 14:19:17 |
| 24 | 211015User2 | 2001112234 | $2b$08$lXHyNYavVlyr71UyREC54eppxSfTZGq41by4o9VeeqFfmE8oETJbO | 2021-10-15 14:47:18 |
| 25 | ์˜ค์‚ผํ•ต      | 2176032332 | $2b$08$B85JF1HCTvsYcGvZlFuG2OXlBNvascx6sD/La/k1x.VxO35whIa1i | 2021-10-15 14:50:49 |
| 26 | 211012User  | 2012341234 | $2b$08$8OBxs8J3Qu9VKyno4KltXuVykBIOYUgX0Apf9NXdECF4cWt4XzVuC | 2021-10-16 07:53:41 |
+----+-------------+------------+--------------------------------------------------------------+---------------------+
  • Upload Table
    • uploader_d_num : ์—…๋กœ๋“œ ์œ ์ €์˜ ๊ตฐ๋ฒˆ
    • img_id : ์œ ์ € ์—…๋กœ๋“œ img id
    • upload_time : img ์—…๋กœ๋“œ TimeStamp
mysql> desc upload_t;
+----------------+-------------+------+-----+-------------------+-------+
| Field          | Type        | Null | Key | Default           | Extra |
+----------------+-------------+------+-----+-------------------+-------+
| uploader_d_num | varchar(10) | NO   | MUL | NULL              |       |
| img_id         | varchar(30) | NO   | PRI | NULL              |       |
| upload_time    | datetime    | YES  |     | CURRENT_TIMESTAMP |       |
+----------------+-------------+------+-----+-------------------+-------+

mysql> select * from upload_t;
+----------------+-----------------------+---------------------+
| uploader_d_num | img_id                | upload_time         |
+----------------+-----------------------+---------------------+
| 2176000528     | decoded_1634309470576 | 2021-10-15 14:51:10 |
| 2176000528     | decoded_1634309639604 | 2021-10-15 14:53:59 |
| 2176000528     | decoded_1634309884641 | 2021-10-15 14:58:04 |
| 2176000528     | decoded_1634310044242 | 2021-10-15 15:00:44 |
| 2001112234     | decoded_1634370069825 | 2021-10-16 07:41:09 |
| 2001112234     | decoded_1634370191443 | 2021-10-16 07:43:11 |
+----------------+-----------------------+---------------------+

API๋ฌธ์„œ

auth - Authentication Handling

POST /auth/create-user

parameters: {"name": "string", "d_num":"string", "password": "string"}
status: 201
respose: {"status":201,"user_name":name,"msg":'User Created Successful'}

POST /auth/login

parameters: {"d_num": "string", "password": "string"}
status: 200
respose: {"status":200,"msg":"User : ${db_result[0].name} => Login Successful"}

img - Images Handling

POST /img/upload

parameters: {"img_binary":"base64 encoded string","d_num":"string"}
status: 200 -> 204 or 205๋กœ ๋ณ€๊ฒฝ ๊ณ ๋ ค
respose: {"status":200,"imd_id":img_id,"user_d_num":d_num}

GET /img/output-params/:img_id/:d_num

parameters: {"name": "string", "d_num":"string", "password": "string"}
status: 200
respose: {"status":201,"user_name":name,"msg":'User Created Successful'}

Front-end

Flutter Libraries from pub.dev Dart
Flutter / Dart Packages

AI

PyTorch OpenCV CVAT Roboflow
๐Ÿ“AI ์„ค๋ช…

Object detection VS Semantic segmentation

  • Semantic segmentation: ์‚ฌ๋žŒ์„ ์ œ์™ธํ•œ ๋ฐฐ๊ฒฝ์„ ์ฒ˜๋ฆฌ ๋‚œ์ด๋„: ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์Œ(์‚ฌ๋žŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•™์Šต๋œ model ์‚ฌ์šฉ) ์žฅ์ : ๊ธฐ์กด ๋ชจ๋ธ์„ ์‚ฌ์šฉ ์‹œ ์‚ฌ๋žŒ์„ ๊น”๋”ํ•˜๊ฒŒ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅ ๋‹จ์ : ์˜ค์ง ์‚ฌ๋žŒ/๋ฐฐ๊ฒฝ๋งŒ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅ, ์‚ฌ๋žŒ ์•ž์˜ ๋ฌผ์ฒด์— ๋Œ€ํ•ด์„  ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ (ex: ๊ธฐ๋ฐ€ ๋ฌธ์„œ๋ฅผ ๋“ค๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ)

  • Object detection: ํ•™์Šตํ•œ Class๋“ค์„ ์‚ฌ์ง„ ์•ˆ์—์„œ ๊ฒ€์ถœํ•˜์—ฌ ์ฒ˜๋ฆฌ ๋‚œ์ด๋„: ์ƒ๋Œ€์ ์œผ๋กœ ๋†’์Œ(We need to get dataset, annotate them, train model...) ์žฅ์ : ์—ฌ๋Ÿฌ ๋‹ค์–‘ํ•œ class๋“ค์„ ๊ฒ€์ถœํ•˜์—ฌ ์‚ฌ์ง„์˜ ์ƒํ™ฉ์„ ๋Œ€๋žต์ ์œผ๋กœ ํŒŒ์•… ๊ฐ€๋Šฅ, ๋ณด์•ˆ ์œ„๋ฐ˜ ๊ฐ์ฒด๋Š” detect๋งŒ ๋œ๋‹ค๋ฉด ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ(๋ณด์•ˆ์„ฑ), ์‚ฌ๋žŒ ์ด์™ธ์˜ ๊ฐ์ฒด๋“ค๋„ ์‚ด๋ ค๋‚ผ ์ˆ˜ ์žˆ์Œ ๋‹จ์ : segmentation๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ๊น”๋”ํ•˜์ง€ ๋ชปํ•œ ์‚ฌ์ง„ ์ฒ˜๋ฆฌ, ๋†’์€ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋‚œ์ด๋„์™€ ํฐ ์‹œ๊ฐ„ ์†Œ์š”

๋ณด๋‹ค ๋†’์€ ๋ณด์•ˆ์„ฑ์„ ์ค‘์‹œํ•˜๊ธฐ๋กœ ๊ฒฐ์ • --> Object detection

์‚ฌ์šฉ ๋ฐ์ดํ„ฐ์…‹

๋ฌธ์ œ์ 

  1. ๋ฐ์ดํ„ฐ ์ˆ˜ ๋ถ€์กฑ
  2. ๋Œ€๋‹ค์ˆ˜ ๋ฌผ์ฒด๊ฐ€ ์ •์ค‘์•™ ์œ„์น˜
  3. ๋Œ€๋‹ค์ˆ˜ ๋ฌผ์ฒด๊ฐ€ ์‚ฌ์ง„ ์ „์ฒด๋ฅผ ์ฐจ์ง€

ํ•ด๊ฒฐ๋ฐฉ์•ˆ 1 - ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

Orignal Dataset Add more data

ํ•ด๊ฒฐ๋ฐฉ์•ˆ 2, 3 - augmentation ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ

๊ธฐ์กด ๋ณ€๊ฒฝ

์‚ฌ์šฉ ๋ชจ๋ธ

YOLOv5, Efficientnet, SSGlite ๋“ฑ์˜ ๋ชจ๋ธ๋“ค์„ ๊ณ ๋ ค.
์„ฑ๋Šฅ๊ณผ ํ•™์Šต์— ๋“ค์–ด๊ฐ€๋Š” ์‹œ๊ฐ„ ๋“ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ํŒ๋‹จ --> YOLOv5 ๊ฒฐ์ •. (Efficientnet: ํ•™์Šต ์‹œ๊ฐ„์ด ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์ด ์†Œ์š”, SSGlite: YOLOv5๋ณด๋‹ค ๋‚ฎ์€ ์„ฑ๋Šฅ)

๋ฌธ์ œ์ 

  1. ๋‚ฎ์€ ์„ฑ๋Šฅ
  2. ๋ฌด๊ฑฐ์šด ๋ชจ๋ธ (ex. yolov5l6)

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

์„ฑ๋Šฅ ํ–ฅ์ƒ

enhance model precision recall mAP_0.5 mAP_0.5:0.95
Before add dataset yolov5m6 0.602 0.651 0.671 0.535
None (Add dataset) yolov5m6 0.736 0.779 0.815 0.599
mosaic_9 50% yolov5m6 0.756 0.775 0.809 0.602
mosaic_9 100% yolov5m6 0.739 0.813 0.806 0.594
knowledge distillation yolov5m6 0.722 0.822 0.807 0.592
Original Image Result Image

์‹คํ–‰ ๋ฐ ์˜ˆ์‹œ (link)

MLOps

Node js MySQL AWS
๐Ÿ“MLOps ์„ค๋ช…

๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์œผ๋กœ ๋ชจ๋ธ ํ•™์Šต์„ ์ž๋™ํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก REST API์„œ๋ฒ„๋กœ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ, ๋ชจ๋ธ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๊ณ , ์ตœ์‹  ๋ฒ„์ „์˜ ๋ชจ๋ธ์„ detection code๊ฐ€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Model Architecture

APIํ˜ธ์ถœ์„ ํ†ตํ•ด file(dataset) upload, train model, check model version, donwload model, insert & select detection log๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋žต์ ์ธ flow๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. file upload๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์…‹์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. train model์„ ์ด์šฉํ•˜์—ฌ AzureML์— ๋ชจ๋ธ ํ•™์Šต์„ ๋“ฑ๋กํ•˜๊ณ  ํ•™์Šต์ด ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋ธ weight์™€ ํ•จ๊ป˜ ํ‰๊ฐ€ matrix๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  3. node js์—์„œ best model์„ ์กฐํšŒํ•œ ํ›„ ์ž์‹ (node js)๋ณด๋‹ค ์ข‹์€ ๋ชจ๋ธ์ด ์žˆ์œผ๋ฉด ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.
  4. node js์—์„œ ๋ณด์•ˆ์œ„๋ฐ˜๋ฌผ์ฒด๋ฅผ ์ฐพ์œผ๋ฉด log๋ฅผ ๋ณด๋‚ด django์— log๋ฅผ ์Œ“์Šต๋‹ˆ๋‹ค.
  5. api ํ˜ธ์ถœ์„ ํ†ตํ•ด log๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์„œ๋ฒ„๋Š” REST API์„œ๋ฒ„์ด๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ๊นŒ์ง€ ์„ธ์…˜์„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋˜์–ด JWT Authorization์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Admin Page

python manage.py createsuperuser

GET /admin

API๋ฌธ์„œ

account POST /account/login

parameters: {"username": "string", "password": string"}
status: 201
respose: {"message": "string", "token": string}

deeplearning GET /deeplearning/files

status: 200
response: { "count": 0, "next": "string", "previous": "string", "results": [{"file": "string"}]}

POST /deeplearning/files

parameters: {"file": [FILE]}
status: 200
response: {"file": "string"}

GET /deeplearning/log

response {"count": 0, "next": "string", "previous": "string", "results": [{"username": "string", "log": "string", "create_at": "2021-10-14T13:50:37.279Z"}]}

POST /deeplearning/log

parameters: {"username": "string", "log": "string", "create_at": "2021-10-14T13:52:33.709Z"}
status: 201
response: {"username": "string", "log": "string", "create_at": "2021-10-14T13:52:33.709Z"}

GET /deeplearning/models

status: 200
response: {"file": "string", "result": "string", "version": 0, "matrix": 0}

POST /deeplearning/train

headers: {'Authorization': 'Bearer [TOKEN]'}
status: 201
response: {"file": "string"}

Database Diagram

์ฝ”๋“œ ๋ฐ ์‹คํ–‰ (link)


๐Ÿ’ฝ์„ค์น˜ ์•ˆ๋‚ด (Installation Process)

Flutter

์›น์•ฑ์œผ๋กœ ์„ค์น˜ํ•˜๊ธฐ

 git clone https://github.com/osamhack2021/AI_APP_WEB_Canary_Canary.git
 cd AI_APP_WEB_Canary_Canary/APP/myApp
 flutter run -d web-server --web-hostname=0.0.0.0

์•ˆ๋“œ๋กœ์ด๋“œ apk ์„ค์น˜ํ•˜๊ธฐ

apk ํŒŒ์ผ ๋งํฌ
์œ„์˜ ๋งํฌ์— ๋“ค์–ด๊ฐ€์…”์„œ ๋‹ค์šด๋กœ๋“œ ํ›„ ์„ค์น˜ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Node js

AI๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, AI(BE)์˜ requirements๊ฐ€ ์ถฉ์กฑ๋œ ์ƒํƒœ์—์„œ Node ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

cd node_server
npm install # ํ†ตํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค ๋‹ค์šด๋กœ๋“œ
node app.js # (์ผํšŒ์„ฑ ์‹œํ–‰)

Deep learning

git clone https://github.com/osamhack2021/AI_APP_WEB_Canary_Canary/
cd AI_APP_WEB_Canary_Canary/'AI(BE)'/deeplearning/kwoledge_distillation_yolov5/
pip install -r requirements.txt

MLOps

git clone https://github.com/osamhack2021/AI_APP_WEB_Canary_Canary/
cd AI_APP_WEB_Canary_Canary/'AI(BE)'/
pip install -r requirements.txt
python manage.py createsuperuser
python manage.py migrate
python manage.py runserver 0.0.0.0:8080

๐Ÿ“ฑํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ๋ฒ• (Getting Started)

๐ŸคCanary app

  1. ์›น์•ฑ ํ˜น์€ APK๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์•ฑ์— ์ ‘์†ํ•œ๋‹ค
  2. 3์ดˆ ๊ฐ„์˜ Splash ํ™”๋ฉด ์ดํ›„ ํ™ˆํ™”๋ฉด์— ์ ‘์†ํ•œ๋‹ค.
  3. go๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‚ฌ์ง„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ, help๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น github repository๋กœ ์ ‘์†ํ•œ๋‹ค.
  4. ๋กœ๊ทธ์ธ ์ฐฝ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  go๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด option page๋กœ, 'ํšŒ์›๊ฐ€์ž… ํ•˜๋Ÿฌ๊ฐ€๊ธฐ'๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํšŒ์›๊ฐ€์ž… ์ฐฝ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค
  5. ํšŒ์›๊ฐ€์ž… ์ฐฝ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ฐ€์ž…์™„๋ฃŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์‹œ ๋กœ๊ทธ์ธ ์ฐฝ์œผ๋กœ ๋Œ์•„์˜จ๋‹ค
  6. option์ฐฝ์—์„œ๋Š” ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์ง„์„ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Gallery๋ฒ„ํŠผ๊ณผ ์นด๋ฉ”๋ผ๋กœ ๋ฐ”๋กœ ์ฐ์€ ์‚ฌ์ง„์„ ์ฒ˜๋ฆฌํ•˜๋Š” Camera ๋ฒ„ํŠผ ์ค‘์— ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.
  7. ์ด๋ฏธ์ง€๋ฅผ ๊ณ ๋ฅด๊ฑฐ๋‚˜ ์ฐ์€ ํ›„, post server ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด loading ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  8. loading ํ™”๋ฉด์—์„œ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด '๊ฒฐ๊ณผ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ' ๋ฒ„ํŠผ์ด ๋“ฑ์žฅํ•˜๊ณ , ๊ทธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฒ˜๋ฆฌ๋œ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•œ ์ฐฝ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  9. ๋ณด์•ˆ์œ„๋ฐ˜ ๊ฐ€๋Šฅ์„ฑ์ด ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌ๋œ ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ทธ์— ๊ด€๋ จ๋œ ๊ฒฝ๊ณ ๋ฌธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  10. ์ฒ˜๋ฆฌ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„  'save' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.
  11. save ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‚ฌ์šฉ์ž์˜ ์•”ํ˜ธํ™”๋œ ๊ตฐ๋ฒˆ ๊ฐ’์„ ์ด์šฉํ•ด ์ฒ˜๋ฆฌ๋œ QRcode๊ฐ€ ์ด๋ฏธ์ง€์— ์‚ฝ์ž…๋˜๊ณ , ๊ทธ ์‚ฌ์ง„์„ ๊พน ๋ˆ„๋ฅด๋ฉด ์ €์žฅ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š” ์•Œ๋ฆผ์ฐฝ์ด ๋œฌ๋‹ค.
  12. ๋‹ค์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  'Try Again' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

์‹œ์—ฐ ์˜์ƒ

๐ŸคAdmin logweb

git clone https://github.com/osamhack2021/AI_APP_WEB_Canary_Canary/
cd AI_APP_WEB_Canary_Canary/'AI(BE)'/
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver 0.0.0.0:8080

API๋ฌธ์„œ ์ฐธ๊ณ 

๐ŸคCanary in instagram

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

instagram์—์„œ 'osam_canary'๋ฅผ follow ํ•œ ํ›„, ๋ช…๋ น์–ด๋ฅผ Direct Message๋กœ ๋ณด๋‚ธ๋‹ค

์ง€์› ๋ช…๋ น์–ด
  1. ๊ฒŒ์‹œ๋ฌผ ๊ฒ€์‚ฌ ๋ช…๋ น์–ด(์ตœ๋Œ€ 3๊ฐœ์”ฉ) : ๊ฒŒ์‹œ๋ฌผ ๊ฒ€์‚ฌํ•˜๊ธฐ
  2. ์Šคํ† ๋ฆฌ ๊ฒ€์‚ฌ ๋ช…๋ น์–ด : ์Šคํ† ๋ฆฌ ๊ฒ€์‚ฌํ•˜๊ธฐ

2.1 ์Šคํ† ๋ฆฌ ๊ฒ€์‚ฌ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ : @osam_canary ๊ณ„์ •์„ ์Šคํ† ๋ฆฌ์— ํƒœ๊ทธํ•ด์ฃผ์„ธ์š”!
2.2 ์Šคํ† ๋ฆฌ๋Š” ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 10๊ฐœ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ


๐Ÿ“ˆํ”„๋กœ์ ํŠธ ์ „๋ง

  • ์žฅ๋ณ‘ ์‚ฌ๊ธฐ์ง„์ž‘
    ๊ตฐ ์žฅ๋ณ‘๋“ค์€ ๋ณธ ์–ดํ”Œ์„ ํ™œ์šฉํ•จ์œผ๋กœ์จ ๊ตฐ ๋‚ด๋ถ€์—์„œ๋„ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ œํ•œ๋ฐ›๊ณ  ์žˆ๋˜ ์ž์œ ์— ๋Œ€ํ•œ ๊ถŒ๋ฆฌ๋ฅผ ์ผ๋ถ€ ์ธ์ •ํ•จ์œผ๋กœ์จ ์žฅ๋ณ‘๋“ค์— ๋Œ€ํ•œ ๋Œ€์šฐ๊ฐ€ ์ ์ฐจ ๋‚˜์•„์ง€๋Š” ๊ฒƒ์€ ๋ฌผ๋ก , ์žฅ๋ณ‘๋“ค์˜ ์‚ฌ๊ธฐ๊ฐ€ ์˜ค๋ฅด๊ณ  ๊ทธ๊ฐ„์˜ ์†๋ฐ•๊ฐ์—์„œ ์ผ๋ถ€ ๋ฒ—์–ด๋‚˜ ๋ณด๋‹ค ํ™œ๊ธฐ์ฐจ๊ฒŒ ๋ณ‘์˜์ƒํ™œ์„ ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฆฌ๋ผ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

  • ๋ณ‘์˜์ƒํ™œ ๊ฐœ์„ 
    ์นด๋ฉ”๋ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉด, ์ตœ๊ทผ ๋…ผ๋ž€์ด ์ผ์—ˆ๋˜ ๊ตฐ ๋ถ€์‹ค๊ธ‰์‹์ด๋‚˜ ๊ตฐ ๋‚ด์—์„œ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ข… ๋ถ€์กฐ๋ฆฌ/์‚ฌ๊ฑด์‚ฌ๊ณ  ๋“ฑ์˜ ํ˜„์žฅ์„ ์ดฌ์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ง€์†์ ์œผ๋กœ ๊ตฐ ๋‚ด์˜ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ณ , ๋ถ€์กฐ๋ฆฌ๋‚˜ ์‚ฌ๊ฑด์‚ฌ๊ณ ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ๋ณ‘์˜์ƒํ™œ ๊ฐœ์„ ์ด ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

  • SNS ๋ณด์•ˆ ๊ฐ•ํ™”
    Instagram์˜ Canary ๊ณ„์ •์„ ํŒ”๋กœ์šฐํ•œ ๊ณ„์ •๋“ค์˜ ์Šคํ† ๋ฆฌ, ๊ฒŒ์‹œ๊ธ€์„ ์Šค์บ”ํ•˜๋ฉฐ ๋ณด์•ˆ ์œ„๋ฐ˜ ์š”์†Œ๊ฐ€ ์—†๋Š”์ง€ ์ง€์†์ ์œผ๋กœ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ณด์•ˆ ์ธ์‹ ๊ฐ•ํ™”
    ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ž์‹ ์ด ์ฐ๊ฑฐ๋‚˜ ์—…๋กœ๋“œํ•œ ์‚ฌ์ง„์ด sns ๋ณด์•ˆ์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์œ„๋ฐ˜ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž์˜ ๋ณด์•ˆ ์ธ์‹์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ๊ฐœ์„ ํ•  ์ 

  • ๋ชจ๋ธ ์„ฑ๋Šฅ ๊ฐœ์„  ๊ตฐ ๋‚ด ์‚ฌ์ด๋ฒ„์ง€์‹์ •๋ณด๋ฐฉ์ด๋ผ๋Š” ๋‚™ํ›„๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ์ด๋งˆ์ €๋„ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฐ ์žฅ๋ณ‘๋“ค๋กœ ์ด๋ค„์ง„ ํŒ€, ๋ณด์•ˆ์ƒ์˜ ๋ฌธ์ œ๋กœ ์ธํ•œ ๊ตญ๋‚ด ๊ตฐ ๊ด€๋ จ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์…‹์˜ ๋นˆ์•ฝํ•จ ๋“ฑ, ์•ฝ 1๋‹ฌ ๋™์•ˆ์˜ ์˜จ๋ผ์ธ ํ•ด์ปคํ†ค์œผ๋กœ๋Š” ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์„ฑ๋Šฅ์„ ๋ฝ‘์•„๋‚ด๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜, ์ดˆ๊ธฐ recall ์ˆ˜์น˜ 0.65 --> ๋ฐ์ดํ„ฐ์…‹ ์ฆ๊ฐ• ํ›„ 0.77 --> annotation๊ณผ self distillation ์ ์šฉ ํ›„ 0.82.
    YOLOv5 ๋ชจ๋ธ์„ ์›ํ™œํžˆ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ํ•˜๋‚˜์˜ class ๋‹น ์ ์–ด๋„ 1300์žฅ ์ด์ƒ์˜ ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•˜๋‚˜, ๋ฐ์ดํ„ฐ์…‹ ์ฆ๊ฐ• ํ›„์—๋„ ์ €ํฌ๋Š” ํ•˜๋‚˜์˜ class ๋‹น ์•ฝ 1000์—ฌ์žฅ ๋ฟ์ด์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹ค์ œ ์ƒํ™ฉ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ€์กฑํ•ด ์„ฑ๋Šฅ์ด ๋‚ฎ์•„์ง€๋Š” ํ˜„์ƒ๋„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์ง€์†์ ์ธ ์šด์˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ ์‹œ ์„ฑ๋Šฅ์ด ์ƒ์Šนํ•  ๊ฒƒ์ด๊ณ  ์ด๋ฅผ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์…‹์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค๊ฐ€๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

  • ์งง์ง€ ์•Š์€ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ด๋Š” 1. ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์ด ๋‚ฎ๊ณ  2. node js์™€ pytorch๊ฐ„ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•จ์œผ๋กœ ํŒจํ‚ค์ง€๋กœ๋“œ, ๋ชจ๋ธ๋กœ๋“œ์‹œ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
    ๋”ฐ๋ผ์„œ Javascript์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ tensorflow.js๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น ํ›„, semaphore์„ ๋ณ€ํ˜•ํ•˜์—ฌ ํ™œ์šฉํ•˜๋ฉด ์‹คํ–‰์‹œ๊ฐ„์ด ์ค„์–ด๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    ๋˜ํ•œ ํ˜„์žฌ๋Š” knowledge distillation๋งŒ ์ ์šฉํ–ˆ์ง€๋งŒ ์ถ”ํ›„์— pruning, quantization์„ ์ ์šฉํ•˜๋ฉด ๋™์‹œ์ ‘์†์ž์ˆ˜๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•„์ดํฐ ์‚ฌ์šฉ์ž ์ง€์›
    Canary app์˜ ๊ฒฝ์šฐ Android์šฉ์œผ๋กœ๋งŒ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Instagram siren์„ ํ†ตํ•ด ์•„์ดํฐ ์‚ฌ์šฉ์ž๋„ ๊ฐ„์ ‘์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์ถ”ํ›„ OS ์ „์šฉ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜์—ฌ
    ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์›ํ™œํžˆ ์ด์šฉํ•˜๊ฒŒ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก๋ฐœ์ „ ๊ฐ€๋Šฅ ๋ฐฉํ–ฅ

  • ํƒ€ SNS์™€์˜ ์—ฐ๊ณ„
    ํ˜„์žฌ Instagram ๊ณ„์ •๋งŒ ์ง€์›ํ•˜๋Š” ๊ฒฝ๋ณด๊ธฐ ๊ธฐ๋Šฅ์„ facebook ๋“ฑ์˜ ํƒ€ SNS์—์„œ๋„ ์ง€์›ํ•จ์œผ๋กœ์จ ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตญ๋ฐฉ๋ชจ๋ฐ”์ผ๋ณด์•ˆ ์–ดํ”Œ ์—ฐ๊ณ„
    ํ˜„์žฌ ์นด๋ฉ”๋ผ ์ฐจ๋‹จ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ํ•ด๋‹น ์–ดํ”Œ๊ณผ ์—ฐ๊ณ„ํ•จ์œผ๋กœ์จ ์นด๋ฉ”๋ผ ์ฐจ๋‹จ/ํ•ด์ œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์‚ฌ์šฉ์ž์˜ ์–ดํ”Œ ๊ฐ•์ œ์ข…๋ฃŒ๋ฅผ ๋ง‰๊ณ , ์‚ฌ์šฉ์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตญ๋ฐฉ์ธ์‚ฌ์ •๋ณด์ฒด๊ณ„ ์—ฐ๊ณ„
    ์–ดํ”Œ ์ตœ์ดˆ ์‹คํ–‰ ์‹œ ์ด๋ฆ„๊ณผ ๊ตฐ๋ฒˆ์„ ์ด์šฉํ•ด ๊ฐ€์ž…ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ฐฉ์•ˆํ•˜์—ฌ, ๊ตญ๋ฐฉ์ธ์‚ฌ์ •๋ณด์ฒด๊ณ„์™€ ์—ฐ๊ณ„ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๊ฐ€ ์ˆ˜์›”ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ ํ•ด๋‹น ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ณด์•ˆ ์‚ฌ์ง„์„ ์ผ๋ฐ˜ ์„œ๋ฒ„์— ์ €์žฅํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฒ€์ถœ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ์ฆ๊ฐ€/๋ณ€๊ฒฝ์œผ๋กœ ํƒ€ ๋ถ„์•ผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
    Object detection์˜ ์žฅ์ ์ด ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ €ํฌ ํŒ€์€ ๊ตฐ ๋ณด์•ˆ ๋ถ€๋ถ„์— ์ดˆ์ ์„ ๋งž์ถฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™•์žฅํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”? ์ž์‹ ์ด ๊ฒ€์ถœํ•˜๊ณ  ๋ชจ์ž์ดํฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ์ฒด์˜ dataset์„ ๋ชจ๋ธ์— ํ•™์Šต์‹œํ‚ค๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ž๋™์œผ๋กœ ๋ชจ์ž์ดํฌ ํ•ด ์ฃผ๋Š” ์‹œ์Šคํ…œ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค!
    ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฐ๋Œ€๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์กฐ์ง์—์„œ์˜ ๋ณด์•ˆ ์œ„๋ฐ˜ ๊ฐ์ฒด๋ฅผ ๋ชจ์ž์ดํฌํ•  ๋•Œ, ์‚ฌ์šฉ์ž์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ž”์ธํ•˜๊ฑฐ๋‚˜ ์„ ์ •์ ์ธ ์žฅ๋ฉด ๋“ฑ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ๋“ฑ์—์„œ ์ด ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ•‹ํŒ€ ์ •๋ณด (Team Information)

์™œ ๊ตฐ์ธ๋“ค์€ ์นด๋ฉ”๋ผ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์“ฐ์ง€ ๋ชป ํ• ๊นŒ?
์–ธ์ œ๋ถ€ํ„ด๊ฐ€ ๋“ค์—ˆ๋˜ ์ด ์˜๋ฌธ์ด ํ•ด์ปคํ†ค ๊ฒฝํ—˜์กฐ์ฐจ ์—†๋Š” ์œก๊ตฐ ๋ฐ ๊ตญ์ง๋ถ€๋Œ€ ๋ณ‘์‚ฌ 6๋ช…์„ ๋ชจ์ด๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ตฐ์ธ๋“ค์˜ ์ž์œ ๋กœ์šด ์นด๋ฉ”๋ผ ์‚ฌ์šฉ๊ณผ, ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” ๊ตญ๊ฐ€ ๋ณด์•ˆ์„ ์œ„ํ•ด.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ, Team Canary์ž…๋‹ˆ๋‹ค.

Name Role github e-mail
Jaeyo Shin Leader / Deep Learning (Pytorch)
June Seo Back-End (node.js)
Huijae Ryu Front-End (Flutter)
Chanho Jung Deep Learning (Pytorch)
Donghwan Chi Deep Learning (Pytorch)
Wonbeom Jang Deep Learning (Pytorch)
MLOps (Django)

๊ฐœ๋ฐœ ๋ฐ ํ˜‘์—… ํ”Œ๋žซํผ

Azure ML Studio Github Google meet
GoormIDE Slack Zoom> FlutLab

์ €์ž‘๊ถŒ ๋ฐ ์‚ฌ์šฉ๊ถŒ ์ •๋ณด (Copyleft / End User License)

This project is licensed under the terms of the GNU GPLv3 license.

GPL ์„ ํƒ์ด์œ 

์นด๋‚˜๋ฆฌ์•„๊ฐ€ ์“ด ์˜คํ”ˆ์†Œ์Šค ์ค‘ yolov5์™€ Distilling-Object-Detectors๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ๊ฐ๊ฐ GNU GPL, MIT ๋ผ์ด์„ผ์Šค๋ฅผ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MIT ๋ผ์ด์„ผ์Šค๋Š” ์ƒ์—…์ ์ด์šฉ, ์†Œ์Šค์ฝ”๋“œ ๊ณต๊ฐœ์˜๋ฌด์—์„œ ์ž์œ ๋กœ์šฐ๋‚˜, GNU GPL ๋ผ์ด์„ผ์Šค๋Š” ์ฝ”๋“œ์˜ ์ƒ์—…์ ์œผ๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‚˜ ๋ณ€๊ฒฝ๋œ ํ”„๋กœ๊ทธ๋žจ ์—ญ์‹œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ '์นด๋‚˜๋ฆฌ์•„'๋Š” GNU GPL์ด ๋” ๊ฐ•๋ ฅํ•œ ๋ผ์ด์„ผ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— GNU GPL ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฅด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 93.7%
  • JavaScript 3.5%
  • HTML 1.2%
  • Dockerfile 0.9%
  • Shell 0.4%
  • Dart 0.2%
  • Other 0.1%