본문 바로가기

전체 글240

전이학습 (Transfer Learning), 데이터 증강(Augmentation) 전이학습 (Transfer Learning) "기존(내 목적과는 다른) 데이터로 학습된 네트워크를 재사용 가능하도록하는 라이브러리" - 사전에 대량의 data를 학습한 것을 불러와서 다른 목적으로 사용가능 ==> 가중치, 편향이 포함된 학습된 모델의 일부를 재사용하기에 Transfer learning 이라고 표현 교육 데이터를 적게 사용하고, 교육 속도가 빠르며, 더 잘 일반화하는 모델을 가질 수 있다. (일부만 사용을 해서 활용할 수 도 있지만, 전체를 다 재학습할 수도 있다) 1. 이전에 학습한 모델에서 파라미터를 포함한 레이어를 가져옵니다. 2. 향후 교육 과정 중에 포함된 정보가 손상되지 않도록 해당 정보를 동결(freeze, 가중치를 업데이트 하지 않음)합니다. 3. 동결된 층 위에 새로운 층 .. 2022. 1. 8.
CH10 OpenCV-Python Optical flow 옵티컬플로우(Optical flow)란?- 광학 흐름 - 연속하는 두 프레임(영상)에서 카메라 or 객체의 움직임에 의해 나타나는 객체의 이동 정보 패턴 == Structure from Motion, Video Compression, Video Stabilization(손떨림 방지), etc 두 가지 사실을 가정 1. 연속된 프레임 사이에서 움직이는 물체의 픽셀 강도(intensity)는 변함이 없다. 2. 이웃하는 픽셀은 비슷한 움직임을 갖는다. 옵티컬플로우(Optical flow) 계산 함수 * 루카스-카나데 알고리즘(Lucas-Kanade algorithm) = 주로 Sparse(희소한) points에 대한 이동 벡터 계산 ==> 특정 픽셀에서 optical flow 벡터 계산 이웃하는 픽셀은 비슷.. 2021. 12. 25.
CH10 OpenCV-Python 추적(Mean Shift, Cam Shift) 추적(Tracking) 평균이동(Mean Shift) 알고리즘이란? - 데이터 분석 기법 중 하나 - 데이터가 밀집되있는 분포를 찾는 것 == 모드검출(mode seeking)이라고 불리기도 함 # 특정 색 추적 # 비디오 파일 열기 cap = cv2.VideoCapture('ch10\\videos\\camshift.avi') if not cap.isOpened(): print('Video open failed!') sys.exit() ret, frame = cap.read() # roi = cv2.selectROI('orange', frame) (x, y, w, h) = cv2.selectROI('orange', frame) # print(roi) x, y, w, h rc = (x, y, w, h) i.. 2021. 12. 25.
CH10 OpenCV-Python 배경차분(MOG) MOG(Mixture of Gauusian)란? - 각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분 - 하나의 데이터 분석 기법 영상의 각 Pixel 값을 배경영상을 등록시켜놓고 배경영상과 같냐 다르냐를 판단 = 현재 프레임에 그 객체가 새로 나타난거냐 아니냐를 판단 - 미리 정해둔 배경 영상의 Pixel 값은 이 위치에서 Pixel 값은 100이였다 정의하는 것이 아니라 100 금방에 어떤 Gaussian을 따르고 있다고 정의 ==> Gaussian 분포를 하나만 쓰는 것이 아니라 여러개 사용해서 어떤 위치의 특정 Pixel, 배경 Pixel값이 어느 Gaussian분포를 따르고 있다라는 모델 형태를 준다. ex) 흔들리는 나무가 있다할 때 나뭇잎은 배경일수도(하늘색) 나뭇잎일 수도(초.. 2021. 12. 25.
CH10 OpenCV-Python 객체 추적(이동 평균 배경) Mean shift 정적 배경 모델 사용 시 문제점 * 미리 등록된 기준 영상이 실제 배경과 크게 달라질 경우 오동작 - 도로에 차는 잠깐 있다가 없어짐 ==> 평균을 구한 영상과 현재 Frame의 차영상을 계산하면 현재 Frame에 있는 새로운 차들만 검출가능 == 이런 수백장의 영상을 저장한다는게 시스템쪽으로 무리가 생김(= 대용량 메모리가 필요) So, 이동평균 사용 이동 평균(Moving Average) = WeightSum - 수백 장의 영상을 저장하는 대신 매 프레임이 들어올 때마다 평균 영상을 갱신 - 갱신된 배경영상 = int가 아니라 미세하게 업데이트 되야하기 때문에 float 가중치 ∝ = 0 -> 현재프레임=0, 이전 배경영상을 계속 쓰니 의미가 없다(업데이트가 안됨) ∝ = 1 -> 현재프레임을 계속 .. 2021. 12. 25.
CH10 OpenCV-Python 객체 추적(배경차분) 배경차분(Background Subtraction: BS) == 정적배경(Static Background) 등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 전경 객체를 검출 움직이는 전경 객체 검출을 위한 기본적인 방법 Back Image(정적배경)을 등록하고 새로 들어온 Frame과 차영상을 통해서 새로운 객체 검출 Threshold를 사용해서 이진화 => 흰색 객체를 레이블링 기법(connect..stats)을 사용해서 크기와 위치를 판단 그리고 그 위치에서 boundingRect그려주면 간단한 침입자 감지 프로그램 만들 수 있다. But 이와같은 방법은 좋지 않다 why? 영상에서 새로운 객체를 계속 따라가지만 멈추었을 때도 계속 추적 1. 조명의 변화에 민감 2. 차가 새로 들어오고 멈.. 2021. 12. 25.
CH09 OpenCV-Python 스티칭 Stitching(PANORAMA) 이미지 스티칭(Image Stitching)이란? • 동일 장면의 사진을 자연스럽게(seamless) 붙여서 한 장의 사진으로 만드는 기술 • 사진 이어 붙이기, 파노라마 영상(Panorama image) - 기본적으로 SULF or ORB를 사용 But 단순히 이어붙이기만하면 밝기가 급격하게 바뀌는 부자연스러운 부분이 생긴다 ==> 밝기를 smooth하게 변화시키는 blending이 내부에서 적용됨 images = ['img1.jpg', 'img2.jpg', 'img3.jpg'] imgs= [] for name in images: img = cv2.imread(f'ch09\\images\\{name}') if img is None: print('Images load failed') sys.exit() .. 2021. 12. 25.
CH09 OpenCV-Python 호모그래피와 영상 매칭 호모그래피(Homography)란? • 두 평면 사이의 투시 변환(Perspective transform) • 8DOF : 최소 4개의 대응점 좌표가 필요 왜 호모그래피? Perspective Transform(투시 변환): 4개의 쌍(8 DOF)만 있으면 되는데 내가 줄수 있는 수식은 8개(DOF) 보다 더 많을 때 ==> 연결관계가 4개 이상 나오고 그 중에서 잘못된 매칭이 있을 수 있다라는 가정 ==> 이런 조건에서 Perspective 계산 어떻게? == 호모그래피 사용 src1 = cv2.imread('ch09\\images\\box.png', cv2.IMREAD_GRAYSCALE) src2 = cv2.imread('ch09\\images\\box_in_scene.png', cv2.IMREAD_.. 2021. 12. 25.
CH09 OpenCV-Python 특징점 매칭(feature point matching) 특징점 매칭 (feature point matching) • 두 영상에서 추출한 특징점 기술자를 비교하여 서로 유사한 기술자를 찾는 작업 특징 벡터 유사도 측정 방법 • 실수 특징 벡터: L2 노름(L2 norm) 사용 • 이진 특징 벡터: 해밍 거리(hamming distance) 사용 OpenCV 특징점 매칭 클래스 • BF: Brute-force (전수 조사) == 각 특징점 하나씩 다 매칭해보면서 가장 distance가 작은 것을 골라낸다 • Flann: Fast Library for Approximate Nearest Neighbor (K-D Tree 사용) == 너무 특징점이 많을 때 사용 ==> 완전히 최소값 매칭이 어려워(속도는 빠름) but 특징점이 몇천개 정도면 별차이 없음 ==> 영상.. 2021. 12. 25.