본문 바로가기

개발

(35)
spring boot - 데이터베이스 연결 백엔드에서는 데이터베이스에 있는 정보를 읽은 다음 적절한 정보들을 넘겨줍니다. 데이터베이스에 연결하는 법을 배워봅시다.우선 데이터베이스를 세팅합니다(https://codestudycafe.tistory.com/99). 저는 mysql과 workbench를 사용할 것입니다. 데이터베이스우선 데이터베이스를 설정합니다. id, name, password를 만들어 줍니다.PK는 primary key, NN은 not null, AI는 auto increase입니다. 오른쪽 아래 apply를 눌러 적용할 수 있습니다.spring boot resource 잍에 있는 application에 다음 정보를 넣습니다. ~~.yaml이 아니면 yaml으로 고쳐줍니다. 세팅한 값마다 다르니 각각이 어떤 의미인지 간단하게만 살펴..
spring boot - api 구조 보통 프런트엔드에서 백엔드에 api를 호출하고 정보를 받아온 다음 그 정보를 화면에 보여줍니다. 그럼 백엔드에서 api를 받고 정보를 넘겨줄 수 있어야 하는데요, 어떤 식으로 진행이 되는지 알아봅시다.controllercontroller는 유저가 유저가 정보를 요청할 때 어떤 경로로 요청해야 하는지, 어떤 식으로 요청해야 하는지가 담겨 있습니다.파일은 src - main - java - com - example - streak 위치에 계속 만들것입니다. 해당 파일에 package로 health, controller를 만들고 java class로 healthController를 만듭니다. 여기에 다음과 같이 만듭니다. @Slf4j부터 만들면 알아서 import 부분이 만들어 집니다. 어노테이션(@~~)을 ..
[논문 구현] Encoder-Decoder with Atrous SeparableConvolution for Semantic Image Segmentation(DeepLabV3Plus) deepLabV3Plus는 이전 논문들과 다르게 모델 구조가 살짝 복잡합니다. 그래서 모델을 구현하는 것에 중점을 맞출 것입니다. 이전에 사용한 논문을 다시 가져왔습니다. atros conv는 기존의 conv를 변형한 것입니다. tensorflow 에서는 DepthwiseConv2D에 dilation_rate 속성을 주어 구현할 수 있는데 귀찮으니 ResNet50을 그대로 가져다 쓰겠습니다.모델 구현우선 512,512,3 크기를 입력받는다고 하겠습니다. keras.applications에서 ResNet을 가져옵니다. weights는 초기 가중치, include_top은 마지막 dense 레이어를 포함하는지 여부, input_tensor은 입력 크기입니다. 저희 모델의 큰 그림은 아래와 같습니다.여기서 *..
spring boot - 시작 spring boot로 백엔드를 시작하기 위한 세팅입니다.spring initializrspring boot를 사용하기 위해 복잡한 세팅들이 있는데 이를 간단하게 해주는 사이트입니다(https://start.spring.io/). 여기서 언어, 버전, 의존성 등을 설정할 수 있습니다.몇 가지 유용한 의존성에 대해 알아보겠습니다.Lombok반복되는 부분을 아주 많이 줄여주는 annotation을 제공해 줍니다. 클래스를 만들 때 getter, setter를 통해 값을 읽고 씁니다. 그리고 toString을 통해 출력을 하고 생성자를 통해 객체를 생성합니다. 원래는 이 기능들을 구현해 주어야 하지만 Lombok 이 다 만들어 줍니다. 아니면 Data로 한 번에 만들 수도 있습니다. 그리고 @Slf4j 를 통..
[논문 리뷰] Encoder-Decoder with Atrous SeparableConvolution for Semantic Image Segmentation(DeepLabV3Plus) 일반적인 segmentation에 대해 잘 동작하는 논문입니다. U-net과 비슷한 계열이라고 할 수 있습니다. U-net 비교했을 때 무엇이 달라졌는지 알아보겠습니다.목표U-net은 의료 데이터에서 시작을 했고 해당 데이터 특성에 맞는 로스 function을 사용했습니다. 하지만 이 논문은 네트워크 구조를 향상하는 것에 목표를 두었습니다. 그러기 위해 독특한 convolution을 제안합니다. 일반적인 conv 연산은 이전 레이어의 피쳐가 10개, 필터의 너비와 높이가 3*3이라 하면 10*3*3 크기의 필터 하나가 하나의 피쳐 맵을 형성 합니다. 하지만 이거는 연산이 너무 많습니다. 그래서 아래 구조의 convolution을 제안합니다. (b)는 필터의 너비와 높이를 1*1로 만든 것으로 기존의 co..
[논문 구현] You Only Look Once:Unified, Real-Time Object Detection(YOLO v1) 구현 모델 구현모델 구현 자체는 상당히 쉽습니다.우선 Conv 부분을 먼저 만들어 줍니다.아래와 같이 만들어 줍니다. 그리고 밑에 Dense를 사용합니다. 이때, gpu 메모리가 터진다고 경고를 할 때가 있는데 껐다 켜면 해결이 됩니다. 최종적으로 7*7*(3+5*2)로 나옵니다. 3은 클래스의 수입니다.로스로스를 구현해 보겠습니다. 우선 오브젝트가 있는 것과 없는 것으로 나눕니다. 오브젝트가 있는 각각의 셀을 박스 예측과 클래스 예측으로 나눕니다. 한 피쳐 픽셀 당 2개의 바운딩 박스를 예측하므보 5*2 개를 뽑아냅니다. 오브젝트가 없는 것에 대해 confidence score를 계산합니다. 예측한 바운딩 박스와 타겟의 바운딩 박스의 IOU를 구한 다음 가장 많이 겹치는 박스를 구합니다. 셀 당 2개의 박스..
[논문 리뷰] You Only Look Once:Unified, Real-Time Object Detection(YOLO v1) ssd와 마찬가지로 물체가 어디 있고 어떤 문체인지 판단하는 네트워크입니다. 모델이 상당히 간단하고 앵커박스가 없는 것이 특징입니다.  모델 구조 처음 448*448 크기의 이미지로 시작합니다. 이 이미지를 Conv2D를 이용해 7&7*30으로 줄입니다. 마지막 라벨에서는 7*7*30이 됩니다. 7*7은 피쳐의 크기입니다. 클래스가 20개고 각 피쳐픽셀 당 2개의 바운딩 박스가 들어있습니다. 각 바운딩 박스는 5개의 값으로 이루어 지는데요, 중심 좌표(x,y)와 너비와 높이(w,h)와 컨피던스 스코어(c)로 이루어져 있습니다. 그래서 각 피쳐픽셀 당 20+(5*2)=30개로 이루어 집니다. 이전에는 바운딩 박스마다 클래스를 주었는데요, 이번에는 피쳐픽셀 당 라벨이 정해집니다.백그라운드이 전에는 각 바운딩..
[논문 구현] SSD: Single Shot MultiBox Detector 로스 구현 우선 이 전에 만든 AnchorBox 레이어는 제거해 주도록 하겠습니다. 로스를 계산할 때 필요할 줄 알았는데 로스를 계산할 때가 아니라 데이터 전처리 단계에서 진행하는 것이 훨씬 좋을 것 같네요. 각각의 anchorbox마다 양성인지 아닌지, 양성이면 어떤 객체인지 IOU를 기반으로 전부 작성해 주고 loss를 계산해 줍니다. 이제 로스를 구현해 보겠습니다.논문에서는 smoothL1 로스를 사용했습니다. 로스는 다음과 같이 생겼습니다. -0.5 ~ 0.5까지는 $\frac {x^2}{2}$, 나머지는 $\left\vert x \right\vert - 0.5$ 를 사용합니다. 모든 곳에서 미분 가능하게 하기 위해서인 것 같습니다.아래와 같이 계산합니다. tf.를 사용해 줘야 나중에 학습이 가능합니다. 그..
[논문 구현] SSD: Single Shot MultiBox Detector 모델 구현 이제 SSD를 구현해 보겠습니다. 저는 이미지를 받으면 트럼프 카드의 위치와 카드의 색(빨강, 검정)을 찾아주는 인공지능을 만들 것입니다.  논문에서는 vgg-16을 Conv5_3 레이어까지 가져왔습니다. 아래 그림에서 D에 해당하는 부분입니다. 이 부분 먼저 구현해 보겠습니다. 여기서 he_normal은 가중치를 초기화 해 주는 방법 중 하나입니다. kernel_regularizer은 커널의 가중치가 너무 커지는 것을 막기 위한 것입니다. 해당 모델의 summary를 출력해 봅니다. 이 뒤 부분도 진행해 줍니다. 다행히 논문과 같은 구조가 나왔습니다. 이제 각 클래스 별 confidence와 위치를 가져올 것입니다. 이 값들은 c4_3, c7, c8_2, c9_2, c10_2, c11_2에서 Conv2..
[논문 리뷰] SSD: Single Shot MultiBox Detector Faster R-CNN에서는 학습하는 데에 여러 단계가 필요했습니다. 이 과정을 한 단계로 줄인 것이 SSD입니다.모델이 상당히 간단한 녀석이기 때문에 실제로 구현한다고 생각하면서 구현에 필요한 정보 기준으로 말씀드리겠습니다.기본 개념R-CNN에서는 selective search, faster-rcnn에서는 resion proposal network와 anchor box를 통해 물체가 있을만한 곳을 살펴보았습니다. 근데 selective search는 뭔가 정확하지 않을 것 같고 anchor box는 크기가 너무 정해져 있어 큰 물체와 작은 물체가 함께 있으면 둘 다 인식하기 어렵습니다.SSD에서는 같은 크기의 anchor box(논문에선 default box로 표현하는데 편의를 위해 anchor box..