Recent Posts
printf("ho_tari\n");
[지능] Vision AI 기반 컨베이어 벨트 객체 인식 딥러닝 모델 최적화 3일차 본문
2024.12.05
3일차에는 프로젝트를 진행하기 위해 필요한 데이터들을 직접 수집하고 라벨링하고 모델에 학습시켜 예측 결과를 확인해보았다.
먼저 라즈베리 피코안에 설계되어 있는 여러 센서들을 탐지하기 위해 라벨링해야할 데이터를 컨베이어 벨트를 이용하여 촬영하고 저장하여 수집하였다.
https://youtube.com/shorts/iStBSuXnV2U
import time
import serial
import requests
import numpy
from io import BytesIO
from pprint import pprint
import os
import cv2
ser = serial.Serial("/dev/ttyACM0", 9600)
# API endpoint
api_url = ""
def get_img():
"""Get Image From USB Camera
Returns:
numpy.array: Image numpy array
"""
cam = cv2.VideoCapture(0)
if not cam.isOpened():
print("Camera Error")
exit(-1)
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
ret, img = cam.read()
cam.release()
return img
def crop_img(img):
size_dict = {"x": 800, "y": 380, "width": 400, "height": 500}
x = size_dict["x"]
y = size_dict["y"]
w = size_dict["width"]
h = size_dict["height"]
img = img[y : y + h, x : x + w]
# brightne up up ~~
img =cv2.convertScaleAbs(img, alpha=1,beta = 5)
return img
def save_img(img,save_dir) :
global image_index
image_path = os.path.join(save_dir,f"new{image_index}.jpg")
cv2.imwrite(image_path,img)
image_index+= 1
def inference_reqeust(img: numpy.array, api_rul: str):
"""_summary_
Args:
img (numpy.array): Image numpy array
api_rul (str): API URL. Inference Endpoint
"""
_, img_encoded = cv2.imencode(".jpg", img)
# Prepare the image for sending
img_bytes = BytesIO(img_encoded.tobytes())
# Send the image to the API
files = {"file": ("image.jpg", img_bytes, "image/jpeg")}
print(files)
try:
response = requests.post(api_url, files=files)
if response.status_code == 200:
pprint(response.json())
return response.json()
print("Image sent successfully")
else:
print(f"Failed to send image. Status code: {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"Error sending request: {e}")
image_index = 0
while 1:
data = ser.read()
print(data)
if data == b"0":
img = get_img()
save_dir =" "
img = crop_img(img)
save_img(img,save_dir)
cv2.imshow("", img)
cv2.waitKey(1)
result = inference_reqeust(img, api_url)
ser.write(b"1")
else:
pass
데이터를 수집한 뒤 라벨링을 진행하고 YOLOv6의 여러 모델들을 이용하여 학습시켰다.
YOLOv6-L, YOLOv6-L6, YOLOv6-M, YOLOV6-N 이렇게 4개의 모델을 이용하여 각 모델들을 비교해보았다.
학습시킨 결과 mAP 수치는 YOLOv6-L6가 가장 높게 나왔다. 하지만 mAP 수치가 객체 탐지 정확도와 비례하지 않기 때문에 라벨링한 300장의 이미지를 이용하여 직접 눈으로 결과 이미지들을 보며 확인해보아야 한다.
비교 결과 YOLOv6-L6 모델을 사용하였을 때 가장 정확하게 객체를 탐지한 이미지가 있었지만 이런 결과가 나오는 사진이 너무 적어 정확도가 매우 낮게 나온 것 같다.
객체 탐지 정확도를 높이기 위해서 다양한 방법을 생각해봐야 할 것 같다.
데이터의 해상도는 이미 높여봤지만 결과가 크게 달라지지 않았고 결국 라벨링을 다시 해야 할 것 같은 결과가 나왔다.
'두산 로보틱스 부트캠프 ROKEY > 실무 프로젝트' 카테고리의 다른 글
[지능] Vision AI 기반 컨베이어 벨트 객체 인식 딥러닝 모델 최적화 5일차 (0) | 2024.12.10 |
---|---|
[지능] Vision AI 기반 컨베이어 벨트 객체 인식 딥러닝 모델 최적화 4일차 (0) | 2024.12.10 |
[지능] Vision AI 기반 컨베이어 벨트 객체 인식 딥러닝 모델 최적화 2일차 (0) | 2024.12.06 |
[지능] Vision AI 기반 컨베이어 벨트 객체 인식 딥러닝 모델 최적화 1일차 (0) | 2024.12.05 |
[주행] SLAM 모델 기반 다중이용시설 로봇 주행 환경 장애물 인식 모델 개발 5일차 (0) | 2024.12.03 |