Composite Pattern컴포지트 패턴(Composite Pattern)은 객체를 트리 구조로 구성하여 부분-전체 계층을 구현하는 패턴입니다.이를 통해 클라이언트가 단일 객체와 복합 객체를 동일하게 처리할 수 있습니다.컴포지트 패턴은 구조 패턴(Structural Pattern)의 일종으로, 객체를 그룹으로 묶어 하나의 객체처럼 다룰 수 있게 합니다.컴퓨터의 파일 시스템에서는 Directory 라는 것이 있고, Directory안에는 파일이나 다른 하위 Directory가 있기도 합니다.마치 “상자 안의 상자” 같은 구조, 즉 재귀적 구조를 가집니다.Directory 엔트리를 차례대로 조사할 때, 그릇과 내용물을 같은 종류로 취급하면 편리할 수 있습니다.이 그릇을 내용물과 동일시 하여 재귀적인 구조..
Read moreFlyweight Pattern플라이웨이트 패턴(Flyweight Pattern)은 메모리 사용을 줄이기 위해 많은 수의 작은 객체를 공유하는 디자인 패턴입니다. 이 패턴은 객체의 상태를 내적 상태와 외적 상태로 나누어, 내적 상태를 공유하여 메모리 사용을 최적화합니다.Flyweight Pattern → 동일한 것을 공유해서 낭비를 없앤다는 특징이 있습니다.Flyweight는 플라이급 이라는 의미로, 권투에서 가장 체중이 가버운 체급을 의미합니다.Design Pattern에서는 Object를 가볍게 하기 위한 것의 의미에서 사용됩니다.Object는 컴퓨터 내부에서 가상적으로 존재하는 것이기 때문에 무겁다 또는 가볍다고 표현은 실제 무게가 아닌, “메모리의 사용량”을 의미하는 것입니다.객체를 만들 때 그 ..
Read moreBridge Pattern브리지 패턴(Bridge Pattern)은 소프트웨어 디자인 패턴 중 하나로, 구현부와 추상화된 인터페이스(기능) 를 분리하여 서로 독립적으로 변경할 수 있도록 하는 패턴입니다.이 패턴은 구조 패턴(Structural Pattern) 중 하나로, 시스템을 더 모듈화하고 유지보수성을 높이기 위해 사용됩니다.AbstractionHigh Level Layer어플리케이션의 Interface 혹은 UIImplementor어플리케이션에서 돌아가는 실제 구현 코드Abstraction만 볼 수 있고 실제 Implementor은 숨길 수 있는 구조입니다.외부에서 보여지는 것과 내부 Implementor를 분리하고자 할 떄 사용하기 좋습니다.Bridege Pattern: Example 1Class..
Read moreFacade Pattern퍼사드 패턴(Facade Pattern)은 복잡한 시스템이나 서브시스템의 인터페이스를 단순화하는 디자인 패턴입니다.이 패턴은 클라이언트가 시스템을 더 쉽게 사용할 수 있도록 시스템의 복잡성을 감추고, 단순한 인터페이스를 제공합니다.퍼사드 패턴은 객체지향 설계 원칙 중 하나인 "단일 책임 원칙"(Single Responsibility Principle)을 따르며, 시스템의 각 구성 요소를 보다 명확하게 분리합니다.Facade Pattern이란 건물의 앞면처럼 그 뒤쪽의 복잡함은 내부에 숨기고 단단한 인터페이스만 제공합니다.여러개의 서브시스템을 통합하여 고수준의 API를 제공한다는 특징이 있습니다.Client는 여러 라이브러리와 클래스를 필요로 하는 상태입니다.이런 경우, 여러 클래..
Read moreDecorator Pattern데코레이터 패턴(Decorator Pattern)은 객체의 기능을 동적으로 추가하고 확장할 수 있는 패턴입니다.이 패턴은 상속을 사용하지 않고도 객체에 새로운 행동을 추가할 수 있게 해줍니다.데코레이터 패턴은 여러 개의 데코레이터 객체를 조합하여 다양한 기능을 동적으로 조합할 수 있는 유연성을 제공합니다.Decorator Pattern은 Object(객체)를 꾸며주는 역할을 합니다.원하는 기능으로 감싸서 사용할 수 있게 만들어주는 패턴 입니다.class Animal: def speak(self): passclass Cat(Animal): def speak(self): print("Meow", end='')class Dog(Animal): ..
Read moreOpenCV DNN 패키지를 이용하여 SSD기반 Object Detection 수행 Tensorflow 에서 Pretrained 된 모델 파일을 OpenCV에서 로드하여 이미지와 영상에 대한 Object Detection을 수행해보겠습니다.입력 이미지로 사용될 이미지 보기import cv2import matplotlib.pyplot as plt%matplotlib inlineimg = cv2.imread('../../data/image/beatles01.jpg')img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)print('image shape:', img.shape)plt.figure(figsize=(12, 12))plt.imshow(img_rgb)Tensorflow에서..
Read moreOpenCV DNN 장단점OpenCV Deep Neural Network의 장단점에 데하여 알아보겠습니다.OpenCV 라이브러리는 Intel에 의하여 최초 개발 되었습니다. 장단점을 설명해보겠습니다.OpenCV DNN 장점딥러닝 개발 프레임 워크 없이 쉽게 Inference를 구현 가능 합니다.OpenCV에서 지원하는 다양한 Computer Vision 처리 및 API와 Deep learning을 쉽게 결합할 수 있다는 특징이 있습니다.OpenCV DNN 단점GPU 지원 기능이 약합니다.DNN 모듈은 과거에 NVIDIA GPU 지원이 되지 않았습니다. 2019년 10월에 Google에서 NVIDIA GPU 지원 발표했지만. 아직 환경 구성/설치가 어렵습니다. 점차 개선 작업이 진행중입니다.OpenCV는 ..
Read moreRNNLM (RNN을 사용한 Language (언어) 모델)이번에는 RNN을 사용하여 Language Model(언어 모델)을 구현해 보겠습니다.그 전에 먼저 사용되는 Neural Network(신경망)을 한번 보고 시작해보겠습니다.왼쪽은 RNNLM의 계층 구성이고, 오른쪽에는 이를 시간축으로 펼친 Neural Network(신경망)입니다.그림의 Embedding Layer(계층)은 단어 ID의 분산 표현 (단어 Vector)로 변환됩니다.그리고 그 분산 표현이 RNN Layer(RNN 계층)로 입력됩니다.RNN 계층은 Hidden State(은닉 상태)를 다음 Layer(층)으로 출력함과 동시에, 다음 시각의 RNN 계층(오른쪽)으로 출력됩니다.그리고 RNN 계층이 위로 출력한 Hidden State(..
Read moreFaster R-CNNFaster R-CNN은 R-CNN 계열의 Object Detection 모델 중에서 가장 진보된 모델 중 하나로, Object Detection 에서 매우 높은 정확도와 효율성을 제공합니다.또한 Region Proposal Network (RPN)를 도입하여 전체 시스템의 속도와 정확도를 크게 향상시켰습니다.Faster R-CNN은 RPN(Region Proposal Network) + Fast R-CNN이 합쳐진 모델입니다.기존 Selective Search가 수행하던 Object 위치에 Bounding Box를 그려서 추천합니다. (GPU 사용)또한 Region Proposal Network를 사용합니다. (Selective Search 역할)그리고 Network로만 구성이 되..
Read moreAdapter Pattern - 어댑터 패턴Adapter Pattern은 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중간에 어댑터를 두어 인터페이스를 변환해주는 역할을 합니다.하나의 Interface를 다른 Interface로 전환하는 역할 → 이러한 역할을 Adapter Pattern에 적용합니다.‘이미 제공되어 있는 것’과 ‘필요한 것’ 사이의 ‘차이’를 없애주는 디자인 패턴을 Adapter 패턴이라고 합니다.또한 Adapter 패턴은 Wrapper 패턴으로 불리기도 합니다.Wrapper는 ‘감싸는 것’이라는 의미가 있는데, 무언가를 포장해서 다른 용도로 사용할 수 있게 교환해주는 것이 wrapper이며, adapter라고 합니다.두가지의 종류가 있습니다.클래스에 의한 Adap..
Read more