본문 바로가기

분류 전체보기189

Object Detection 개념 Object Detection 이란? 객체 탐지(Object Detection)는 컴퓨터 비전 기술의 세부 분야중 하나로써 주어진 이미지내 사용자가 관심 있는 객체를 탐지하는 기술이다. 활용분야 자율 주행 자동차 CCTV 녹화 마스크 얼굴 인식 패션 분야에서 상의, 바지, 원피스등 해당 객체 인식 모델 형태 One-Stage Detector vs Two-Stage Detector 간단히 말해서 Classification (분류), Regional Proposal (영역제안)을 동시에 실행을 하는가 아니면 순차적으로 실행을 하는가에 대한 방법의 차이이다. One-Stage Detector Two-Stage Detector 모델 형태 정확도 속도 One-Stage Detector 정확도 ↓ 속도 ↑ Two-.. 2021. 9. 12.
Faster-RCNN 목적 패션 데이터셋을 활용하여 모자, 상의, 하의 등의 객체를 탐지하는 코드를 실행합니다. 데이터 로드 로드하려는 csv 파일 안에 패션에 대한 이미지 URL, 종류, 영역 좌표의 정보가 포함되어 있습니다. 이 정보를 로드하여 시각화하고 확인해봅니다. import os import json import pandas as pd import numpy as np from urllib.parse import * from requests.utils import requote_uri import requests from tqdm.notebook import tqdm BASE_DIR = os.getcwd() annotations_path = os.path.join(BASE_DIR, 'annotations') ima.. 2021. 9. 9.
CNN (합성 신경망) 모델 CNN 모델에 대해서는 블로그와 블로그2 를 참조하였음을 명시한다. LeNet 20여년 전에 제안된 첫 CNN LeNet은 손글씨 숫자를 인식하는 네트워크로 1998년에 제안 현재 CNN 모델과 달리 활성화 함수로 시그모이드를 사용하고 서브 샘플링을 하여 중간 크기가 작아짐 AlexNet 2012년에 발표되어 딥러닝 선도적인 역할을 함 활성화 함수로 ReLU를 사용 LRN이라는 국소적 정규화를 실시하는 계층을 이용함 드롭아웃을 사용 VGGNet 구성이 간단하고 합성곱 계층과 풀링 계층으로 구성되는 가장 기본적인 CNN 다만 비중있는 층(합성곱 계층, 안전 연결 계층) 을 모두 16개(혹은 19개로) 심화한게 특징 층의 깊이에 따라서 VGG16, VGG19로 구분 3 x 3 작은 필터를 사용한 합성곱 계층.. 2021. 1. 24.
트랜스포머 (Transformer) 정의 RNN을 사용하지 않고 오직 어텐션의 기술을 활용하여 인코더-디코더를 구현한 구조 시퀀스투시퀀스 (seq2seq) 한계 각 단어간의 유의미한 관계를 분석하는데 어려움 문장이 긴 경우 은닉상태에서 정보가 손실 트랜스포머 (Transformer) 구조 인코더와 디코더라는 단위가 N개로 구성되는 구조 포지셔널 인코딩 (Positional Encoding) 인베딩 벡터 + 단어의 위치 정보 수식 : 인덱스가 짝수인 경우에는 사인 함수의 값을 사용하고 홀수인 경우에는 코사인 함수의 값을 사용 순서 정보가 보존 : 임베딩 값에 포지셔널 인코딩 값을 더하면 같은 단어라고 하더라도 입력값이 달라진다. 어텐션 (Attention) 인코더의 셀프 어텐션 : Query = Key = Value 디코더의 마스크드 셀프 .. 2021. 1. 19.
Attention (어텐션) 정의 입력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고하는 기술 사용이유 첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하려고 하니까 정보 손실이 발생 둘째, RNN의 고질적인 문제인 기울기 소실(Vanishing Gradient) 문제가 존재 즉, 결국 이는 기계 번역 분야에서 입력 문장이 길면 번역 품질이 떨어지는 현상으로 나타나서 이를 위한 대안으로 입력 시퀀스가 길어지면 출력 시퀀스의 정확도가 떨어지는 것을 보정해주기 위한 등장한 기법인 등장 2021. 1. 15.
시퀀스-투-시퀀스 (Sequence-To-Sequence, seq2seq) 정의 입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 모델 활용 챗봇 (Chatbot) 기계 번역 (Machine Translation) 내용 요약(Text Summarization) STT(Speech to Text) 용어정리 - 임베딩 벡터 기계는 텍스트보다 숫자를 잘 처리합니다. 그래서 자연어 처리에서 텍스트를 벡터로 바꾸어 처리를 하는데 단어들을 벡터화 한 것을 말합니다. - 컨텍스트 벡터 입력 받은 모든 단어 정보들을 압축해서 하나의 벡터로 만드는데, 이를 컨텍스트 벡터(context vector)라고 합니다. - 인코딩 입력받은 문장의 단어들을 압축해서 하나의 컨텍스트 벡터로 만드는 역할을 합니다. - 디코딩 입력받은 문장의 단어들을 압축해서 하나의 컨텍스트 벡터로 만드는 역할을 합니다.컨.. 2021. 1. 12.
python - 힙 큐 (heapq) 정의 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는 이진 트리입니다. 이 구현에서는 모든 k에 대해 heap[k] 2020. 12. 22.
CNN (합성 신경망) CNN 정의 Convolution Neural Network (합성신경망)으로 이미지를 입력받아 분류 결과를 출력한다. CNN 특징 이미지 입출력 데이터 형상 유지 이미지 공간을 유지하면서 인접 이미지와의 특징을 효과적으로 인식 복수의 필터로 이미지 특징 추출 및 학습 추출한 이미지의 특징을 모으고 강화하는 Pooling 레이어 필터를 공유 파라미터로 사용하기 때문에, 일반 신경망과 비교하여 학습 파라미터가 매우 적음 CNN 레이어 1. 컨볼루션 Convolution 입력 데이터로부터 필터로 합성곱 연산을 수행하여 Feature Map을 생성한다. 2. 채널 Channel 이미지 픽셀은 실수로 되어 있으며 RGB 3개의 실수로 표현한 3차원 데이터이다. 3. 필터 Filter == Kernal 필터는 이.. 2020. 12. 22.
python - functools functools.reduce( function , iterable [ , initializer ] ) 이터레이터를 왼쪽에서 오른쪽에서 순차적으로 누적하여 적용할때 사용합니다. 예를 들어 x는 누적된 값이고 y는 업데이트 되는 값입니다. from functools import reduce reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) # result ((((1+2)+3)+4)+5) = 15 functools.cmp_to_keyfunctools.cmp_to_key( func ) 비교 함수를 주요 함수로 사용합니다. 비교 함수는 두 개의 인수를 받아 비교하고, 보다 작으면 음수, 같으면 0,보다 크면 양수를 반환하여 사용합니다. from functools import cmp_to.. 2020. 12. 18.
python - startswith, endswith startswith 접두어 부분 매칭 여부를 판단할때 매우 유용하다 str = 'Hello world!' print( str.startswith( 'Hello' ) ) # True print( str.startswith( 'He' ) ) # True str = 'Hello world!' print( str.startswith( 'll' ) ) # False print( str.startswith( 'll', 2 ) ) # True str = 'Hello world!' print( str.startswith( 'Hell', 0, 3 ) ) # False print( str.startswith( 'Hell', 0, 4 ) ) # True endswith 접미어 부분 매칭 여부를 판단할때 매우 유용하다 pri.. 2020. 12. 18.
python - Counter 정의 Counter 는 dict 해시 가능한 개체를 계산하기 위한 하위 클래스입니다. 요소가 사전 키로 저장되고 개수가 사전 값으로 저장되는 컬렉션입니다. __init__ : 생성 빈 객체로 생성 string 인자로 생성 dict 인자로 생성 keyword argument 인자로 생성 # 빈 객체로 생성 c = Counter() # string 인자로 생성 c = Counter('gallahad') # dict 인자로 생성 c = Counter({'red': 4, 'blue': 2}) # keyword argument로 생성 c = Counter(cats=4, dogs=8) # result Counter() Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1}) Coun.. 2020. 12. 17.
[알고리즘] 크루스칼 알고리즘 정의 Spanning Tree, 최소 비용 신장 트리를 O(ElogV)O(ElogV)만에 구하는 알고리즘이다. 신장 트리의 조건 본래의 그래프의 모든 노드를 포함해야함 모든 노드가 서로 연결 트리의 속성 만족 (사이클 존재하지 않음) 코드 parent = {} rank = {} def find(node): if parent[node] != node: parent[node] = find(parent[node]) return parent[node] def union(node_v, node_u): root1 = find(node_v) root2 = find(node_u) if rank[root1] > rank[root2]: parent[root2] = root1 else: parent[root1] = root.. 2020. 11. 18.
[알고리즘] 그리디 (탐욕법) 알고리즘 정의 그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자" 라는 모토를 가지는 알고리즘 설계 기법이다. 단, 그리디 알고리즘을 사용하면 매 선택이 그 순간에 대해서는 최적이지만 그걸 종합적으로 봤을 땐 최적이라는 보장은 절대 없다는 것을 명심해야 한다. 사용되는 예시 AI에 있어서 결정 트리 학습법(Decision Tree Learning) 활동 선택 문제(Activity selection problem) 거스름돈 문제 최소 신장 트리 (Minimum spanning tree) 제약조건이 많은 대부분의 문제 다익스트라 알고리즘 허프만 코드 크러스컬 알고리즘 2020. 11. 15.
[알고리즘] 다이나믹 프로그래밍 정의 중복되는 연산을 줄이기 위하여 메모리 공간을 최대한 활용하여 연산 속도를 증가시키는 방법이다. 다이나믹 프로그래밍(dynamic programming)이라 표기하고 한국어 표기로는 "동적 계획법" 이라고 한다. 방식 탑다운 방식 (메모이제이션 활용) 보텀업 방식 구현 예시로 피보나치 수열이 있다 탑다운 방식 def fibo(x): if x == 1 or x == 2: return 1 if d[x] != 0: return d[x] d[x] = fibo(x - 1) + fibo(x - 2) return d[x] d = [0] * 100 answer = fibo(99) print('answer: {}'.format(answer)) # answer: 218922995834555169026 보텀업 방식 de.. 2020. 11. 8.
[알고리즘] BFS 알고리즘 정의 루트 노드에서 시작해서 가장 가까운 노드부터 찾는 알고리즘 BFS (Breadth First Search) 약자로 한국어 표기로는 "넓이 우선 탐색" 또는 "너비 우선 탐색" 이라고 한다. 코드 구현 from collection import deque def bfs(index, graph, visited): queue = deque([index]) while queue: v = queue.popleft() visited[v] = True for i in range(len(graph)): if visited[i] == False: queue.append(i) return visited DFS vs BFS 그림으로 보면 차이점이 명확해질 것이다. 2020. 11. 6.
[알고리즘] DFS 알고리즘 정의 루트 노드에서 시작해서 다음 분기를 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법 DFS (Depth First Search) 약자로 한국어 표기로는 "깊이 우선 탐색" 이라고 한다. 장단점 장점 단지 현 경로상의 노드들만을 기억하면 되므로 저장 공간의 수요가 비교적 적다. 목표 노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있다. 단점 해가 없는 경로에 깊이 빠질 가능성이 있다. 얻어진 해가 최단 경로가 된다는 보장이 없다 코드 구현 def dfs(index, graph, visited): stack = [index] while stack: v = stack.pop() visited[v] = True for i in range(len(graph)): if visited[i] == False.. 2020. 10. 17.
[알고리즘] 이진탐색 정의 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘 코드 구현 def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 if array[mid] == target: return mid if array[mid] > target: end = mid - 1 else: start = mid + 1 return binary_search(array, target, start, end) target = 3 array = [5, 4, 2, 1, 3] result = binary_search(array, target, 0, len(array)) if result == None: pri.. 2020. 10. 12.
shift 키를 눌렀을때 정사이즈로 scaling 구현방법 shift 키를 눌렀을 경우 객체를 정사이즈로 스케일링하고 shift 키를 누르지 않았을 경우는 반대로 드래그한 비율대로 리사이즈를 하고싶다. 원인 fabricJS에서는 객체 스케일링시 기본 옵션이 정사이즈 비율로 리사이즈되고 shift 키를 눌렀을때 드래그한 비율대로 리사이즈를 한다. 대응 fabricJS에서 이벤트를 제어할 수 있는 확장 함수로 존재하나 이 확장 함수를 활용하여 조건문을 변경하면서 대응하기는 힘들다. fabricJS에서 사용하고 있는 스케일링 조건 함수를 덮어씌우는 방법이다. 데모 페이지 : http://jsfiddle.net/yscho03/egzcopf4 var canvas = new fabric.Canvas('c', { uniScaleTransform: true }); v.. 2020. 6. 4.
Git 설치 방법 1. 설치 [root@server ~]# yum install git -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink | 8.4 kB 00:00:00 * base: data.aonenetworks.kr * epel: mirror2.totbb.net * extras: data.aonenetworks.kr * updates: data.aonenetworks.kr base | 3.6 kB 00:00:00 bintray--sbt-rpm | 1.3 kB 00:00:00 epel | 5.3 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:.. 2020. 3. 9.
sbt 설치 [root@server ~]#curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo [root@server ~]#yum install sbt -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink | 7.4 kB 00:00:00 * base: data.aonenetworks.kr * epel: mirror2.totbb.net * extras: data.aonenetworks.kr * updates: data.aonenetworks.kr base | 3.6 kB 00:00:00 bintray-.. 2020. 3. 9.
lein 설치 1. 임시 디렉토리 생성 설치 파일을 다운 받을 임시 디렉토리 (temp_src) 를 생성하고 이동한다. [root@server ~]# mkdir /home/temp_src [root@server ~]# cd /home/temp_src 2. 설치 파일 다운로드 [root@server temp_src]# wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein --2020-03-05 08:27:48-- https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein Resolving raw.githubusercontent.com (raw.githubusercont.. 2020. 3. 9.
kafka manager 설치 설치 1. 임시 디렉토리 생성 설치 파일을 다운 받을 임시 디렉토리 (airnd_src) 를 생성하고 이동한다. [root@server ~]# mkdir /home/temp_src [root@server ~]# cd /home/temp_src 2. 설치 파일 다운로드 [root@server temp_src]# wget https://github.com/yahoo/CMAK/archive/1.3.3.18.tar.gz --2020-03-04 12:35:00-- https://github.com/yahoo/CMAK/archive/1.3.3.18.tar.gz Resolving github.com (github.com)... 52.78.231.108 Connecting to github.com (github.com.. 2020. 3. 9.
zookeeper 설치 설치 1. zookeeper 유저 생성 [root@server ~]# useradd -r -s /sbin/nologin -d /home/apps/zookeeper zookeeper 2. 임시 디렉토리 생성 설치 파일을 다운 받을 임시 디렉토리 (temp_src) 를 생성하고 이동한다. [root@server ~]# mkdir /home/temp_src [root@server ~]# cd /home/temp_src 3. 설치 파일 다운로드 [root@server temp_src]# wget http://apache.tt.co.kr/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz --2020-03-04 08:06:21-- http://apache.t.. 2020. 3. 9.
openJDK 설치 1. 설치 가능 확인 [root@server ~]# yum list java*jdk-devel Loaded plugins: fastestmirror Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast Loading mirror speeds from cached hostfile * base: data.aonenetworks.kr * epel: mirror2.totbb.net * extras: data.aonenetworks.kr * updates: data.aonenetworks.kr Available Packages java-1.6.0-openjdk-devel. x86_64 1:1.6.0.41- 1.13.13.1.el7_3.. 2020. 3. 9.
IE 11 base64 DATA URL 우회 방법 환경 ㆍ브라우저 : IE 11 ㆍ프론트엔드 : vueJS 3.x ㆍ서버 : Python Django 요약 IE 11에서 이미지 태그에 base64 DATA URL이 지원이 되질 않는다. 원인 브라우저 base64 DATA URL 미지원 대응 서버로 base64 DATA URL를 보내 출력하는(우회하는) 방법밖에 없다. - 프론트 소스 (HTML) - 프론트 소스 (JS) function getImageUrl(dataUrl){ var apiUrl = '/api/image/base64/decode'; var dataUrl.split(';'); var dataUrlArr = dataUrl.split(';'); return apiUrl + '?data_url=' + dataUrlArr[1]; } - 백엔드 소스.. 2019. 3. 8.
vue-select에서 multiple 옵션 설정 후 다중 선택시 오류 환경 ㆍvueJS 3.x ㆍvue-select 요약 vue-select에서 multiple 옵션 설정 후 다중 선택시 중복체크가 되지 않는다. 원인 빈 오브젝트 체크 오류 대응 원본 파일은 건드리지않고 컴포넌트를 extend 하여 isOptionSelected 메소드를 수정하여 준다. /** v-select custom */ Vue.component('temp-select', vSelect); const Base = Vue.options.components["temp-select"]; const CustomSelect = Base.extend({ methods: { isOptionSelected(option) { return this.valueAsArray.some(value => { if (typeof.. 2019. 2. 14.
vueJS - router 설정시 Uncaught SyntaxError: Unexpected token < 오류 환경 ㆍvueJS 3.x 요약 vueJS에서 router의 depth를 세분화하였을 경우 (/depth1/depth2) 동작을 하지 않는다. Uncaught SyntaxError: Unexpected token 2019. 2. 13.
Tensorflow Object Detection 흐름도 Tensorflow Object Detection 흐름도 ※ 무단으로 퍼가지 마시고 출처를 남겨주세요. 2019. 2. 3.
Django-DSL 동적 INDEX 생성 환경 Python 3.6 Django 2.1.1 ElasticSearch 3.6.x 요약 Django와 ElasticSearch을 연동해서 사용 중이다. 이번달은 LOG_201901, 다음달은 LOG_201902 ...으로 동적으로 INDEX (RDB 용어로는 테이블)을 생성하여 사용하고 싶다. ORM(Model)의 Meta 정보에 넣었으나 코드를 넣었으나 INDEX가 날짜별로 자동 생성되지 않고 처음 생성된 INDEX(예) LOG_201901) 에만 계속 쌓이는 문제가 있었다. 실행한 model 소스는 아래와 같다. 무엇이 문제일까? from elasticsearch_dsl import DocType, Text, Integer, Date import datetime class Statistics(Doc.. 2019. 2. 3.
이미지가 겹쳐있을 경우 처리 환경 fabricJS 2.4.0 요약 fabricJS에서 canvas를 생성시 preserveObjectStacking : true 옵션을 설정하면 이미지가 겹쳐있을 경우도 우선순위에 따라 우선순위 맨 위쪽의 이미지 레이어만 클릭이 된다. 우선순위에 관계없이 눈에 보이는 이미지를 바로 선택을 하게 하려면 이벤트를 걸어서 타겟을 바꿔줘야 한다. 대응 // 1. 캔버스 생성 var canvas = new fabric.Canvas(canvasRef, { width: 500, height: 500, preserveObjectStacking : true }); // 2. 마우스 클릭 이벤트 핸들러 설정 canvas.on('mouse:down:before', swapVisibleObject); // 3. swapV.. 2018. 12. 31.
728x90
반응형