라벨이 인공지능인 게시물 표시

디지털 카메라에 대한 이해 interpolation, signal process, image noise, Binning

이미지
디지털 카메라에 대한 이해  -RAW Bayer Pattern  RAW Bayer Pattern: 이미지가 들어오고 나서 이미지 센서에서 영상 정보로 저장되는 저장되는 패턴  (RGB값이 아님, Raw Bayer pattern 에는 한 픽셀에 하나의 컬로원을 가지고 있음)  위와 같은 경우는 BGGR 패턴으로 읽는다. 이미지 센서단에서 여러 RGB값을 가진 백색광 등의 빛의 파장이 들어오면, 왼쪽 센서그림과 같이 각각 취득된 정보들을 사람이 알수 있도록 최대한 자연스러운 RGB 패턴으로 바꿔주는 interpolation과 같은 과정을 가진다. ( nn, bilinear등,,) -Image signal process 이미지 센서단에서 취득한 이미지RAW값을 사용자가 볼 수 있는 RGB값으로 처리하기 위해서는, 위 그림에서처럼 이미지 영상을 렌즈에서 받아 이미지 센서에서 아날로그 데이터를 받아 들인 후, Quantization을 통해 연속적인 데이터를 이산 데이터로 바꾼다 ( 아직 Bayer data) image processing engine에서는 raw image를 RGB영상으로 변환하고, 밝기를 조절하고, 화이트밸런스를 맞추고, edge와 contrast를 조정한다. 그 후 우리가 볼 수있는 image로 사용된다.( display, 압축, 전송 등) 압축 시 JPG 확장자로 할 때, RAW image를 어느정도 loss하면서 압축을 진행하는 반면, PNG형태로 영상을 저장하면 loss없이 그대로 압축을 진행하게 된다  -IMAGE NOISE     SHOT NOISE : 실제 영상 촬영 당시 불균형하게 들어가는 빛의 noise, 푸아송 분포를 따름     READ NOISE : 이미지 quatization과정 (analog -> digital 변환)에서 나타나는 고유한 output noise, 가우시안 랜덤 분포를 따르고, digital gain에 비례 노이즈 제거하는 방법:...

비전공자를 위한 개쉬운 인공지능 코딩- 딥러닝 신경망 만들기(3-1)

이미지
지난 시간까지 인디언 부족의 몇년동안 누적된 의료기록 데이터를 가져오고 전처리하는 과정을 하면서 딥러닝을 하기위한 모든 준비가 마쳤다 이번 시간에는 4번째 강의만에 드디어 딥러닝스러운 신경망을 만들어보는 차례다 원래 정공법은 다양한 활성화 함수라던가 역전파 이론이라던가 수학적인 배경을 채우면서 이론을 배경으로 구현하지만 실제로 내가 그렇게 해본결과 재미도없고 비전공자는 한단락 읽고 나갈것이 자명하다                                               (나와 우리 교우들은 이런거로 시작함;) 따라서 레고들을 가지고 조립하며 구현하는 과정에서 우리 어렸을 적에 '김영만 종이접기' 처럼 경험적으로 배우는게 훨씬 기억에 잘 남고 이해가 잘된다고 생각한다.  (사실 인공지능이라는게 핫해진지 얼마 안되어서 정공법으로 배운다 라는 개념이 없긴함)  일단 오늘은 LSTM이나 GRU 같은 '순환 신경망' '시계열 데이터를 다루는 딥러닝' 등의 상위 개념인 '시퀀셜 모델 신경망'을 만들기 위해 신경망 레이어를 만들며 익혀볼것이다. 시계열데이터, 순환신경망, 시퀀셜 모델 이런것은 '시계열 데이터'를 분석 혹은 예측과 같은 작업을 위해 사용하는 신경망인데, 시계열 데이터는 지난 시간에 배웠듯이 시간 순서에 따라 벨류가 찍히는 시간적인 역학관계가 내포된 데이터다 지금 최대한 쉽게 설명하고 있는데 아마 비전공자 입장에서보면 슬슬 벽이 느껴질 수 있으니까 꼭 1편부터 보는것을 추천한다 아무쪼록 이런 시퀀셜 모델의 신경망을 케라스로 만들때는 굉장히 쉽다 일단 예제코드를 보면서 하나씩 설명을 하자면 , i) 우선 추후에 어떤 심화적인 딥러닝 코드를 하더라도, 보통 우선은 '케라스' 로 할 경우에 시...

비전공자를 위한 개쉬운 인공지능 코딩- 딥러닝용 데이터 라벨링하기 (2-3)

이미지
 지난 시간엔 어디서 어떤 종류의 데이터를 가져오는 간단한 방법, 데이터 전처리의 개념과 간단한 예제를 다루어보았다. 이번엔 지난 시간의 숙제 데이터였던 인디언들의 당뇨병 여부를 포함한 5년동안의 의료기록을 이후 당뇨병 확률을 예측하기 위한 데이터 라벨링 기법을 다루어본다.  데이터 라벨링이란 우리가 가져온 '인디언 의료기록 데이터' 나 '캘리포니아 주택동향' 데이터와 같이 사람이 만든 데이터를 AI가 학습할 수 있도록 0과 1등으로 가공하는 과정으로 전처리의 일종이기도 하다.   자료의 설명란을 보면 알 수 있지만, 인디언 데이터를 처음 가져오면 이런 형태로, 각 열은 아래와 같다 (다운받을 때 다 설명이 쓰여있다) A: 임신횟수 B: 경구 포도당 내성검사에서의 2시간 동안 혈장 포도당 농도  C : 이완기 혈압  D : 삼두근 피부 주름 두께 E : 2시간 혈청 인슐린 F : 체질량 지수 G: 당뇨병 가계도 기능 H: 나이 I: 당뇨병 판정 여부 ( 1: 양성, 0: 음성)  딥러닝, 머신러닝 을 포함한 인공지능 알고리즘 대부분이 'input data' 를 받아 학습해 'output data' 의 형태로 결과를 내뱉는다  따라서 이번의 인디언 의료 데이터는 A~H 까지는 input 데이터 X 변수로 , I는 output 데이터 y로 사용한다.   이를 통해 우리가 개발할 딥러닝 프로그램은 X를 y에 mapping 하는 모델이며 이전 장에서 배웠던 데이터 슬라이싱을 이용해 아래와 같이 나눌 수 있다. X = dataset[:,0:8] y = dataset[:,8] 인디언 의료기록 데이터셋과 같은 Kaggle이 제공하는 오픈소스 데이터의 종속변수 (y) 는 보통 0과 1로 잘 라벨링되어 공개된다. 하지만 우리가 실제로 다른 경우에서 자기만의 딥러닝 모델을 사용할때 필요한 데이터에는 라벨링이 되어있지 않을 가능성이 크고, 실제로 엑셀을 열어서 한땀한땀 하기에 굉장히 노동력이 ...

비전공자를 위한 개쉬운 인공지능 코딩- 딥러닝용 데이터 가져오고 분석하기 (2-2부)

이미지
지난 2-1차시까지 Colab 환경설정, 딥러닝을 위한 부품세팅과 주요 라이브러리 소개를 했다. 이번 2-2 포스팅에서는 '어떤'데이터를 '어디서' 가져와서 '어떻게' 사용하는지 설명한다. 딥러닝을 포함한 모든 인공지능은 학습이 가장 중요한데, 인공지능을 처음 구현을 했을땐 아주 똑똑하고 능력있고 빠른 아이와도 같기 때문이다. 애들이 얼마나 좋은 능력을 가지고 태어났는지도 중요하지만 얼마나 좋은 정보를 어느 정도로 배워야 하는지에도 굉장히 중요한 것과 같다. 이처럼 어떤 데이터를 적절히 학습시키느냐가 인공지능 프로그램의 성능을 좌지우지한다.   데이터를 취득하는 방법에는 'Kaggle' 이나 'github'와 같이 오픈소스 형태로 편하게 다운받아서 쓰는 경우가 많지만, private하거나 취득에 한계가 있을때는 '생성적 적대 신경망' , 'Autoecoder'등과 같은 생성모델을 이용해 기존의 적은 데이터를 증강시켜 학습에 이용하기도 한다.  1.데이터 가져오기 인공지능 기반의 증강 모델은 본 딥러닝 기초 코스보다 많이 심화된 method이므로 차후에 설명하기로 하고, 이번엔 open source 형태로 colab에 기본으로 달려있는 'california housing dataset' 을 사용한다 지난 시간까지 알려준 Colab 세팅에서 맨 왼쪽의 파일그림을 누르고 'sample data' 디렉토리 하위에 기본으로 설치되어 있다. 지난 시간까지의 환경설정을 잘 따라왔다면, pandas라는 레고를 설치하고, 줄임말로 pd로 만든 후, pandas가 어떤 역할을 하는지 알고 있을 것이다.  pandas는 간단하게 설명을 한번 더 하자면, 데이터 조작 및 분석을 위한 python 용 라이브러리(레고)인데, 이 pd(pandas)를 사용해 캘리포니아 데이터를 우리 프로그램에 받아와 분석해보자 pd 레고봉투에는 'read_csv...

비전공자를 위한 개쉬운 인공지능 코딩- 2편 바로 딥러닝 만들기 (2-1부)

이미지
 지난 시간에는 비전공자도 인공지능 충분히 만들 수 있는 이유, 필요한 준비물과 간단한 환경설정을 해보는 숙제를 했다 이제 본격적으로 인공지능 만들기 컨텐츠를 시작할 것인데, 내 경험상 논문을 작성하는 대학원생이나 연구원 이정도의 깊이가 필요하지 않은 이상, 정석적으로 수학적 기초 접근은 오히려 흥미가 뚝뚝 떨어지고 재미가 없다. 사실 인공지능이라고 해도 프로그램 연구개발 자체가 하다보면 노잼시기가 오는데, 시작부터 '선형관계' 라던지, '퍼지이론' 이런걸 하면 금방 흥미가 없어진다고 자신있게 말할수 있다. (원래는 저렇게 기초를 다지는게 정석이긴 함^^) 그래서 이번 2강은 바로 딥러닝 만들기를 해보면서 모르는 단어, 구조, 1강에서 말한 '레고' 의 사용법을 하나하나 파헤쳐보며 탑-다운 방식으로 배워보자  오늘 배울 딥러닝 프로그램은 아래와 같은 순서로 만들어진다, 또한 심화적인 기술, 기능을 가진 인공지능 프로그램들도 아래와 같은 순서에 크게 벗어나지 않는다 1. 학습용 데이터 가져오기, 전처리하기, 라이브러리 로드 2. Keras를 통한 인공지능 모델 정의 3. Keras 모델 구현 및 컴파일 4. Keras 모델 성능 평가 5. 인공지능한테 미래 예측 시켜보기 여기서 내가 원하는 탑-다운 공부방식이란 교육방법론 같이 거창한게 아니고, 예를들어 독자가 ' 1. 학습용 데이터 로드, 전처리' 를 읽으면서 '전처리' 란 단어를 보고 모르는 단어다 싶으면 검색을 통해 어려운 단어 혹은 모르는 단어를 -> 자신이 알고있는 간단한 단어로 이루어진 설명으로 재해석 이면 충분하다  따라서 본 글도 최대한 비전공자 눈높이에 맞춰서 쓸 예정이지만 '컴파일' '전처리' 와 같은 단어는 모르면 구글링을 통해 간단한 자기만의 한줄요약을 하면서 읽는게 기억에 잘 남고 이해에도 좋다 (내가 적기 귀찮아서 그러는게 아님) 아무쪼록 본 과정에서는 'Keras' 라...

비전공자를 위한 개쉬운 인공지능 코딩- 1편 환경설정

이미지
요즘 유튜브나 이런저런 광고들을 보다보면 코딩, 프로그래밍이 굉장히 인기다 반면에 잘 살펴보면(내가 본 바로는) 대다수가 프론트엔드, 웹디자인, 게임 만들기, 서버 만들기 등이 주류를 이루고 인공지능 연구개발을 다루는건 드물다 아마 인공지능, 신경망, 최적화 같은 용어 기반으로 접근해서 수식 팍팍 튀어나오니까 많은 비전공자들이 심리적인 거리를 느껴 수요가 적어 그만큼 다루는 컨텐츠의 공급도 적은 것 같다 사실 인공지능은 철학이자 인문학 혹은 초등학교때 배웠던 '문제푸는 방법찾기' 와 같다 인공지능은 크게 머신러닝/ 강화학습/ 딥러닝 이렇게 분류가 되고는 하는데, 이 세가지가 다루는 문제를 합집합으로 표현하면 분류(classification)과 회귀(regression)이다. 이 외에도 생성적 적대 신경망이라던가 분산학습이라던가 등등 있는데 큰 틀로보면 보통 저 두가지 문제로 많이 입문하고 사용처도 많은 것 같다 -분류(classification) 는 인공지능이 사람이 관계성을 찾기 어려운 복잡한 데이터를 학습하여 유의미한 관계를 찾아내 파악하거나, 혹은 이미지 데이터를 인식하거나 해서 요즘 많이 사용되는 자율주행 차량에 사용되거나 한다. -회귀(regression)는 인공지능이 연속적인 데이터, 예를들어 주식같은 데이터를 학습하여 차트와 거래량의 과거의 관계성을 파악해 미래를 예측하거나 하는데 사용되거나 한다. 이를 비롯해 부족한 학습용 데이터를 생성한다던가, 스스로 똑똑해진다던가 하는 많은 인공지능 분야들이 있다 여기서 수학이 팍팍 나오고 어렵고 그러는건 성능을 좋게 만드는 관점에서 등장하지, 인공지능을 만들기 위해서는 전문적인 사전지식보다는 '어떤' 문제를 '어떻게' 접근하여 해결할것인가? 라는 아이디어가 더 중요하다 사실 나도 인공지능SW로 실제로 메인 수입원인 만큼 가장 어려웠던 부분이 아래와 같다 1단계: 여기서 무엇이 문제일까?  문제, 즉 어떠한 불편함, 사건 등에 인공지능이 어느 부분에서 도움이 될까 파...

머신러닝- 비지도학습, 데이터 전처리 part.1

이미지
데이터의 비지도 학습에는 비지도 변환, 군집 두가지 종류가 있다. 비지도 변환: 데이터를 재가공, 새롭게 표현해서 타 알고리즘이 raw dataset 보다 쉽게 활용할 수 있도록 만드는 알고리즘     활용 분야:   특징, 특성이 많은 고차원 데이터의 특성 숫자를 줄이면서 꼭 필요한 부분만 포함한 데이터로 표현하는 차원 축소      ex: 시각화 dataset을 2차원으로 변경하는 경우 군집: 데이터의 특성을 추출해서 비슷한 것끼리 그룹으로 묶는 알고리즘  한계 : 비지도 학습은 레이블이 없는 데이터에 적용하기 때문에 출력의 옳고 그름 판단이 안된다. 따라서 (지도학습과 다르게) 데이터 분석을 위한 탐색적 분석 단계에서 주로 사용됨. 이런 데이터 분석, 군집, 변환으로 재가공, 전처리한 datase을 사용한 지도학습은 기존의 학습보다 정확도가 좋다                                      -스케일 조정은 지도학습 적용전에 사용 i)데이터 전처리, 스케일 조정 (scikit-learn) - StandardScaler는 각 특성의 평균을 0, 분산을 1로 변경해서 특성을 나타낸다. 이 방법은 특성의 최대값, 최소값을 제한하지는 않는다 - RobustScaler는 StandardScaler 와 비슷하게 특성들을 같은 스케일로 두고, 평균과 분산 대신에 중간 값과 사분위 값을 사용해서 이상 데이터를 표현한다. -MinMaxScaler는 모든 특성이 0~1사이에 위치하게 데이터를 변경 -Nomalizer는 특성 벡터의 유클리디안 길이가 1이 되도록 데이터 포인트 조정-->특성 벡터의 길이는 상관없이 데이터 방향과 각도가 중요할 때 사용 -QuantileTransformersms 1000개의 ...

머신러닝 지도학습의 모든 알고리즘별 요약

 1) K-nearest neighbor - 최근접 이웃 알고리즘 작은 데이터셋일 경우 기본적으로 설명하기 쉬운 모델임, training dataset 을 그냥 저장하고, 새로운 데이터 포인트 예측 시 training dataset에서 가장 가까운 포인트 찾는 알고리즘     code: mglearn.plots.plot_knn_classification(n_neighbors=1)      n_neighbors는 가장 가까운 이웃 개수 설정가능, 1개가 아니고 k 개 이웃의 수를 늘릴수록 kneighborclassifier분석 시 결정 경계가 부드러워짐 -> 더 단순한 모델을 의미 -> 복잡도 낮아짐 -> 훈련 데이터의 정확도 감소  최근접 이웃 알고리즘에서 주요 매개변수 : 데이터 포인트 사이의 거리재는 방법, 이웃의 수  장점: 쉽고 파라미터 조정이 많이 필요하지 않음 단점: 훈련 데이터셋이 크면 예측이 느려지고 전처리과정이 복잡, 특성값대부분이 희소한 (0이 많은) 데이터셋은 잘 작동하지 않음 따라서 예측 속도가 느리고 분류 능력이 부족해서 학습용으로만 쓰이고 실무에서는 많이 쓰이지 않음. 2) Linear mode - 선형 모델 알고리즘 대용량 데이터셋, 고차원 데이터셋에 대한 지도학습 가능 특성이 하나일 땐 직선, 두개일 땐 평면 --> 더 특성이 많은 높은 차원에서는 hyperplane(I초평면) 이 되는 회귀모델의 특징을 가지고 있음     2-1) Linear regression (OLS, ordinarty least squares)      예측과 훈련셋에 있는 평균제곱오차(mean squared error)을 최소화하는 파라미터 w,b           찾고, 예측값과 목표값 차이를 제곱해서 더한 후 샘플 수로 나눔     2-2) Ridg...