여태까지 CNN으로 물체가 있다, 없다 정도만 알았다면 이번에 해볼 것은 어디 위치에 물체가 있는지 알려주는 segmentation이다.
classification은 전체 input에 대해 오직 한개의 결과만 나오고, 한가지 class만 찾을 수 있다.
segmentation은 픽셀 단위로 그 위치에 무엇이 있는지 알려준다. 그러므로 학습시킬 때 정답도 픽셀단위로 무엇이다 라벨링해야해서 손이 많이 간다.
여기선 DENSE layer를 사용하지 않고, convolution을 통한 down sampling, up sampling을 사용한다. 그리고 결과는 클래스 개수 만큼 채널이 나오고 원 핫 인코딩 된다.
이렇게 진행하면 어디에 무엇이 있는지 위치정보가 손실되게 된다. 그 위치 정보를 주기 위해 연결을 한다.
이렇게 하면 위치정보는 제대로 전달되지만 latent space의 정보력은 약해지게 된다.
여기서 사용한 방식이 skip connection이다.
skip connection은 down sampling 후 upsampling 하면서 소실된 위치정보를 가지고 올 수 있다. 그리하여 gradient 손실 또한 막을 수 있고, 더 빠른 학습 효과를 가지고 올 수 있다.
여기선 FCNs가 나오는데 이전의 FCN = Fully conection networks 가 아니라 FCNs = Fully convolutional networks이다.
down sampling 과정에선 의미, 맥락적인 정보를 찾아 이것이 무엇인지 파악하는데 도움을 준다.
up sampling 과정에선 공간적 정보를 복구(skip connection)하고, 네트워크 이미지의 어디(where)에 대한 정보를 파악할 수 있다.
이에 대한 파이썬 코드는 아래와 같다.
여기서 fcn으로 표현하는 것에 대해 이전의 FCN과 혼동하면 안된다. 여기 fcn은 convolution을 뜻한다.
이렇게 하여 분류할 수 있게 된다.
object detection
여기서 부턴 segmentation과 다르게 물체를 박스와 같은 형식으로 잡게 된다. 자율주행과 같이 물체를 탐지하는 알고리즘에서 신호등, 꼬깔, 자동차 등 물체들이 박스쳐진 것을 볼 수 있다. 그러한 알고리즘이다.
object detection은 기본적인 classfication의 구조에서 박스를 치는 네트워크가 추가된 것이라고 보면 편하다.
x = 사진 상에서 박스 중앙의 x위치
y = 사진 상에서 박스 중앙의 y위치
h = 박스의 높이
w= 박스의 너비
input은 똑같이 사진이고 label은 박스의 w,y,w,h와 class를 주면 된다.
object detection의 코드는 아래와 같다.
이제 여기서 loss_weights의 값은 고민해봐야 된다. mse는 제곱을 했기 때문에 숫자가 엄청 커지는 반면 crossentropy는 숫자가 작아서 한쪽만 학습이 크게 들어가는 경우가 생긴다. 여기서부터 여러 시도를 통한 경험으로 선정해야 한다.
마지막 이 학습을 통한 결과이다.
2023.12.15 - [소프트웨어] - 생성형 인공지능 GAN 개념 - autoencoder의 업그레이드 버전
'인공지능 > 공부' 카테고리의 다른 글
시계열 데이터(주가, imu data) 예측 인공지능 - RNN, LSTM (49) | 2023.12.15 |
---|---|
생성형 인공지능 GAN 개념 - autoencoder의 업그레이드 버전 (45) | 2023.12.15 |
생성형 인공지능 Autoencoder - 개념 (43) | 2023.12.14 |
CAM 실습 - MNIST, TensorFlow (0) | 2023.12.14 |
설명 가능한 인공지능 CAM - 개념 (0) | 2023.12.14 |