본문 바로가기

전체 글

(147)
mean shift 직접 구현하기(python) Mean Shift 이번 포스팅에서는 mean shift 알고리즘을 직접 구현해보도록 하겠습니다. 산 정상을 가장 빨리 도착하는 방법은 등고선 지도에서 선이 조밀한 곳을 직선거리로 가는 방법일 것입니다. 이처럼 어떤 값의 분포중심을 찾는 방법이 mean shift (평균 이동) 알고리즘 입니다. 구현방법은 데이터 중심으로부터 반경 R안에 있는 전체 데이터의 무게중심을 구하고 중심을 무게중심으로 이동시켜 다시 그 과정을 수렴할때까지 반복하면 됩니다. 따라서 k means 알고리즘과 달리 사람이 직접 k개로 데이터를 나누지 않아도 적절히 세그멘테이션이 가능합니다. 하지만 모든 데이터에 대해 수렴점을 찾기때문에 시간이 오래 걸리고 탐색 윈도우 반경을 얼마로 설정해야할지는 정해야 합니다. 너무 작으면 local..
(딥러닝_AI)yolov5을 이용하여 마스크 실시간 디텍션 프로젝트 프로젝트 개요 캠이나 비디오를 통해 사람들의 마스크 착용상태 유무를 판단하는 2D Object Detection을 진행 사람의 얼굴을 감지하여 Bounding Box를 생성하고 mask, nomask의 두 가지 class로 나타내어 줌 실생활에서 마스크 미착용 금지 구역에서 미착용 상태의 사람이 있을 때 실시간으로 포착해 경고음 발생등에 사용가능 따라서 실시간 객체 추적모델인 yolov5를 사용하여 사람의 마스크 착용여부를 검출하도록 설계하였습니다. https://github.com/ultralytics/yolov5 GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite YOLOv5 🚀 in PyTorch > ONNX > Cor..
kmeans 직접 구현하기(python) 이번 포스팅에서는 kmeans 알고리즘을 직접 구현해보는것 위주로 리뷰하겠습니다. kmeans는 임의로 중심을 정하는 부분과 모든 데이터에 대해서 중심 거리를 각각 구해서 가장 거리가 작은 중심으로 그룹핑하고 또 각각의 그룹마다 다시 평균을 구하고 반복하는데 평균이 변화가 거의없이 수렴하면 종료합니다. 자세한 사항은 위키백과를 참고해주세요. https://ko.wikipedia.org/wiki/K-%ED%8F%89%EA%B7%A0_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 k-평균 알고리즘 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. k-평균 알고리즘(K-means clustering algorithm)은 주어진 데이터를 k개의 클러스터로 묶는 알고리즘으로..
SIFT 직접 구현하기(python) 컴퓨터 비전 책을 통해서 배운 SIFT 특징점 검출 알고리즘을 python으로 직접 구현 해봅시다. SIFT에 대한 개념은 위키백과에 자세히 설명돼 있습니다. https://en.wikipedia.org/wiki/Scale-invariant_feature_transform Scale-invariant feature transform - Wikipedia From Wikipedia, the free encyclopedia Feature detection algorithm in computer vision The scale-invariant feature transform (SIFT) is a computer vision algorithm to detect, describe, and match local f..
로봇팔을 이용한 사과 자동수확(스마트팜) 최종 딥러닝 프로젝트 지금까지 설계했던 전체 시스템을 시연해보고 결과에 대해서 리뷰하도록 하겠습니다. End-To-End 시스템 로봇팔과 연결된 가운데 모니터는 Realsense의 SDK 화면이고 pointcloud(ply) 파일을 생성하고 저장과 동시에 자동으로 서버 컴퓨터에 전송이 됩니다. 오른쪽에 서버 컴퓨터에서는 훈련된 모델에 직전 전송된 데이터를 입력하여 결과를 생성합니다. 그 결과는 곧바로 로봇팔로 전송되어 로봇팔은 사과를 수확합니다. 이제 동영상으로 보시겠습니다. 데모 영상 데이터를 전송해주는 부분을 제외하고 나머지 과정들을 모두 자동화하였습니다. 좀더 자세히 결과를 분석해보겠습니다. 아래는 수확하기 전 상태에 대해 자세히 설명한 사진들 입니다. 로봇팔에서 얻은 사과 데이터(pointcloud) 수확하기 직전 모..
로봇팔로 3D Detection한 사과 수확 설계 이제 3D Detection을 완료한 사과에 대해 로봇팔로 자동으로 수확하는 시스템을 설계하겠습니다. 전체 시스템 구조도 이전 포스팅까지는 생성한 사과 데이터를 구조변경(modified)한 FCAF3D 딥러닝 모델을 통해 학습시키고 테스트 까지 완료했습니다. 여기에 3번째 단계로 로봇 컨트롤 부분이 추가됐습니다. 오늘은 이 부분에 대해서 자세히 리뷰하겠습니다. 로봇팔은 Yahboom사 jetson nano 제품을 사용하였습니다. 센서 교체(2D -> 3D) 왼쪽에 로봇팔에 부착된 2D 카메라 센서를 제거하고 pointcloud를 얻기 위해 3D Realsense 카메라로 부착하였습니다. 로봇팔(jetson nano) OS에 Realsense SDK 설치 로봇팔에서 Realsense 카메라를 사용하기위해 ..
같은 물체에 여러개의 바운딩 박스가 생기는 문제 현재 문제점 많은 사과를 디텍션 하기위해 score_threshold(점수가 높을수록 사과일 확률이 높음)를 낮추었을때 같은 물체에 대해 많은 bounding box가 생기는 문제점이 발생 하였습니다. 그렇다고 score_threshold를 높이면 전체 사과 AP가 급감하고 또 대부분의 물체는 바운딩 박스가 한 개만 남지만 어떤 물체는 여전히 한개이상 박스들이 생겼습니다. 해결방안 score_threshold만으로는 해결이 안되기 때문에 새로운 알고리즘을 구상하였습니다. 사진과 같이 설명하면 아래와 같습니다. 거리에 기반해서 그룹핑 알고리즘을 디자인하고 적용하였습니다. 코드는 아래와 같습니다. import warnings import numpy as np from math import * sphere_t..
딥러닝 3D Detection으로 사과 검출하기(FCAF3D) 자 드디어 전에 포스팅했던 방법으로 만든 사과 데이터를 우리 딥러닝 모델로 훈련시켜 봅시다. 데이터 만드는 과정을 요약한 사진입니다. 그리고 여러번의 실험 결과를 통해 딥러닝 모델 구조를 3단구조로 변형하는것이 실험결과가 가장 좋다는것을 알게되었습니다. 구조도로 보시면 사진과 같습니다, 저는 총 250개의 사과 데이터를 만들었고 그중 130개는 Train용 데이터셋 나머지 120개는 Validation 데이터셋으로 나누었습니다. 130개의 Train 데이터셋은 50개의 Kinect V2 데이터와 80개의 Realsense 데이터로 구성하였고 120개의 Validation 데이터셋은 50개의 Kinect V2 데이터와 70개의 Realsense 데이터로 구성하였습니다. 훈련은 총 12 epoch을 진행하였..