KT 에이블스쿨 : 딥러닝 심화 2일차 - 딥러닝, 객체인식, 데이터 라벨링
딥러닝 심화
24.04.17 (수) - 2일차- 딥러닝 복습
- Kearas
- 1) Sequential 구조
- Input() : 옵션
- Dense() : 노드간 연결이 빽빽한 Fully connected 구조
- Flatten() : 2차원 형태를 1차원으로 쫘악 펼쳐줌
- 2) Functional 구조
- 이미지 문제를 푸는 2가지 방법
- 1) 2차원인 이미지를 flatten으로 펼처서 1차원적으로 예측
- RGB 컬러 이미지 → flatten하면 성능이 40% 미만으로 안좋음
- 2) convolutional neural network (CNN)
- 2차원 이미지를 1차원 flatten 하지않고, 이미지 구조(2차원)을 살린채로 문제를 품
- 성능이 더 좋음
- 케라스로 CNN 구현
- 1) Conv2D
- filters = 32 : 32개 특징 추출(피쳐맵)
특징한 윈도우 크기를 가진 피쳐맵이 움직이면서 특징을 추출함
- kernel_size = (3, 3) : 필터의 가로세로 사이즈
- strides = (1, 1) : 필터의 이동 보폭, 얼마나 크게 / 작게 움직일건지
- padding :
- 새롭게 만들어지는 피쳐맵은 작아지게 되어있는데, 계속 작아지면 곤란하니까 피쳐맵의 사이즈 유지
- 외곽에 중요한 정보가 있을수도 있으니가, 패딩으로 피쳐맵의 사이즈를 유지하고 외곽의 정보를 조금이라도 더 반영할려고 함
- 2) Maxpool2D
풀링기법이 많은데, 그중 maxpooling 기법을 쓴것
피쳐맵의 지역안에서 가장 큰 값만을 뽑아내고 나머지는 필요없겠구나를 의미
값이 클수록 큰 영향을 가진다는 것 = activation ‘relu’랑 잘 엮여서 사용되었음 (성능 좋아짐)
- Feature Representation
- 연결된 것으로부터 기존에 없던 feature를 재표현, 생성함
- CNN 에서 feature representation 이란 ?
- 위치 정보를 보존한 채로 feature를 represent한 것
- 잘학습된 CNN의 특징
- 유용한 특징을 추출
- 위치 정보를 보존
-
imageNet : 이미지 데이터셋 사이트
(imagenet이 원래는 이미지 딥러닝 성능을 다루는 대회였음)
⇒ 잘학습된 이미지 데이터셋을 끌어다 쓸수있때 좋은 효과를 얻을수있을거라 기대하게됨
-
object detection의 기본 구조 : backbone, head
-
Backbone : object detection 모델 앞단에 씌임 ⇒ 이미지의 특징, 패턴을 잘 추출할거라 예상함
backbone으로 object detection을 품
-
Head : 우리 문제에 맞게 레이어 추가 / 변형한 부분. 모델 뒷단에 씌임
- 모델 뒷단
- 2차원 적으로 cnn 이미지 예측하고, flatten 하면 아래와 같아짐
- 위치 정보가 없고, 분류기 역할에 치중된 부분
- Object Detection 정리
- Bounding Box
- 하나의 object가 포함된 최소 크기의 박스
- 구성요소 : (좌표) x, y, (크기) w, h ⇒ 위치정보
- predicted bounding box (모델이 예측한 바운딩박스)
- 실제의 object의 위치를 잘 맞춘다
- 실제 x, y랑 예측 x, y가 비슷할때 = 바운딩 박스의 좌표에 대한 예측이 좋다
- 실제 w, h랑 예측 w, h가 비슷할때 = 바운딩 박스의 크기에 대한 예측이 좋다
- class classification
- 어떤 클래스(객체) 인지 분별해야하니까
- label이 ‘cat’ 이라면 (1) 정수인코딩 / (2) 원핫인코딩
- 확률(softmax, argmax)로 범주 분류 ⇒ 어떤 클래스인지 확률로 표현함
- confidence score
- 바운딩 박스 안에 object가 있다면 분류 문제로 접근 가능
- object가 박스 안에 있을 확신의 정도
- 모델별 output activation, loss function
- 회귀
- output activaiton : 없음
- loss function : MSE
- 이중 분류
- output activaiton : 'sigmoid'
- loss function : binary crossentropy
- (보조) metrics = ['accuracy']
- 다중 분류
- output activaiton : 'softmax'
- loss function : (sparse) categorical crossentropy
- (보조) metrics = ['accuracy']
- (예측) argmax
- 라벨링
- roboflow의 건설현장 데이터셋 라벨링 살펴보기
- 이미지의 특정 각도만 라벨링이 많은 경우
- 겹치는 경우를 많이 라벨링해서 학습하면
⇒ 나중에 예측되었을때 앞 자동차가 포함되었을때만 차로 인지하는 문제가 있음
- 자동차 앞면, 뒷면의 라벨링만 많이하면 → 자동차 측면은 인식을 잘 못함
- 사람 상반신도 라벨링으로 person을 했더니, 예측결과에서 사람의 상반신만 많이 인식함.
- 해상도가 낮을때
- 해상도가 낮은 사진에서 잡아낸 바운딩 박스는 학습하는 과정에서 부터 영향을 줌 (학습 효과가 적음)
⇒ 라벨링 기준을 잘 줘야함. 정확한 것만 라벨링을 한다던가, 화질이 좋을때만 한다던가 등등
- 많고 좋은 데이터, 올바른 데이터로 라벨링하는게 중요
- 라벨링을 할때, 상자는 곧은 직사각형
- 각도를 조절해서 비스듬한 박스로 라벨링을 할수는 있지만, 각도정보까지 포함해야하기에 복잡해짐
- 이를 지원하는 툴도 있고, 아닌 툴도 있음
- 케라스로 이미지 인식 (다중분류)
- 1차원 형태로 flatten 해서 예측
- RGB 칼라 이미지의 경우, 최대 성능이 40%로 낮음
- 이미지 형태 그대로 예측하는 CNN
- 위치정보를 보존(CNN, 2차원)인 채로 인식하면 성능이 더 올라감
- 1차원으로 할 필요가 없음. CNN을 쓰면 됨
- Q) 필터의 수는 어떤 것을 고려해야 성능이 잘 나올까 ?
- A) 많이 시도해서 찾아야함. 유명한 데이터셋인 경우 인터넷 서칭해서 고수들이 찾는거 쓰기
댓글
댓글 쓰기