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

๋ฐฐํฌ๋ฅผ ์œ„ํ•ด 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: ๋‹จ๊ณ„๋ณ„ ์ง€์นจ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž์šฉ ์ƒ์„ธ ๊ฐ€์ด๋“œ( TensorFlow )์—์„œ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ผ์ดํŠธ ๋ชจ๋ธ ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์„ธ์š”.

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

์š”์•ฝ

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

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

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



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

๋Œ“๊ธ€