Carpe diem

NLP 관련 석사 과정 재학 중 (2022.03 ~ )

엔코아 7

좌충우돌 이상행동 탐지 CCTV 프로젝트

부제: C3D, 3D Convolution Layer를 이용한 이상행동 분류 6개월간의 교육 과정이 모두 끝이 났다. 마지막 2달 동안은 이상행동 탐지 CCTV 프로젝트를 진행했는데, 이에 대한 내용을 이번 포스팅에서 다뤄보려 한다. ※ 프로젝트 코드는 보유하고 있지 않습니다 (2023.12.16). 0. 개발 환경, 개발 배경 및 서비스 아키텍처 0) 개발 환경 aws region: ap-northeast-1 (Tokyo, Kinesis Video Stream 서비스를 이용하기 위함) ec2 instance: Deep Learning Base AMI (Ubuntu 18.04) Version 49.0, p2.xlarge Deep Learning Base AMI (Ubuntu 18.04) Version 4..

Projects 2022.02.13

[Data Structure] 최단 경로

1. 플로이드 와샬 알고리즘 0) 정의 -> 노드와 경로가 있을 때, 모든 노드를 최단 거리 (최소 비용)으로 연결하는 알고리즘 1) 작동 원리 -> 플로이드 와샬 알고리즘의 경우는 어떤 노드에서 시작해도 상관 x (모든 노드를 연결하는 것이 목적) · 가장 먼저 비용 배열과 방문 배열을 선언한다. · 0번 노드에서 시작 · 0번 노드에서 갈 수 있는 노드들: 1, 4, 5번 노드들 -> 비용 배열 갱신 · 방문하지 않은 노드들 중에서 최소값을 갖는 노드 (4번 노드)를 선택하여 시작 노드와 연결 · 새로 추가된 4번 노드에서 탐색 작업 실시 · 기존 값들과 비교하여 새로 연결될 경우의 필요 비용 계산, 최소값을 갖는 값으로 갱신 · 방문하지 않는 노드들 중 최소 비용을 갖는 1번 노드 방문, 4번 노드..

[Data Structure] 동적계획법

1. 동적계획법 0) 정의 -> 다이나믹 프로그래밍 (Dynami Programming, DP) 라고도 불리며, 하나의 큰 문제를 여러 개의 공통되는 작은 문제로 나누어서 작은 문제의 정답들을 결합하여 알고리즘을 푸는 과정 * 동적계획법을 풀어나감에 있어, 점화식의 공식을 찾아나가야 함 1) Bottom Up 방법 -> 작은 문제에서 큰 문제로 반복문 호출 def fib(n): fibList = [1, 1] for i in range(2, n + 1): fibList.append(fibList[i-2] + fibList[i-1]) return fibList[-1] 2) Top Down 방법 -> 큰 문제에서 작은 문제로 재귀 호출 def fib(n): if n == 0 or n == 1: return 1..

[Data Structure] 재귀함수

1. 재귀함수 0) 정의 -> 메소드 혹은 함수의 내부에서 자기자신의 메소드 혹은 함수를 다시 호출하는 함수 1) 구조 def solution(trump, loc): if 종료조건: pass return solution(trump, loc + 1) * 재귀함수 사용시에는 조건문을 활용하여 재귀함수 종료조건을 삽입해야 함 2) 사용 이유 -> 코드의 간결화 및 변수 사용 최소화 3) 재귀함수 깊이 * 재귀함수의 최대 깊이 기본값은 1,000이지만, 다음과 같이 옵션을 설정해주면 최대 깊이 제한을 변경 할 수 있다. import sys sys.setrecursionlimit(2500) 4) 활용 예시 Q. data = [3, 5, 8] 성분들의 합으로 표현할 수 있는 숫자의 경우의 수는 ? · 반복문을 활용..

[Data Structure] 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)

1. 깊이우선탐색 (DFS) 0) 정의 -> Depth First Search의 약자로, 하나의 경우의 수에 대해 모든 경우의 수를 조사하고 다음 경우의 수를 조사하며 해를 찾는 과정 1) 구조 2) 깊이우선탐색(DFS)과 스택 · 시작점: A, A부터 검사 · A가 정답이 아니므로, A 아래 가능한 경우의 수들을 모두 스택에 put · 스택에서 가장 위에 있는 B를 꺼내 (pop), B를 검사 · B가 정답이 아니므로, B 아래 가능한 경우의 수들을 모두 스택에 put ... · 이 과정을 반복하며 정답 데이터를 찾음 · 재귀를 통한 구현 graph = {1:[2, 3, 4]. 2:[5], 3:[5], 4: [], 5:[6, 7], 6:[], 7: [3]} def recursive_dfs(v, disc..

COVID-19 이전과 이후 국내 시·도별 수출 현황 분석

[개요] 코로나가 국내에서 처음 발생한 시점인 2020년 2월을 기준으로, 코로나 발생 전 (2019.08 ~ 2020.01)과 코로나 발생 후 (2020.02 ~ 2020.07)의 국내 시·도 별 수출입 실적을 분석하고, 시각화한다. 또한, 최종 결과물을 GUI 프로그램에 적용한다. [설계] 1. 수집 대상 데이터 1) 수출입 무역통계 사이트의 시도별 수출입 실적 데이터 (2019.08 ~ 2020.07) 2) 수출입 무역통계 사이트의 시도별 품목별 수출입 실적 데이터 (2019.08 ~ 2020.07) -> 시도별 수출입 실적 차이가 가장 많이 나는 지역 (울산광역시, 충청북도, 충첨남도 등)을 대상으로 조회 3) 대한민국 행정구역 (SHP) 시도 데이터 -> geojson 파일로 변환 SHP 지도 ..

Projects 2021.09.13

[Data Structure] 스택 / 큐

1. 스택 (Stack) 0) 정의 -> 영어로 '쌓다'라는 의미로, 프로그래밍에서 목록 or 리스트에서 접근이 한 쪽에서만 가능하다. 나중에 들어온 애가 먼저 나가는 LIFO (Last In First Out) 형태.. 1) 구조 2) 구현 · 직접 구현 class Stack(list): # push = list.append()와 동일 # pop = list의 내장함수로 이미 존재 def peek(self): # 가장 마지막에 있는 데이터를 보여줌 return self[-1] # Stack 사용하기 s = Stack() s.push(1) # s = [1] s.push(5) # s = [1, 5] s.push(10) # s = [1, 5, 10] print('popped value is: ',s.pop(..