전체 글

전체 글

    정적 멤버 함수(static member variable)

    정적 멤버 class에는 속하지만, 객체 별로 할당되지 않고 클래스의 모든 객체가 공유하는 멤버 즉, 클래스의 모든 객체에 대해 하나의 데이터만 유지됨 #include using namespace std; class Something{ public: static int s_value; }; int Something::s_value = 1024; int main(){ Something s1; cout

    메모리의 stack영역, heap영역

    메모리의 stack영역, heap영역

    정의 우리가 코딩을 할 때, RAM을 접근하여 일부 메모리를 사용하게 된다. 사용하는 영역은 아래와 같은 그림으로 나타낼 수 있다. 코드 영역: 실행할 프로그램의 코드 데이터 영역: 전역(global)변수, 정적(static) 변수 heap영역: 동적 할당 stack 영역: 지역변수, 매개변수, 함수 각 영역마다 저장되는 변수와 저장할 수 있는 용량이 다르다. 코딩을 할 때, 중요하게 여겨야할 영역은 제목에서 봤듯이 stack과 heap영역이다. stack stack영역은 우리가 주로 사용하는 함수의 매개변수나 함수내의 지역변수를 할당할 때, 주로 쓰인다. stack영역의 용량은 비교적 크지않아 제귀함수와 같은 stackoverflow에러를 발생시키는 알고리즘을 사용할 때는 주의를 해야한다. heap h..

    함수 포인터

    정의 함수 포인터: 함수의 주소를 담고있는 포인터 변수 함수 포인터의 기본형태 : int (*ptrFunc) (int a, int b) 반환 데이터 타입: int형, 함수 포인터명: ptrFunc, 매개변수: int a, int b ptrFunc이라는 함수 포인터는 반환데이터 타입을 int형으로 가지며 int형 변수 a와 b를 매개변수로 가진다. 쓰임새 함수 포인터는 다른 함수의 매개변수로 함수를 받고 싶을 때 사용된다. 보통 callback 함수로 사용된다. callback 함수 a함수의 인자로 b함수의 함수 포인터를 넘겨 a함수가 실행 될때, b함수도 실행하게하는 것이다. 주로 라이브러리의 유연성을 제공하기위해 구현된다. 사람마다 원하는 세부기능이 다를 수 있기 때문에 사용자의 함수를 직접작성하여 라..

    제 1강 MLops - ML 시스템 workflow 정리

    제 1강 MLops - ML 시스템 workflow 정리

    머신러닝 시스템의 workflow 머신러닝 시스템의 workflow는 위와 같이 순환적인 구조를 이루고 있다. 지금 다니고 있는 직장에서도 위와같은 workflow로 진행이된다. 하지만 위의 과정을 자동화 또는 시각화하여 개발자, 연구자가 쉽게 접근할 수 있도록 해야 일의 능률이 상승한다. 비지니스 문제 정의 ML이 아닌 다른 알고리즘으로 해결이 가능한가? 위의 물음은 ML을 연구하고 개발하는 사람이라면 가지고 있어야하는 마음가짐 중 하나이다. 굳이 ML을 사용하지 않아도 해결될 문제를 ML로 해결하려는 것은 문제를 더 어렵게 만드는것이다. (ML프로젝트의 실패확률 매우 높음) 성능 목표 우리가 적용하려는 product가 어느정도의 리스크를 가지고 있으며 그 리스크를 해결할 만큼의 성능이 나오는 지 파악..

    함수 오버로딩

    c++ 함수 오버로딩의 개념을 정리해 보았다. 오버로딩이란 함수를 동일한 이름으로 여러 개 선언하는 것을 의미한다. 단 1가지 조건이 붙는다. 조건 1. 파라미터가 달라야 한다. 이때, 파라미터의 수가 같아도 자료형이 다르다면 괜찮다. 반환형만 다른 경우는 함수오버로딩이 되지 않는다. 간단히 정리해 보면 특징 1. 함수의 이름은 같다. 특징 2. 함수의 파라미터 수가 다르거나 수가 같아도 자료형이 다르다면 괜찮다. 특징 3. 함수의 파라미터가 같은 경우, 반환값만 다르다면 함수오버로딩이 되지 않는다. #include using namespace std; int sum (int x, int y){ return x + y; } double sum (double x, double y){ return x + y..

    Computer vision based Skin Detector

    Computer vision based Skin Detector

    구현 알고리즘 1. global luminance Enhansment 적용(어두운 곳에서 이미지가 촬영되는 경우 적용) 위의 알고리즘은 논문에서는 지역적으로 적용하여 어두운 이미지를 밝게 만들지만 능력이 부족하여 global하게 위의 알고리즘을 적용하였다. 아래 코드는 global luminance Enhansment 코드이다. 여러분은 코드와 논문을 참조하여 local luminance Enhansment를 구현해보길 바란다. def luminence_Enhansment(src): ''' parameter : - src : image frame return : - new_hsv: image frame ''' hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) H, S, V = ..

    LBP (Local Binary Pattern) for Face Recognition

    LBP (Local Binary Pattern) for Face Recognition

    LBP 위의 그림1 처럼 이미지를 tile로 나누고 각 tile의 LBP 히스토그램을 나열하여 최종적으로 feature histogram을 만든다. 다른 이미지의 feature histogram과 비교하여 동일인인지 판별할 수 있다. LBP hisogram을 만들기 위해서 그림2와 같은 연산이 필요하다. 알고리즘은 아래와 같다. 3x3 block으로 이미지의 pixel정보를 얻어온다. center pixel을 중심으로 나머지 픽셀들과 크기비교를 한다. center pixel 보다 크거나 같다면 1 작다면 0으로 계산한다. (그림3 참고)좌측 pixel 부터 차례대로 나열하여 11001011이라는 2진수를 만든다. 그리고 이를 다시 10진수로 바꾸면 203이라는 값이나오고 이 값이 중간 픽셀의 값으로 바뀌..

    OpenCV Face Detection and Recognition(얼굴 탐지 및 인식) - 1부

    OpenCV Face Detection and Recognition(얼굴 탐지 및 인식) - 1부

    서론 본 포스트에서는 Computer vision 기반의 3가지 얼굴 인식 및 탐지 방법을 연구합니다. - eigenfaces (1부) - Local Binary Patterns Histograms (2부) - Fisherfaces 1. Eigenfaces face recognition EigenFaces face recognition은 PCA 방법(Principal Component Analysis) 방법을 사용하여 얼굴 데이터를 high demention에서 low demention으로 처리하고 얼굴 데이터의 주요 구성 정보를 얻은 다음 얼굴 인식을 완료한다. EigenFaces 얼굴의 인식 단계 - create the EigenFace recognizer - train the model with a..