728x90

텍스트 에디터

- Scite 사용

 

wscite444.zip
1.87MB

 

 

 

 

 

준비하기

- tolset 안에다가 hellos3 폴더를 복붙하고

- helloos.nas를 열자

 

 

 

한글깨짐

- 이건 일본어 원문 자료에서 그대로 가져오다보니 주석들이 다깨진듯 하다..

 

 

- utf-8로 고쳐주고

 

- 불편해서 안되겠다. vscode 쓰자

 

 

다고친 결과

- 파일 열때 깨진 주석들을 다 한글로 고침

 

 

 

- 고친 결과

; hello-os---------------------------------------------------------
; TAB=4

		ORG		0x7c00			; 메모리 안에서 로딩되는 곳

; 아래는 표준 FAT12 포맷 플로피 디스켓을 위한 내용들

		JMP		entry
		DB		0x90
		DB		"HELLOIPL"		; 부트섹터 이름. 마음대로해도 ok
		DW		512				; 1섹터 크기(바이트 단위, 512)
		DB		1				; 클러스터 크기(1로 해야됨)
		DW		1				; 예약된 섹터수 
		DB		2				; 디스크 FAT 테이블 수
		DW		224				; 루트 디렉토리 엔트리 수 (보통 224엔트리)
		DW		2880				; 디스크 총섹터수
		DW		0xf0				; 미디어 타입
		DW		9				; 하나의 FAT 테이블 섹터 수
		DW		18				; 1트랙에 몇 색터가있는지
		DW		2				; 헤드의 수
		DD		0				; 파티션 없으므로 0
		DD		2880				; 드라이브 크기 한번더씀
		DB		0, 0, 0x29			; 필요하다고함
		DD		0xffffffff			; 볼륨 시리얼 번호
		DB		"HELLO-OS  "		; 디스크 이름
		DB		"FAT12   "			; 포멧이름
		RESB	18				; 18바이트 남김

; 프로그램 본체

entry:
		MOV		AX,0			; 레지스터 초기화
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX
		MOV		ES,AX

		MOV		SI,msg
putloop:
		MOV		AL,[SI]
		ADD		SI,1			; SI에 1 더함
		CMP		AL,0
		JE		fin
		MOV		AH,0x0e			; 한 문자 표시 기능
		MOV		BX,15			; 컬러 코드
		INT		0x10			; 비디오 BIOS 호출
		JMP		putloop
fin:
		HLT						; CPU 정지 시킴
		JMP		fin				; 무한 루프

msg:
		DB		0x0a, 0x0a		; 줄바꿈 문자 2개
		DB		"hello, world"
		DB		0x0a			; 줄바꿈
		DB		0

		RESB	0x7dfe-$		; 나머지칸 0채우기

		DB		0x55, 0xaa

; 부트섹터 이외 부분에 적을 내용들

		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	4600
		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	1469432
300x250
728x90

내가 처음 컴퓨터 비전을 공부했던게

2018년 2학기 쯤이었던것같다.

 

 

당시 나는 최적화, 공업수학은 물론

선형대수조차 제대로 공부해본적이 없는 상태다 보니

 

 

아무리 시간을 투자해도

컴퓨터 비전을 이해할수가 없었다.

 

 

그라디언트는 뭐고, 벡터가 뭔지,

자코비안이 공식은 알겠는데 이런짓은 왜하는건지

결국 아무리 시간을 들여봤자 에지나 지역 특징 정도 밖에 겨우 이해 했지

 

 

그라디언트니 기술자니 이런 내용들은 도저히 이해할수가 없었다.

 

 

 

그러다 최근 공업수학, 최적화, 선형대수 등 다 다루어보고 나서 보니

당시 컴퓨터 비전의 5~10%를 이해했다면, 지금은 25 ~ 30%정도로 이해도는 많이 늘었다.

 

 

 

더 이해도를 높이려면 opencv 실습과 논문 정리,

알고리즘 수식 등 내용도 추가적으로 정리해야하나

그것보다 우선해야할 일들이 많다.

나중에 필요한때 해도 충분할것 같다.

 

 

 

 

지금 정리한 내용만 해도 컴퓨터 비전에있어서 상당히 많은 양을 다루었기도 하고,

이번주 월요일 27일부터 내가 다른 해킹이랑 OS, 과제, openmp를 같이 시작하다보니 조금 더 오래걸리긴 했지만

방대한 내용을 5~6일 정도만에 둘러봤으니

 

 

대학교에서 시험 볼게 아니라면 이정도 내용만 이해해도

4학년 컴퓨터 비전 과목 전반은 대부분 잘 봤다고 할수 있을것 같다.

 

 

 

지금 공부한 내용들은

영상이란 무엇인지, 히스토그램, 이진화, 에지, 특징점, 기술자, 매칭, 머신러닝, 광류 등 정도 된것 같다.

이만큼만 해도 일반적으로 개설된 영상 처리, 인공지능 교육 과정에서 다루는 내용들은 다 훑어보았다.

 

 

 

 

다음으로 내가 할건

OS 만들기를 1주일간 진행하고자 한다.

오는주 5 ~ 7일 동안 자동차 관련 보안 교육을 듣다 보니 그 때는 많이는 못하겠지만

 

 

컴퓨터비전을 정리한 속도를 생각하면

정말 못해도 절반 이상은 나갈수 있을것 같다.

 

 

OS 만드는 과정을 정리하면서

기계어로 직접 코딩, 어셈블리어로 코딩, C언어로 코딩, OS 기능, GUI 요소들을 다 구현해보면

추후 리눅스 기반 임베디드 장비든 만든다면,

무작정 디바이스 드라이버를 만든다든지 커널을 수정하는 방법을 공부해서 시도해보는것보다는 훨신 수월해질듯 하다.

 

 

 

이 외에도 하고싶은게 무엇인가

일단 해킹을 마무리 해놓고 싶다. 어플리케이션 해킹은 정리 했지만,

추가적으로 시스템 해킹과 네트워크 해킹 정도는 한번 살펴보고 싶다.

 

그다음에는 패턴 인식도 다뤄보고자 한다.

 

 

 

해킹과 패턴인식을 마무리한 후 하고싶은건

VR, 자격증, 전기전자, 프로토 타이핑 정도로 정리할수 있을것가다.

 

 

 

얻고 싶은 자격증으로

전기 기사, 빅데이터 분석 기사, 전자기사, 정보통신기사, 임베디드 기사이 있다.

 

 

 

 

지금 당장은

전기, 빅데이터, 전자, 임베디드 기사는 힘들겠지만

 

그 동안 공부한 내용들을 생각하면

정보 통신 기사는 당장 가능한 자격증중하나일것 같다.

 

아래는 정보통신 기사의 시험 과목들인데

 

디지털 전자 회로에서는 플립플롭이나 카르노맵 같은 내용들이 나올듯 하다.

전자 계산기 일반이나, 정보 통신 시스템 등 다른 과목들도 정보처리기사 필기 떄와 비슷한것들이 나올태니

 

'

 

 

 

검색 정리해보니

 

조금 다르네..

 

그래도 정보처리 기사 준비하면서 봤던 내용들이 여전히 많은것같다.

https://blog.naver.com/gisulove/221467634906

 

 

 

 

 

 

시험일도 9월 26일로 2달 조금 안되는 시간 정도 남아있다.

맨땅에 해딩이라면 정보통신기사에 올인해야겠지만

지금은 쉬엄쉬엄 해도 될듯하다

 

 

 

 

일단 자격증은 전기 자격증이 가장 힘들다고하니 로드맵을 그리면 순으로 준비하면 될듯하고

 

1. 정보통신기사

2. 전자기사

3. 전기기사

 

 

지금 방통대 통계과에 등록한 상태이니

빅데이터 분석 기사는 방통대 졸업하기 전에 천천히 준비해도 될듯하다.

패턴 인식 공부하면서 분석 기사에 필요한 내용 상당수를 정리해볼수 있을거구

 

 

 

임베디드 기사는 내년에 천천히 준비해보고자 한다.

 

 

 

 

최근 보고서(?)를 쓰는데 생각보다 시간이 많이 걸려

이렇게 학습 마치고 어떻게 할지 잘 정리 해놓지는 않았다.

앞으로 보고서 보다는 이렇게 간간히 쓰는게 더 나은거같구, 보고서 쓰다보니 욕심때문에 내용을 쓸때없이 늘리더라.

 

 

 

 

 

지금 자격증 + 수상내역을 정리하면

- 컴활 2급

- 한국사 1급

- TOEIC 880점

- TOPCIT 326점

- 정보처리기사

- 2016 잡매칭 SW 경진대회 중소벤처기업협회장상

 

위 자격증을 다딴다면

- 정보통신기사

- 전자기사

- 전기기사

- 빅데이터 분석기사

- 임베디드 기사

 

 

진짜 다 되겠나느먄 희망사항일 뿐이고

진짜 된다고 하면 밥 굶진 않을텐데

내가 뭐가 되있을까 ~_~

 

 

300x250
728x90

광류 지도의 한계

- 물체의 궤적 정보 가지나 명시적이지 않음

 

물체 추적을 위해서 할일

- 광류 맵 -> 궤적 특징 추출 -> 궤적 정보 변환

=> 물체 추적

 

 

KLT 추적 알고리즘

- 카나드 루카스 광류 추정 알고리즘 기반 물체 추적 알고리즘

1. 모션 벡터로부터 특징 추출

2.특징이 가려지거나 영사압ㄲ에 나간 경우 실종 처리

 

 

 

물체 추적의 예시

 OpenCV 3.4.1 에서 제공하는 물체 추적 알고리즘 : BOOSTING, MIL, KCF, TLD, MEDIANFLOW, GOTURN, MOSSE and CSRT

- python + cpp 예제 링크 : https://www.learnopencv.com/object-tracking-using-opencv-cpp-python/

 

 

300x250
728x90

광류

- 시간 t축에 인접한 두 영상 사이의 명암 변화를 다룸

-> 움직임 정보 추정

 

 

광류 추정 알고리즘

- 현재 화소가 t+1시간의 어느화소와 매칭이되는지 찾기

- 아래의 그림은 광류 지도와 광류 벡터 예시

 

https://www.researchgate.net/figure/Optical-flow-map-and-motion-vector-graph-of-the-spatial-sequences_fig11_261342598

 

 

 

광류 추정 원리

- 일반적인 영상은 매우 크며, 잡음 존재 -> 적절한 모델로 변환 필요

- 밝기 향상성 가정 활용 : 두 영상간 같은 지점은 명암이 비슷

1. 시간 간격이 짧다면 테일러 전개로 근사

2. 광류 조건식 optical flow constraint equation 취득

  광류/그라디엍트 조건식(미방) <- 영상의 y축 변화(모션벡터) * v + 영상의 x축 변화(모션벡터) * u + 영상의 t축 변화 = 0

3. 광류 추정 알고리즘(ex. Lucas-Kanade or Horn-Schunck알고리즘)으로 모션 벡터 계산

  * but. 모션 벡터들을계산해도 v, u는 결정 불가

- 아래의 그림은 광류 추정 알고리즘

https://www.researchgate.net/figure/Optical-flow-map-computed-by-different-methods-a-Lucas-Kanade-b-Horn-Schunck-c_fig3_328750324

 

 

 

 

루카스 카나드 알고리즘

- 특정 화소 주위의 윈도우의 광류는 동일함을 가정

- 루카스 카나드 알고리즘에서 광류 예시 : 윈도우 내부의 픽셀들은 동일한 모션 벡터를 가짐

 

 

 

 

루카스 카나드 알고리즘 파이썬 실습

- 아래의 링크에서 광류 추정 알고리즘 예제 제공

https://www.datasciencecentral.com/profiles/blogs/implementing-lucas-kanade-optical-flow-algorithm-in-python

 

함부르크 택시 예제

1. 입력 영상

 

2. 중간 과정 

 

3. 출력 영상 = 원본 + 옵티컬 플로우

 

 

300x250
728x90

영상 = 동적 비전

- 움직이는 이미지를 영상 image seuqence나 동영상 video

-> 동적 비전

 

프레임

- 동영상의 각 영상

 

동적 비전이 하는일

- 영상 안의 물체 정보 추출

 

컴퓨터 비전과 3차원

- 활용가능성이 크게 늘어남

-> ex. 축구장 3차원 비전

- 아래의 그림은 2차원 사진으로부터 3차원 복원 과정을 보여줌

https://www.researchgate.net/figure/Voxel-carving-approach-for-3D-reconstruction-Process-with-4-cameras-around-the-subject_fig1_262362824

 

동적 비전의 난이도

1. 움직이는 물체 인식 -> 자동 소등 장치

2. 물체 갯수 파악 -> 교통량 측정, 동전 세기

3. 물체 추적 -> 감시

4. 물체 동작 인식 -> 감시

5. 비디오 검색 -> 이미지로 영상 찾기

6. 장면 이해 ->자율주행

 

7. 3차원 공간 재구성 ->스포츠 중계

https://www.researchgate.net/figure/Voxel-carving-approach-for-3D-reconstruction-Process-with-4-cameras-around-the-subject_fig1_262362824

 

 

 

 

영상의 특성

- 공간 일관성 spatial coherence : 특정 화소와 주위 화소가 유사

- 시간 일관성 temporal coherence : 시간의 변화에 대한 연속 영상에서의 픽셀끼리 비슷

 

 

 

동적 비전의 종류

1. 차영상

2. 모션 필드

 

 

차영상 difference image

- 시간 t와 t+1에서의 영상간의 차이 영상

 

 

 

3차원 공간의 3차원 투영

- 현실의 3차원 공간은 투영 중심을 통해 2차원 영상으로 투영됨

- 아래는 이를 간략화 한 핀홀 카메라 모델

 

 

 

 

 

모션 필드  motion field = 동작장

- 연속된 두 영상 사이의 모션 벡터 v

- 모든 점에서의 모션 벡터 v의 지도 => 모션 필드

- 아래의 예시는 이동한 사각형 사이의 모션 장을 보여줌

http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT12/node3.html

 

 

모션 필드의 문제

- 물체가 가만히 있더라도 회전이나 광원 이동에 따라 모션 필드가 변할 수 있음

 

 

 

 

300x250
728x90

사례 인식

- 어떤 종류에 속하는 특정한 사례가 인식의 대상

- 아래의 그림은 개구리와 기차에 대한 모델이 존재할때, 아래의 사진이 입력된 경우 사진 요소들의 사례 인식 

 

 

 

 

이전의 사례 인식 연구

- 다른 물체에 의해 가려지거나 뒤틀려진 경우를 고려하지 않은 단순한 경우들을 연구

=> 실제 환경에서는 다른 물체로 가려지거나 찌그러질수도 있음.

 

사례 인식을 위한 방법

1. 전통적인 방법

- 기하학적 인식

2. bag of words 단어 가방

 

 

 

 

 

 

 

 

 

기하 정렬

- 한 물체에 대해 일관적인 매칭 쌍 모음

 -> 물체가 여러 종류인 경우에는 어떻게 다룰까?

 

기하 정렬 알고리즘 구성

- 2 단계로 구성

1. 모델 구축 단계 

 검출 관심점 전처리 -> 특징 벡터 추출 -> 관련 정보와 저장 = 특징 집합 P

  -> P의 워소들을 인덱싱(해싱이나 kd트리)

2. 인식 단계

  기능 : 영상이 입력 됨 -> 존재 물체 물체 판단 -> 기하변환 행렬 계산 및 출력

   입력 영상서 관심점과 특징 벡터 추출 -> 각 물체 분류의 매칭쌍 리스트 추출 -> 매칭쌍 리스트로 기하 정렬 수행 

  -> 기하 변환 행렬 취득 -> 기하변환 행렬이 임계치를 넘으면 해당 분류의 물체가 인식된것으로 판단

* 기하 정렬 수행 알고리즘 : RANSAC 활용 => 입력 매칭쌍 리스트, 출력 기하 변환 행렬

기하 정렬의 예시

 

 

 

 

 

 

 

 

 

기하 정렬의 한계와 정보 이론

- 기하 정보의 한계 : 계산 시간이 오래 걸림

- 개선 방안 : 기존의 정보 검색 이론을 활용

- ex. 정보 검색 엔진은 빠르게 질의어로 문서를 찾아줌

 

 

정보 검색의 원리

- 문서를 빈도 벡터로 변환하여 간략화

=> 단어 집합에 있는 단어가 문서에서 나오는 횟수를 벡터로 표현

 

 

텍스트 문서를 빈도 벡터로 바꾸기

- 텍스트 문서

 doc1 길동은 농구와 탁구를 좋아한다.

 doc2 농구 선수나 탁구 선수가 되길 원하는 학생이 많다.

 

- 사전 : [길동, 농구, 탁구, 좋아하다, 선수, 되길 원하다, 학생, 많다]

 

- 벡터

  1. v1 = {1, 1, 1, 1, 0, 0, 0, 0}

  2. v2 = {0, 1, 1, 0, 2, 1, 1, 1}

 

 

 

 

 

 

 

 

 

 

단어가방 Bag of Words 이란

- 정보 검색에서의 경우 문서를 단어 벡터로 만들어 표현하는 방식

 

정보 검색 알고리즘

- 정보 검색의 핵심 연산 -> 문서간 유사도 측정

- doc1과 doc2의 유사도를 구할수 있으면 됨

 => doc1과 doc2는 비교하기 어려우므로 , v1과 v2를 비교

 

단어 빈도 벡터 term frequency vector

- v1, v2처럼 단어의 횟수를 나타내는 벡터.

- tf 벡터라고도 함

 

 

 

 

 

 

 

 

 

tf-idf 벡터

- tf term frequency: 단어 빈도

 -> 아래의 경우 정규화된 단어의 빈도수

- idf inverse document frequency : 역문서 빈도

 -> log (전체 문서 갯수 / i번째 단어가 나온 문서의 갯수)

- tf-idf 벡터는 정규화된 단어 빈도와 역문서 빈도로 아래와 같이 정의

  => 많이 나온 단어에 더 큰 가중치를 줌(정규화 단어빈도) + i번째 단어 문서가 적다면 높은 가중치(역문서 빈도) 

 

두 tf-idf 벡터간 유사도 측정

- 두 벡터의 유사도 = 두 벡터 사잇 각 코사인 => 코사인 유사도

- 질의 된 문서의 벡터와 k번째 문서의 벡터 사이 유사도는 아래의 식으로 계산 가능

 

 

 

 

 

영상에서의 단어 가방

- 영상에서의 단어 후보 : 에지, 영역, 관심점

 => 최적의 단어 : 관심점 + 기술자 <-> 문제점 : 특징은 크기도 크고 많으므로 계산량이 매우 커짐

- 개선 방안 : 가까운 특징 벡터들을 중 하나를 대표 단어로 사용.

 

벡터 양자화

- 특징 공간을 임의의 d 개로 나누는 작업

=> 군집화 알고리즘이 사용(ex. k-means)

 

시각 단어 visual word

- 특징 공간 상의 각 구간에 대한 대표 특징 벡터

-> 시각 단어의 갯수 = 사전의 크기는 d개

 

시각 단어 사전 구축하기

1. 영상에서 특징과 기술자 검출

2. 벡터 양자화를 수행

3. 클러스터링 하여 대표 특징 벡터 획득 -> 시각 단어로 사용

4. 각 분류에 대해 tf-idf 벡터 계산

 

 

영상 인식

- 입력 영상에서 특징 벡터 추출

- 사전에 존재하는 분류중 하나인 경우 유사도가 비슷함

- 사전에 없는 부류라면 모든 시각 단어와 유사성이 낮음 -> 인식 못하는 특징 벡터(시각 단어)

 

 

 

 

 

300x250
728x90

얼굴인식

- 얼굴 인식에서는 두 단계로 이루어짐

- 1. 얼굴 검출, 2. 얼굴 인식

 

 

특징 벡터 수집 방법

- 이전에 봤던 특징 벡터를 수집하는 방법을 다시 되돌아 보면 다음의 3가지가 존재

1. 일정 영역

2. 슬라이딩 윈도우

3. 지역 특징

 

 

 

얼굴 검출 알고리즘들

- 신경망을 이용하여 추출하는 방법

- SVM을 사용하는 방법

- 비올라 존스 알고리즘

 

신경망으로 얼굴 검출

- Retinal Connected Neural Network, 1996

- 입력 영상을 피라미드 영상으로 변환 -> 다양한 크기 얼굴에 대처

- 20 x 20 크기의 슬라이딩 윈도우를 이동하며 얼굴 판단.

 * 윈도우로 전처리 -> 신경망 입력 -> 얼굴 여부 판단 

 

https://arxiv.org/pdf/1404.1292.pdf

 

 

SVM으로 얼굴 검출하는 경우

https://www.researchgate.net/figure/Block-diagram-of-the-face-detection-system_fig1_228351802

 

 

 

 

비올라 존스 알고리즘 개요

- SVM, 신경망 같은 복잡한 분류기 사용

- 비올라 존스 알고리즘은 유사 하르 특징 Haar-like feature  사용

- 분류기는 단순 결정 트리를 직렬 연결 -> 직렬 분류기 cascade of classifier

- 빠른 특징 추출을 위해 적분영상 사용

 

 

유사 하르 특징

- 에지, 선 등 추출하기 위해 다음의 유사하르 특징 연산자들을 사용

 

비올라 존스 알고리즘을 이용한 특징 검출 예시

- 4개의 유사 하르 연산자 사용 -> 4개의 하르 연산자들을 조합 조합하여 많은 특징 추출 가능

- 4가지 유사 하르 연산자와 유사 하르 연산자들의 조합을 통한 특징 추출 예시 1

https://eehoeskrap.tistory.com/95

- 유사 하르 연산자들의 조합을 통한 특징 추출 예시 2

https://www.semanticscholar.org/paper/A-comparative-study-between-LBP-and-Haar-like-for-Kadir-Kamaruddin/3ec98dabbcf440db746d4baf6550e44e12c5ee76/figure/1

 

 

비올라 존스 알고리즘으로 구한 결과 경우의 수

- 24 x 24 얼굴 영상의 경우 4 유사 하르 연산자를 조합한 경우

 => 160,000개의 서로 다른 특징 추출 가능

 

 

 

적분 영상

- 명암 영상을 합한 결과 영상 -> 빠르게 특징 추출 가능

- 특정 픽셀까지 모든 화소들의 합 => 적분 영상에서의 값

- 가로 2 x 세로 4 크기의 블록의 합을 구하려면 8개의 픽셀 값이 필요 

 => 적분 영상 사용시 4개의 픽셀 값들을 이용하면 구할 수 있음.

 

 

비올라 존스 알고리즘과 적분 영상

- 모든 유사 하르 연산자들은 적분 영상으로 추출

https://www.sciencedirect.com/science/article/pii/S2468067216300116

 

비올라 존스 알고리즘으로 얼굴 검출

- 위는 얼굴 상에 존재하는 유사 하르 특징을 찾는 과정

- 하지만 얼굴 크기가 작거나 위치가 다른 경우를 대처하기 위한 방법이 필요

-> 슬라이딩 윈도우 사용 : 24 x 24 윈도우를 몇 픽셀씩 이동시킴. 아다부스트로 얼굴 여부 판단

-> 윈도우 확대 : 영상 마다 얼굴 크기가 다르므로 1.25배씩 확대

300x250
728x90

분류 앙상블 classifier ensemble

- 하나의 분류기만으로는 성능이 부족.

- 여러 분류기들을 활용하여 더 나은 성능으로 문제 해결하는 개념

https://www.geeksforgeeks.org/ensemble-classifier-data-mining/

 

 

기본 분류기 base classifier

- SVM, 신경망 등 분류기 -> 강한 분류기

 

앙상블과 약한 분류기

- 분류 앙상블에서는 여러개의 약한 분류기들을 사용

 ex. 기초 분류기 : 신경망 -> 약한 분류기 : 성공률이 50%인 퍼셉트론

 

앙상블에서 분류기들의 결합 방법

- 분류기들 간 투표 -> 가장 많은 표를 받은 분류기 결과 반영

 

 

 

 

샘플링 방법

- 리샘플링 : 동일한 샘플들을 어러번 사용

- k겹 교차 검증 : 전체 샘플들을 k 등분 하고, k-1개 부분집합을 학습, 나머지 1개 부분집합으로 성능 평가

- 부트스트래핑 : k겹 교차 검증과 동일하나 샘플들 사이 중복을 허용

https://specialscene.tistory.com/26

 

 

 

 

 

 

부트스트랩

- 샘플들을 k개로 나눌 시 샘플들의 중복을 허용하여 훈련

https://yashuseth.blog/2017/12/02/bootstrapping-a-resampling-method-in-statistics/

 

 

분류 앙상블 기법

1. 배깅

2. 부스팅

3. 아다부스팅

4. 랜덤 포래스트

 

 

배깅 bagging

- 확장한 부트스트랩 bootstrap aggregating => 부트스트랩을 다중 분류기에 적용한 기술

- 사용한 샘플들을 다시 넣어(재샘플링) 학습에 사용

- 부트스트랩핑으로 재샘플한 데이터셋으로 약한 분류기들을 학습 -> 투표하여 결과를 선정

https://gaussian37.github.io/ml-concept-bagging/

 

 

 

 

부스팅 boosting

- 배깅보다 정교하게 재샘플링을 수행한 앙상블 기법

 * i번쨰 분류기와 i + 1번쨰 분류기간 연관성을 가진 샘플들로 학습 수행

- 처음에는 맞는 샘플들, 틀린 샘플들로만 분류하다가 이후에 이들이 혼합된  복잡한 데이터셋으로 학습

 

 

 

아다부스트 Adaboost

- 각 분류기 마다 가중치가 큰 샘플들을 잘 맞출수 있도록 학습

1. 아래의 그림과 같이 +와 -가 가능한 가장 잘 구분되도록 분류기들을 학습

2. 맞춘 샘플들은 가중치를 낮추고, 틀린 샘플들의 가중치를 높임

3. 약한 분류기들의 틀린 샘플 오류 합을 구하여 강한 분류기 취득

=> 틀린 샘플들은 높은 가중치를 가지면서 격리됨

 

 

 

 

 

 

 

랜덤 포레스트 random forest

- 부스팅 기법에서 분류기들은 상호 보완

- 랜덤 포레스트에서 분류기들은 서로 독립됨

- 기본 분류기는 트리 분류기 사용. 트리의 각 노드들은 특징 하나를 비교하여 분기 시킴.

- 아래의 그림은 특징 벡터가 주어질떄 분류하는 과정

https://www.geeksforgeeks.org/decision-tree-introduction-example/

 

300x250
728x90

분류기 일반화 성능

- 다음의 샘플이 주어질 떄, 다양한 분류 모델이 제공될 수 있음.

- 학습 과정을 통해 분류기는 학습 데이터들을 가장 분류하는 H2로 수렴함 => 일반화 성능이 가장 좋음 

https://ko.wikipedia.org/wiki/%EC%84%9C%ED%8F%AC%ED%8A%B8_%EB%B2%A1%ED%84%B0_%EB%A8%B8%EC%8B%A0

 

SVM

- 기존의 분류기들은 오류 최소화(최소 제곱법 least square method)하는 방향

- 서포트 벡터 머신은 오류 최소화 + 마진 최대화 하여 일반화 능력을 극대화 시킨 알고리즘

- 선형 회귀 모델을 다루는 선형 SVM과 비선형 모델을 다루는 비선형 SVM이 존재

 

 

선형 SVM

- 이진 분류 binary classification 수행하는 결정 초평면 decision hyperplane에 대한 식은 아래와 같이 정리할 수 있음.

- 결청 초평면을 이용한 선형 분리

 

 

선형 SVM과 결정 초평면 hyperplane

- 여백 margin을 최대화 화는 결정 초평면의 기울기 w를 구해야 함

 => 최적화 문제로 다루게 됨

- 서포트 벡터 support vector : 여백의 크기를 결정하는 샘플들

 => 서포트 벡터까지의 거리가 최대로 되도록 조절하는 결정 초평면 찾기

 

 

SVM과 최적화 문제

- 결정 경계 decision boundary와 서포트 벡터까지의 거리가 1이 되도록 한다면 다음과 같이 정리 가능

-아래와 같이 학습 집합을 정의

- 모든 샘플들을 올바르게 분류하는 결정 초평면 hyperplane 찾기

 => 조건부 최적화 문제 constrained optimization problem이 됨

- 아래의 조건이 주어질때 등호가 성립하는 경우가 서포트 벡터

- 최적화 문제를 다음과 같이 정리


라그랑주 승수와 조건부 최저화

- 위 조건식에 라그랑주 승수 alpha_i를 부여

- 함수 L을 w와 b로 미분후 0으로 정리. 

 

- KKT Karush-Kuhn-Tuckker 조건식을 유도하여 정리하면, 아래의 식을 최대화 하는 라그랑주 승수를 구하는 문제가 됨.

 

 

선형 SVM과 비선형 SVM

- 결정 초평면으로 선형 분리가 불가능 한 경우도 존재

https://stackoverflow.com/questions/44606126/linear-svm-vs-nonlinear-svm-high-dimensional-data

 

 

비선형 SVM

- 2차원 공간(input space)에서 선형 분리가 불가능 한경우, 3차원의 공간(feature space)에선 결정 평면 decision surface로 선형 분리가 가능

- 아래의 그림과 같이 매핑 함수 Phi를 사용하여 3차원 공간으로 확장 가능

- 매핑 함수를 이용해 조건부 최적화를 다루는 목적  함수로 정리 가능

- 매핑 함수는 고차원이라 실제로는 사용 불가 -> 매핑 함수의 내적인 커널 함수로 사용 가능

300x250
728x90

컴퓨터 비전에서의 기계학습

- 주어진 영상에 대해 특징 벡터 추출 -> 분류기 학습 (학습 집합 생성) -> 입력 영상 분류

- 분류기(학습 모델) 종류 : 신경망, SVM, 에이다부스트, 랜덤포래스트

 

 

특징 벡터 수집 방법

1. 일정 영역

2. 슬라이딩 윈도우

3. 특징점

슬라이딩 윈도우 예시

 

 

신경망

- 퍼셉트론 가중치들을 나타내는 매개변수 집합이 존재

- 목적 함수 : 매개 변수들의 값이 적절한지 판단

- 학습 집합 : 최적의 매개변수를 추정하도록 사용하는 데이터 

  => 매개변수가 일정 조건에 수렴할떄까지 반복

- 검증 집합 : 학습된 신경망을 검증하기 위한 데이터 집합

- 모델 선택 : 신경망 모델이 만족스럽지 못한 경우 개선된 모델 선택

- 과적합 overfitting : 신경망 학습시 아웃라이어들에도도 과하게 최적화된 상태. 일반적인 경우 잘못 분류할수 있음

 

 

성능 개선 및 평가 기법들

- 리샘플링 : 같은 샘플을 여러번 사용

- k겹 교차 검증 : 전체 샘플을 k 등분 하여, 각각의 부분집합 k-1개로 학습, 나머지 1개 부분집합으로 검증

- 부트스트랩 : 검증시 샘플의 중복을 허용함

 

 

 

 

 

 

300x250

+ Recent posts