์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๋ฐฐํฌ๋ฅผ ์œ„ํ•ด TFLite๋กœ ๋ชจ๋ธ ๋‚ด๋ณด๋‚ด๊ธฐ( YOLOv8 )์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ

TFLite ๋กœ๊ณ 

์—ฃ์ง€ ๋””๋ฐ”์ด์Šค๋‚˜ ์ž„๋ฒ ๋””๋“œ ๋””๋ฐ”์ด์Šค์— ์ปดํ“จํ„ฐ ๋น„์ „ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด ์›ํ™œํ•œ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

TensorFlow Lite ๋˜๋Š” TFLite ๋‚ด๋ณด๋‚ด๊ธฐ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋ธ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ultralytics YOLOv8 ๋ชจ๋ธ์„ ์—ฃ์ง€ ๋””๋ฐ”์ด์Šค ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฌผ์ฒด ๊ฐ์ง€ ๋ฐ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์™€ ๊ฐ™์€ ์ž‘์—…์— ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์—์ง€ ๋””๋ฐ”์ด์Šค์—์„œ ๋ชจ๋ธ์ด ๋” ์‰ฝ๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋ธ์„ TFLite ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

TFLite๋กœ ๋‚ด๋ณด๋‚ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

2017๋…„ 5์›”์— Google ( TensorFlow )์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ผ๋ถ€๋กœ ๋„์ž…ํ•œ TensorFlow Lite ๋˜๋Š” ์ค„์—ฌ์„œ TFLite๋Š” ์—ฃ์ง€ ์ปดํ“จํŒ…์ด๋ผ๊ณ ๋„ ํ•˜๋Š” ์˜จ๋””๋ฐ”์ด์Šค ์ถ”๋ก ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์˜คํ”ˆ ์†Œ์Šค ๋”ฅ ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋ฐ”์ผ, ์ž„๋ฒ ๋””๋“œ, IoT ๋””๋ฐ”์ด์Šค๋Š” ๋ฌผ๋ก  ๊ธฐ์กด ์ปดํ“จํ„ฐ์—์„œ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

TensorFlow Lite๋Š” ์ž„๋ฒ ๋””๋“œ Linux, Android, iOS, MCU ๋“ฑ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ TFLite๋กœ ๋‚ด๋ณด๋‚ด๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์˜คํ”„๋ผ์ธ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TFLite ๋ชจ๋ธ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

TFLite ๋ชจ๋ธ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋ฐ”์ผ, ์ž„๋ฒ ๋””๋“œ ๋ฐ ์—์ง€ ๋””๋ฐ”์ด์Šค์—์„œ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜์—ฌ ์˜จ๋””๋ฐ”์ด์Šค ๋จธ์‹  ๋Ÿฌ๋‹์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์˜จ๋””๋ฐ”์ด์Šค ์ตœ์ ํ™”: TFLite๋Š” ์˜จ๋””๋ฐ”์ด์Šค ML์— ์ตœ์ ํ™”๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , ๊ฐœ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ๊ฐœ์ธ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๋ฉฐ, ๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ์ง€์›: TFLite๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ Android, iOS, ์ž„๋ฒ ๋””๋“œ Linux ๋ฐ ๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์›: TFLite๋Š” Java, Swift, Objective-C, C++ ๋ฐ Python ๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

  • ๊ณ ์„ฑ๋Šฅ: ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ๋ฐ ๋ชจ๋ธ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

TFLite์˜ ๋ฐฐํฌ ์˜ต์…˜

๋‚ด๋ณด๋‚ด๊ธฐ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์ „์— YOLOv8 ๋ชจ๋ธ์„ TFLite ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด TFLite ๋ชจ๋ธ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ดํ•ดํ•ฉ์‹œ๋‹ค.

TFLite๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์˜จ๋””๋ฐ”์ด์Šค ๋ฐฐํฌ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • Android ๋ฐ iOS ์œผ๋กœ ๋ฐฐํฌ: TFLite๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Android ๋ฐ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ชจ๋‘ ์—์ง€ ๊ธฐ๋ฐ˜ ์นด๋ฉ”๋ผ ํ”ผ๋“œ์™€ ์„ผ์„œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฌผ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TFLite๋Š” Swift ๋ฐ Objective-C๋กœ ์ž‘์„ฑ๋œ ๊ธฐ๋ณธ iOS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ Android ๋ฐ iOS ํ”Œ๋žซํผ์— TensorFlow Lite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜

  • ์ž„๋ฒ ๋””๋“œ Linux๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ: Ultralytics ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์—์„œ ์ถ”๋ก ์„ ์‹คํ–‰ํ•ด๋„ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ์†๋„ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ, ๋‚ด๋ณด๋‚ธ TFLite ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก  ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Coral Edge TPU ์žฅ์น˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋”์šฑ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ์™€ ํ•จ๊ป˜ ๋ฐฐํฌ: TFLite ๋ชจ๋ธ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ช‡ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ์— ๋ถˆ๊ณผํ•œ ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ๊ธฐํƒ€ ๋””๋ฐ”์ด์Šค์—๋„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”์–ด ๋Ÿฐํƒ€์ž„์€ Arm Cortex M3์—์„œ 16KB์— ๋ถˆ๊ณผํ•˜๋ฉฐ ๋งŽ์€ ๊ธฐ๋ณธ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜ ์ฒด์ œ ์ง€์›, ํ‘œ์ค€ C ๋˜๋Š” C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

TFLite๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ: YOLOv8 ๋ชจ๋ธ ๋ณ€ํ™˜ํ•˜๊ธฐ

์˜จ๋””๋ฐ”์ด์Šค ๋ชจ๋ธ ์‹คํ–‰ ํšจ์œจ์„ ๊ฐœ์„ ํ•˜๊ณ  TFLite ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜

ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

์„ค์น˜

# Install the required package for YOLOv8
pip install ultralytics

์„ค์น˜ ๊ณผ์ •๊ณผ ๊ด€๋ จ๋œ ์ž์„ธํ•œ ์ง€์นจ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” Ultralytics ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. YOLOv8 ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ํŒ์„ ํ™•์ธํ•˜์„ธ์š”.

์‚ฌ์šฉ๋ฒ•

์‚ฌ์šฉ ์ง€์นจ์„ ์‚ดํŽด๋ณด๊ธฐ ์ „์— ๋ชจ๋“  Ultralytics YOLOv8 ๋ชจ๋ธ์—์„œ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„ ํƒํ•œ ๋ชจ๋ธ์ด ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š”์ง€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

์‚ฌ์šฉ๋ฒ•

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8n.pt")

# Export the model to TFLite format
model.export(format="tflite")  # creates 'yolov8n_float32.tflite'

# Load the exported TFLite model
tflite_model = YOLO("yolov8n_float32.tflite")

# Run inference
results = tflite_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to TFLite format
yolo export model=yolov8n.pt format=tflite  # creates 'yolov8n_float32.tflite'

# Run inference with the exported model
yolo predict model='yolov8n_float32.tflite' source='https://ultralytics.com/images/bus.jpg'

๋‚ด๋ณด๋‚ด๊ธฐ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ด€๋ จ ๋ฌธ์„œ ํŽ˜์ด์ง€(Ultralytics )๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‚ด๋ณด๋‚ธ YOLOv8 TFLite ๋ชจ๋ธ ๋ฐฐํฌํ•˜๊ธฐ

Ultralytics YOLOv8 ๋ชจ๋ธ์„ TFLite ํ˜•์‹์œผ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ๋‚ด๋ณด๋‚ธ ํ›„์—๋Š” ์ด์ œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TFLite ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ด๊ณ  ๊ถŒ์žฅ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์ด์ „ ์‚ฌ์šฉ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์— ์„ค๋ช…๋œ ๋Œ€๋กœ YOLO("model.tflite") ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋‹ค์–‘ํ•œ ์„ค์ •์—์„œ TFLite ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ง€์นจ์€ ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”:

  • Android: TensorFlow Lite๋ฅผ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ๋กœ, ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • ์—”๋“œํˆฌ์—”๋“œ ์˜ˆ์‹œ: ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋ฐ”์ผ ๋ฐ ์—ฃ์ง€ ๋””๋ฐ”์ด์Šค์—์„œ ๋จธ์‹  ๋Ÿฌ๋‹ ํ”„๋กœ์ ํŠธ์— TensorFlow Lite๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ์„ค๊ณ„๋œ ์‹ค์šฉ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํŠœํ† ๋ฆฌ์–ผ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค์–‘ํ•œ TensorFlow Lite ์˜ˆ์ œ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” TFLite ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์— ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. Ultralytics YOLOv8 ๋ชจ๋ธ์„ TFLite ๋ชจ๋ธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด YOLOv8 ๋ชจ๋ธ์˜ ํšจ์œจ์„ฑ๊ณผ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ๋ณด๋‹ค ํšจ๊ณผ์ ์ด๊ณ  ์—ฃ์ง€ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ TFLite ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋˜ํ•œ ๋‹ค๋ฅธ Ultralytics YOLOv8 ์—ฐ๋™ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์—ฐ๋™ ๊ฐ€์ด๋“œ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”. ์œ ์šฉํ•œ ์ •๋ณด์™€ ์ธ์‚ฌ์ดํŠธ๊ฐ€ ๊ฐ€๋“ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

YOLOv8 ๋ชจ๋ธ์„ TFLite ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

YOLOv8 ๋ชจ๋ธ์„ TFLite ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๋ ค๋ฉด Ultralytics ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

pip install ultralytics

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค:

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8n.pt")

# Export the model to TFLite format
model.export(format="tflite")  # creates 'yolov8n_float32.tflite'

CLI ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

yolo export model=yolov8n.pt format=tflite  # creates 'yolov8n_float32.tflite'

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ฐ€์ด๋“œ(Ultralytics )๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

YOLOv8 ๋ชจ๋ธ ๋ฐฐํฌ์— TensorFlow Lite๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ๋‚˜์š”?

TensorFlow ๋ผ์ดํŠธ(TFLite)๋Š” ์˜จ๋””๋ฐ”์ด์Šค ์ถ”๋ก ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์˜คํ”ˆ ์†Œ์Šค ๋”ฅ ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ชจ๋ฐ”์ผ, ์ž„๋ฒ ๋””๋“œ ๋ฐ IoT ๋””๋ฐ”์ด์Šค์— YOLOv8 ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์˜จ๋””๋ฐ”์ด์Šค ์ตœ์ ํ™”: ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ: Android , iOS, ์ž„๋ฒ ๋””๋“œ Linux ๋ฐ MCU๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ: ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์†๋„์™€ ํšจ์œจ์„ฑ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ TFLite ๊ฐ€์ด๋“œ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์—์„œ YOLOv8 TFLite ๋ชจ๋ธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ, Raspberry Pi์—์„œ YOLOv8 TFLite ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜์—ฌ ์ถ”๋ก  ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ชจ๋ธ์„ TFLite ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ TensorFlow ๋ผ์ดํŠธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์—์„œ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด Coral Edge TPU ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‹จ๊ณ„๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

YOLOv8 ์˜ˆ์ธก์— ๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ TFLite ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ, TFLite๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œํ•œ๋œ ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. TFLite์˜ ์ฝ”์–ด ๋Ÿฐํƒ€์ž„์€ Arm Cortex M3์—์„œ 16KB์˜ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ํ•„์š”ํ•˜๋ฉฐ ๊ธฐ๋ณธ YOLOv8 ๋ชจ๋ธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œํ•œ์˜ ์—ฐ์‚ฐ ๋Šฅ๋ ฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–์ถ˜ ๋””๋ฐ”์ด์Šค์— ๋ฐฐํฌํ•˜๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ์šฉ TFLite ๋งˆ์ดํฌ๋กœ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‚ด๋ณด๋‚ธ TFLite YOLOv8 ๋ชจ๋ธ๊ณผ ํ˜ธํ™˜๋˜๋Š” ํ”Œ๋žซํผ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

TensorFlow ๋ผ์ดํŠธ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋‹ค์Œ์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์— YOLOv8 ๋ชจ๋ธ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • Android ๋ฐ iOS: TFLite Android ๋ฐ iOS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์›.
  • ์ž„๋ฒ ๋””๋“œ Linux: ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์™€ ๊ฐ™์€ ๋‹จ์ผ ๋ณด๋“œ ์ปดํ“จํ„ฐ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ: ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œํ•œ๋œ MCU์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž์„ธํ•œ ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

YOLOv8 ๋ชจ๋ธ์„ TFLite๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

YOLOv8 ๋ชจ๋ธ์„ TFLite๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ํŒจํ‚ค์ง€ ํ˜ธํ™˜์„ฑ์„ ํ™•์ธํ•˜์„ธ์š”: ํ˜ธํ™˜๋˜๋Š” ๋ฒ„์ „์˜ Ultralytics ๋ฐ TensorFlow ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ๋ชจ๋ธ ์ง€์›: ์—ฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜์—ฌ ํŠน์ • YOLOv8 ๋ชจ๋ธ์ด TFLite ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ํŒ์€ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.



์ƒ์„ฑ 2024-03-01, ์—…๋ฐ์ดํŠธ 2024-07-05
์ž‘์„ฑ์ž: glenn-jocher (6), abirami-vina (1)

๋Œ“๊ธ€