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

์†Œ๋‹ˆ IMX500 ๋‚ด๋ณด๋‚ด๊ธฐ ๋Œ€์ƒ Ultralytics YOLOv8

์ด ๊ฐ€์ด๋“œ๋Š” ์†Œ๋‹ˆ IMX500 ์„ผ์„œ๊ฐ€ ํƒ‘์žฌ๋œ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด AI ์นด๋ฉ”๋ผ์— Ultralytics YOLOv8 ๋ชจ๋ธ์„ ๋‚ด๋ณด๋‚ด๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

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

๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด AI ์นด๋ฉ”๋ผ

IMX500์œผ๋กœ ๋‚ด๋ณด๋‚ด์•ผ ํ•˜๋Š” ์ด์œ 

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

์†Œ๋‹ˆ IMX500 ๋‚ด๋ณด๋‚ด๊ธฐ( YOLOv8 ๋ชจ๋ธ์šฉ)

IMX500์€ ๋””๋ฐ”์ด์Šค๊ฐ€ ํด๋ผ์šฐ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†์ด ์„ผ์„œ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ํ˜์‹ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

IMX500 ์ฃผ์š” ๊ธฐ๋Šฅ:

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถœ๋ ฅ: IMX500์€ ์ด๋ฏธ์ง€๋งŒ ์ „์†กํ•˜๋Š” ๋Œ€์‹  ์ด๋ฏธ์ง€์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ถ”๋ก  ๊ฒฐ๊ณผ)๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋Œ€์—ญํญ์„ ์ค„์ด๋ฉฐ ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฌธ์ œ ํ•ด๊ฒฐ: IMX500์€ ๋””๋ฐ”์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ์ธ์› ์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ์žฌ์‹ค์ž ์ถ”์ ๊ณผ ๊ฐ™์€ ์‚ฌ๋žŒ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ: ๋น ๋ฅธ ์˜จ-์„ผ์„œ ์ฒ˜๋ฆฌ๋กœ ์‹ค์‹œ๊ฐ„ ์˜์‚ฌ ๊ฒฐ์ •์„ ์ง€์›ํ•˜์—ฌ ์ž์œจ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ์—ฃ์ง€ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—: ์ตœ์ƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋ชจ๋ธ ๊ต์œก ๊ฐ€์ด๋“œ, ๋ฐ์ดํ„ฐ ์ค€๋น„ ๊ฐ€์ด๋“œ, ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ YOLOv8 ๋ชจ๋ธ์„ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

์‚ฌ์šฉ ์˜ˆ

Ultralytics YOLOv8 ๋ชจ๋ธ์„ IMX500 ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ๋‚ด๋ณด๋‚ธ ๋ชจ๋ธ๋กœ ์ถ”๋ก ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

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

์˜ˆ

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model
model.export(format="imx")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolov8n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolov8n.pt format=imx

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

๋‚ด๋ณด๋‚ด๊ธฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ •๋Ÿ‰ํ™” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ONNX ๋ชจ๋ธ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ํ•จ๊ป˜ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. <model-name>_imx_model. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋Š” packerOut.zip ํŒŒ์ผ์€ IMX500 ํ•˜๋“œ์›จ์–ด์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์„ ํŒจํ‚ค์ง•ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ <model-name>_imx_model ํด๋”์—๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ(labels.txt) ๋ชจ๋ธ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ ˆ์ด๋ธ”์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

yolov8n_imx_model
โ”œโ”€โ”€ dnnParams.xml
โ”œโ”€โ”€ labels.txt
โ”œโ”€โ”€ packerOut.zip
โ”œโ”€โ”€ yolov8n_imx.onnx
โ”œโ”€โ”€ yolov8n_imx500_model_MemoryReport.json
โ””โ”€โ”€ yolov8n_imx500_model.pbtxt

์ธ์ˆ˜

๋ชจ๋ธ์„ IMX500 ํฌ๋งท์œผ๋กœ ๋‚ด๋ณด๋‚ผ ๋•Œ ๋‹ค์–‘ํ•œ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

ํ‚ค ๊ฐ€์น˜ ์„ค๋ช…
format imx ๋‚ด๋ณด๋‚ผ ํ˜•์‹(imx)
int8 True ๋ชจ๋ธ์— INT8 ์–‘์žํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค: True)
imgsz 640 ๋ชจ๋ธ ์ž…๋ ฅ์šฉ ์ด๋ฏธ์ง€ ํฌ๊ธฐ(๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค: 640)

๋ฐฐํฌ ์‹œ IMX500 ๋‚ด๋ณด๋‚ด๊ธฐ ์‚ฌ์šฉ

Ultralytics YOLOv8n ๋ชจ๋ธ์„ IMX500 ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ธ ํ›„, ์ถ”๋ก ์„ ์œ„ํ•ด ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด AI ์นด๋ฉ”๋ผ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋“œ์›จ์–ด ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

์•„๋ž˜ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

  1. ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด 5 ๋˜๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด 4 ๋ชจ๋ธ B
  2. ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด AI ์นด๋ฉ”๋ผ

๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด AI ์นด๋ฉ”๋ผ๋ฅผ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์˜ 15ํ•€ MIPI CSI ์ปค๋„ฅํ„ฐ์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์˜ ์ „์›์„ ์ผญ๋‹ˆ๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

์ฐธ๊ณ 

์ด ๊ฐ€์ด๋“œ๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด 5์—์„œ ์‹คํ–‰๋˜๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด OS ๋ถ์›œ์œผ๋กœ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ํ„ฐ๋ฏธ๋„ ์ฐฝ์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

sudo apt update && sudo apt full-upgrade

2๋‹จ๊ณ„: ํŒจํ‚ค์ € ๋„๊ตฌ์™€ ํ•จ๊ป˜ IMX500 ์„ผ์„œ๋ฅผ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ IMX500 ํŽŒ์›จ์–ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

sudo apt install imx500-all imx500-tools

3๋‹จ๊ณ„: ์‹คํ–‰์„ ์œ„ํ•œ ํ•„์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ ์„ค์น˜ํ•˜๊ธฐ picamera2 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์—์„œ ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

sudo apt install python3-opencv python3-munkres

4๋‹จ๊ณ„: ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด Raspberry Pi๋ฅผ ์žฌ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค.

sudo reboot

๋ชจ๋ธ ํŒจํ‚ค์ง€ํ™” ๋ฐ AI ์นด๋ฉ”๋ผ์— ๋ฐฐํฌ

ํš๋“ ํ›„ packerOut.zip ํŒŒ์ผ์„ ํŒจํ‚ค์ € ๋„๊ตฌ๋กœ ์ „๋‹ฌํ•˜์—ฌ RPK ํŒŒ์ผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ AI ์นด๋ฉ”๋ผ์— ์ง์ ‘ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. picamera2.

1๋‹จ๊ณ„: ๋ชจ๋ธ์„ RPK ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง€ํ™”ํ•˜๊ธฐ

imx500-package -i <path to packerOut.zip> -o <output folder>

์œ„์™€ ๊ฐ™์ด ํ•˜๋ฉด network.rpk ํŒŒ์ผ์„ ์ง€์ •๋œ ์ถœ๋ ฅ ํด๋”์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: ๋ณต์ œ picamera2 ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ์„ค์น˜ํ•œ ํ›„ imx500 ์˜ˆ์ œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

git clone -b next https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e .  --break-system-packages
cd examples/imx500

3๋‹จ๊ณ„: IMX500 ๋‚ด๋ณด๋‚ด๊ธฐ ์ค‘์— ์ƒ์„ฑ๋œ labels.txt ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๊ฐœ์ฒด ๊ฐ์ง€๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --ignore-dash-labels --bbox-order xy โ€“labels <path to labels.txt>

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹ค์‹œ๊ฐ„ ์ถ”๋ก  ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด AI ์นด๋ฉ”๋ผ์—์„œ ์ถ”๋ก ํ•˜๊ธฐ

๋ฒค์น˜๋งˆํฌ

YOLOv8 ์•„๋ž˜ ๋ฒค์น˜๋งˆํฌ๋Š” Ultralytics ํŒ€์—์„œ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด AI ์นด๋ฉ”๋ผ๋กœ ์‹คํ–‰ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. imx ์†๋„์™€ ์ •ํ™•๋„๋ฅผ ์ธก์ •ํ•˜๋Š” ๋ชจ๋ธ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ ํ˜•์‹ ์ƒํƒœ ํฌ๊ธฐ(MB) mAP50-95(B) ์ถ”๋ก  ์‹œ๊ฐ„(ms/im)
YOLOv8n imx โœ… 2.9 0.522 66.66

์ฐธ๊ณ 

์œ„์˜ ๋ฒค์น˜๋งˆํฌ์— ๋Œ€ํ•œ ๊ฒ€์ฆ์€ coco8 ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ›„๋“œ ์•ˆ์—๋Š” ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

IMX500 ๋ฐฐํฌ

์†Œ๋‹ˆ ๋ชจ๋ธ ์••์ถ• ํˆดํ‚ท(MCT)

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

MCT์˜ ์ง€์› ๊ธฐ๋Šฅ

์†Œ๋‹ˆ์˜ MCT๋Š” ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ์„ ์ตœ์ ํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  1. ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™”: ์ผ๊ด„ ์ •๊ทœํ™”์™€ ๊ฐ™์€ ๋ ˆ์ด์–ด๋ฅผ ์ด์ „ ๋ ˆ์ด์–ด๋กœ ์ ‘์–ด์„œ ๋ชจ๋ธ์„ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์–‘์žํ™” ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ƒ‰: ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ, ํด๋ฆฌํ•‘ ์—†์Œ, ํ‰๊ท  ํ‰๊ท  ์˜ค์ฐจ ๋“ฑ์˜ ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–‘์žํ™” ๋…ธ์ด์ฆˆ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ณ ๊ธ‰ ์ •๋Ÿ‰ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜:
    • ์‹œํ”„ํŠธ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ๋ณด์ •: ๋Œ€์นญ ํ™œ์„ฑํ™” ์–‘์žํ™”๋กœ ์ธํ•œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    • ์ด์ƒ๊ฐ’ ํ•„ํ„ฐ๋ง: z-score๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ƒ๊ฐ’์„ ๊ฐ์ง€ํ•˜๊ณ  ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    • ํด๋Ÿฌ์Šคํ„ฐ๋ง: ๋” ๋‚˜์€ ๋ถ„ํฌ ๋งค์นญ์„ ์œ„ํ•ด ๊ท ์ผํ•˜์ง€ ์•Š์€ ์–‘์žํ™” ๊ฒฉ์ž๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํ˜ผํ•ฉ ์ •๋ฐ€๋„ ๊ฒ€์ƒ‰: ๊ฐ๋„์— ๋”ฐ๋ผ ๋ ˆ์ด์–ด๋‹น ์„œ๋กœ ๋‹ค๋ฅธ ์–‘์žํ™” ๋น„ํŠธ ํญ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  4. ์‹œ๊ฐํ™”: ๋ชจ๋ธ ์„ฑ๋Šฅ ์ธ์‚ฌ์ดํŠธ, ์–‘์žํ™” ๋‹จ๊ณ„ ๋ฐ ๋น„ํŠธ ํญ ๊ตฌ์„ฑ์„ ๊ด€์ฐฐํ•˜๋ ค๋ฉด TensorBoard๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ •๋Ÿ‰ํ™”

MCT๋Š” ๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์ถ”๋ก  ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ •๋Ÿ‰ํ™” ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  1. ๊ต์œก ํ›„ ์ •๋Ÿ‰ํ™”(PTQ):
    • Keras ๋ฐ PyTorch API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณต์žก์„ฑ: ๋‚ฎ์Œ
    • ๊ณ„์‚ฐ ๋น„์šฉ: ๋‚ฎ์Œ (CPU ๋ถ„)
  2. ๊ทธ๋ž˜๋””์–ธํŠธ ๊ธฐ๋ฐ˜ ํ•™์Šต ํ›„ ์ •๋Ÿ‰ํ™”(GPTQ):
    • Keras ๋ฐ PyTorch API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณต์žก์„ฑ: ์ค‘๊ฐ„
    • ๊ณ„์‚ฐ ๋น„์šฉ: ๋ณดํ†ต(2~3 GPU ์‹œ๊ฐ„)
  3. ์ˆ˜๋Ÿ‰ํ™” ์ธ์‹ ๊ต์œก(QAT):
    • ๋ณต์žก์„ฑ: ๋†’์Œ
    • ์ปดํ“จํŒ… ๋น„์šฉ: ๋†’์Œ(12-36 GPU ์‹œ๊ฐ„)

MCT๋Š” ๊ฐ€์ค‘์น˜ ๋ฐ ํ™œ์„ฑํ™”์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ •๋Ÿ‰ํ™” ์ฒด๊ณ„๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  1. ํŒŒ์›Œ ์˜ค๋ธŒ ํˆฌ(ํ•˜๋“œ์›จ์–ด ์นœํ™”์ )
  2. ๋Œ€์นญ
  3. ์œ ๋‹ˆํผ

๊ตฌ์กฐํ™”๋œ ๊ฐ€์ง€ ์น˜๊ธฐ

MCT๋Š” ํŠน์ • ํ•˜๋“œ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ตฌ์กฐํ™”๋œ ํ•˜๋“œ์›จ์–ด ์ธ์‹ ๋ชจ๋ธ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ SIMD ๊ทธ๋ฃน์„ ๊ฐ€์ง€์น˜๊ธฐํ•˜์—ฌ ๋Œ€์ƒ ํ”Œ๋žซํผ์˜ SIMD(๋‹จ์ผ ๋ช…๋ น์–ด, ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ) ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ ํฌ๊ธฐ์™€ ๋ณต์žก์„ฑ์„ ์ค„์ด๋ฉด์„œ ์ฑ„๋„ ํ™œ์šฉ๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ , ๊ฐ€์ค‘์น˜ ๋ฉ”๋ชจ๋ฆฌ ํ’‹ํ”„๋ฆฐํŠธ์˜ ๋ชฉํ‘œ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ์„ ์œ„ํ•ด SIMD ์•„ํ‚คํ…์ฒ˜์— ๋งž์ถฐ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. Keras ๋ฐ PyTorch API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IMX500 ๋ณ€ํ™˜๊ธฐ ๋„๊ตฌ(์ปดํŒŒ์ผ๋Ÿฌ)

IMX500 ๋ณ€ํ™˜ ๋„๊ตฌ๋Š” IMX500 ๋„๊ตฌ ์„ธํŠธ์˜ ํ•„์ˆ˜ ์š”์†Œ๋กœ, ์†Œ๋‹ˆ์˜ IMX500 ์„ผ์„œ์— ๋ฐฐํฌํ•  ๋ชจ๋ธ(์˜ˆ: ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด AI ์นด๋ฉ”๋ผ)์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” Ultralytics ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋œ Ultralytics YOLOv8 ๋ชจ๋ธ์˜ ์ „ํ™˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜์—ฌ ์ง€์ •๋œ ํ•˜๋“œ์›จ์–ด์—์„œ ํ˜ธํ™˜๋˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ •๋Ÿ‰ํ™” ํ›„ ๋‚ด๋ณด๋‚ด๊ธฐ ์ ˆ์ฐจ์—๋Š” ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ์™€ ์žฅ์น˜๋ณ„ ๊ตฌ์„ฑ์„ ์บก์Šํ™”ํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์ƒ์„ฑ์ด ํฌํ•จ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด Raspberry Pi AI ์นด๋ฉ”๋ผ์˜ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€

IMX500 ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์‚ฐ์—… ์ „๋ฐ˜์— ๊ฑธ์ณ ํญ๋„“๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค:

  • ์—ฃ์ง€ AI ๋ฐ IoT: ์ €์ „๋ ฅ ๋””๋ฐ”์ด์Šค์—์„œ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ธ ๋“œ๋ก ์ด๋‚˜ ๋ณด์•ˆ ์นด๋ฉ”๋ผ์—์„œ ๋ฌผ์ฒด ๊ฐ์ง€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์›จ์–ด๋Ÿฌ๋ธ” ๋””๋ฐ”์ด์Šค: ๊ฑด๊ฐ• ๋ชจ๋‹ˆํ„ฐ๋ง ์›จ์–ด๋Ÿฌ๋ธ” ๋””๋ฐ”์ด์Šค์— ์†Œ๊ทœ๋ชจ AI ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜์„ธ์š”.
  • ์Šค๋งˆํŠธ ์‹œํ‹ฐ: ๋น ๋ฅธ ์ฒ˜๋ฆฌ์™€ ์ตœ์†Œํ•œ์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์œผ๋กœ ๊ตํ†ต ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•ˆ์ „ ๋ถ„์„์„ ์œ„ํ•ด IMX500 ๋‚ด๋ณด๋‚ด๊ธฐ( YOLOv8 ) ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌํ…Œ์ผ ๋ถ„์„: POS ์‹œ์Šคํ…œ์ด๋‚˜ ์Šค๋งˆํŠธ ์„ ๋ฐ˜์— ์ตœ์ ํ™”๋œ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜์—ฌ ๋งค์žฅ ๋‚ด ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ฐ•ํ™”ํ•˜์„ธ์š”.

๊ฒฐ๋ก 

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

์ž์„ธํ•œ ์ •๋ณด ๋ฐ ์„ธ๋ถ€ ์ง€์นจ์€ ์†Œ๋‹ˆ IMX500 ์›น์‚ฌ์ดํŠธ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

YOLOv8 ๋ชจ๋ธ์„ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด AI ์นด๋ฉ”๋ผ์šฉ IMX500 ํฌ๋งท์œผ๋กœ ๋‚ด๋ณด๋‚ด๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

YOLOv8 ๋ชจ๋ธ์„ IMX500 ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๋ ค๋ฉด Python API ๋˜๋Š” CLI ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="imx")  # Exports with PTQ quantization by default

๋‚ด๋ณด๋‚ด๊ธฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ๋ฐฐํฌ์— ํ•„์š”ํ•œ ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. packerOut.zip ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์˜ IMX500 ํŒจํ‚ค์ € ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฃ์ง€ AI ๋ฐฐํฌ์— IMX500 ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ฃผ์š” ์ด์ ์ด ์žˆ๋‚˜์š”?

IMX500 ํ˜•์‹์€ ์—ฃ์ง€ ๋ฐฐํฌ์— ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์˜จ์นฉ AI ์ฒ˜๋ฆฌ๋กœ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐ ์ „๋ ฅ ์†Œ๋น„ ๊ฐ์†Œ
  • ์ด๋ฏธ์ง€๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๋Œ€์‹  ์ด๋ฏธ์ง€์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ถ”๋ก  ๊ฒฐ๊ณผ)๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์šฐ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๊ฐ•ํ™”
  • ์‹œ๊ฐ„์— ๋ฏผ๊ฐํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด์ƒ์ ์ธ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ
  • ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œํ•œ๋œ ๋””๋ฐ”์ด์Šค์—์„œ ํšจ์œจ์ ์ธ ๋ชจ๋ธ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ตœ์ ํ™”๋œ ์ •๋Ÿ‰ํ™”

IMX500 ๋ฐฐํฌ์— ํ•„์š”ํ•œ ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ์ „์ œ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

IMX500 ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

ํ•˜๋“œ์›จ์–ด:

  • ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด 5 ๋˜๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด 4 ๋ชจ๋ธ B
  • IMX500 ์„ผ์„œ๊ฐ€ ์žฅ์ฐฉ๋œ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด AI ์นด๋ฉ”๋ผ

์†Œํ”„ํŠธ์›จ์–ด:

  • ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด OS ๋ถ์›œ
  • IMX500 ํŽŒ์›จ์–ด ๋ฐ ๋„๊ตฌ(sudo apt install imx500-all imx500-tools)
  • Python ํŒจํ‚ค์ง€ picamera2 (sudo apt install python3-opencv python3-munkres)

IMX500์˜ YOLOv8 ๋ชจ๋ธ์—์„œ ์–ด๋–ค ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด AI ์นด๋ฉ”๋ผ์˜ Ultralytics ๋ฒค์น˜๋งˆํฌ ๊ธฐ์ค€:

  • YOLOv8n ์ด๋ฏธ์ง€๋‹น 66.66ms์˜ ์ถ”๋ก  ์‹œ๊ฐ„ ๋‹ฌ์„ฑ
  • COCO8 ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ mAP50-95์˜ 0.522
  • ์–‘์žํ™” ํ›„ 2.9MB์— ๋ถˆ๊ณผํ•œ ๋ชจ๋ธ ํฌ๊ธฐ

์ด๋Š” IMX500 ํฌ๋งท์ด ์—์ง€ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์šฐ์ˆ˜ํ•œ ์ •ํ™•๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํšจ์œจ์ ์ธ ์‹ค์‹œ๊ฐ„ ์ถ”๋ก ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ธ ๋ชจ๋ธ์„ ํŒจํ‚ค์ง•ํ•˜์—ฌ Raspberry Pi AI ์นด๋ฉ”๋ผ์— ๋ฐฐํฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

IMX500 ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ธ ํ›„

  1. ํŒจํ‚ค์ € ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ RPK ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

    imx500-package -i <path to packerOut.zip> -o <output folder>
    
  2. picamera2๋ฅผ ๋ณต์ œํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

    git clone -b next https://github.com/raspberrypi/picamera2
    cd picamera2 && pip install -e . --break-system-packages
    
  3. ์ƒ์„ฑ๋œ RPK ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

    python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --labels <path to labels.txt>
    
๐Ÿ“…1 1 ์ผ ์ „์— ์ƒ์„ฑ๋จ โœ๏ธ 8 ์ผ ์ „ ์—…๋ฐ์ดํŠธ ๋จ

๋Œ“๊ธ€