영상으로부터 사람의 포즈, 관절정보를 추정하는 알고리즘 # MPI protoFile = "pose_deploy_linevec_faster_4_stages.prototxt" #신경망의 구조 weightsFile = "pose_iter_160000.caffemodel" #실제 학습 weight net = cv2.dnn.readNetFromCaffe(protoFile, weightsFile) Caffe라는 신경망 프레임워크를 사용! readNetFromCaffe : 카페로부터 학습되어 있는 weight를 읽어서 출력해주는 함수 frame = cv2.imread("single.jpeg") #이미지를 읽는다. frameCopy = np.copy(frame) #복사본을 만든다. frameWidth = frame.s..
Darknet이라는 네트워크는 객체 검출만을 위한 네트워크가 아닌 신경망처럼 일반적인 네트워크를 구성하기 위한 방법론이다. 전용함수가 있는 것이 아니라 신경망 출력함수만 있어 충분한 이해와 해석이 필요하다. 객체 검출 import cv2 import numpy as np from matplotlib import pyplot as plt modelConfiguration = "yolov3.cfg" modelWeights = "yolov3.weights" net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights) net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV) net.setPreferableTarget..
import numpy as np from matplotlib import pyplot as plt import json #json 파일 디코딩 #사전의 학습해 놓은 모델들 import keras from keras.applications.vgg16 import VGG16, decode_predictions from keras.applications.resnet50 import ResNet50 from keras.applications.inception_v3 import InceptionV3 from keras.preprocessing.image import load_img from keras.preprocessing.image import img_to_array #파이썬 표준 이미지 라이브러리 , 이미..

import cv2, numpy as np from matplotlib import pyplot as plt from sklearn.datasets import fetch_olivetti_faces from keras.models import Sequential from keras.layers import Dense, MaxPooling2D, Flatten, Activation from keras.layers.convolutional import Convolution2D from sklearn.model_selection import train_test_split import keras.utils as utils import cv2 import keras import io import tensorflow..

이전에 신경망들은 데이터를 구성하고 있는 특징들을 고려하지 않았다. 데이터들의 차원은 독립적이라고 보았다. 시각적으로 다르게 인식할 수 있는 패턴임에도 신경망 알고리즘에서는 구분하지 않았다. 영상 데이터 표현은 인간의 시작 정보 체계를 신경망에 반영하고 있지 않았다. 즉, 위치 정보가 중요한 다차원 데이터 표현방법이 필요했다. 해결방법은 주변 특정 정보를 포함한 표현 혹인 인코딩 방법이 필요하다. 위치 정보를 고려하지 않게되면 점에서의 y값이 같기 때문에 구분할 수 없다. 반대로 특징 간 위치 정보를 포함해서 인코딩을 한 경우 왼쪽과 오른쪽 같을 보면서 특성을 파악하고 구분할 수 있다. 이렇게 주변 정보를 활용할 경우 인식률이 높힐 수 있다. 영상도 동일하다.픽셀값이 같으면 구분을 할 수 없지만 주변 정..
전이 학습? 데이터가 적은 경우에 CNN을 가지고 학습하기 어렵다. 특히 영상 크기가 크게 되면 학습 해야할 파라미터가 많은데 충분히 데이터가 공급되어 있지 않으면 학습이 정상정으로 진행되지 않는다. 따라서 이를 해결하기 위해 쉽게 설명하면 A라는 문제를 푼 경험이 있다면 A와 유사한 문제를 쉽게 풀 수 있지 않을까? 하는 개념이다. 이러한 방식을 사용하여 임의의 객체를 분류하기 위해서 ImageNet을 이용하여 특징 추출을 사용하고 추출된 특징을 기반으로 분류기만 학습을 시킴. 이런 방법이 전의학습이다. 영상인식은 특징 추출과 분류하는 부분으로 나누게 되는데 특징 추출은 굉장히 시간이 오래걸리는 분야로, ImageNet으로 썻던 학습 파라미터 CNN을 사용하고 분류기만 재 학습을 시키자! 우리가 알아 ..

객체검출에도 다양한 알고리즘이 있는데 최근에 가장 관심을 받고 있는 알고리즘은 YOLO(you only look once) 이다. 한 번 보고 객체 검출의 위치와 인식 기능이 구현된 알고리즘이다. 😎 실시간으로 검출이 가능하기 때문에 초당 30 프레임까지도 객체 검출이 가능해 다양한 활용사례에 나타난다. 일단 객체 검출에 대해서 알아보자! 주어진 영상에서 오브젝트 단위로 판단하기 보단 픽셀 단위로 판단해서 픽셀이 어느 클래스에 해당하는지 영역 분할을 한다. (Semantic Segmentation) 이때! Semantic Segmentation의 단점 ❓ 소가 두마리 인 것을 구분하지 않는다. 그냥 소 영역 일 뿐 만약 고양이를 검출하기 위해서는 고양이가 어디 있는지 위치를 잡고 (Localization..

전이 학습이란? 다른 곳에서 학습된 결과를 재 사용하는 방법 Freeze란? 얼린다는 의미 즉, 학습이 불가능하도록 얼린다는 의미이다. VGG16는 매우 오랜 시간 동안 학습하기 위해 train이 되었다. CNN은 특징 추출과 특징 분류로 구성되어있다. Freeze 시키는 것은 일단 VGG16로 학습을 시킨다. 그리고 분류기 부분만 새롭게 학습을 한다. 이전에는 CNN으로 계층을 만들고 필터링을 통해 필터링 후 뒤에다가 일반 신경망을 붙이는 것이었는데 시간이 오래 걸리고 네트워크 크기가 굉장히 커지게 된다. (이미지 크기가 크기 때문) vgg_conv = VGG16(weights='imagenet', include_top=False, input_shape=(image_size, image_size, 3)..