본문 바로가기
KT에이블스쿨/에이쁠 기자단

[KT 에이쁠 기자단] 7주차 후기(9.11~9.15) - 시각지능 딥러닝, 3차미니프로젝트

by 롱싱싱 2023. 10. 3.

안녕하세요~~~

 

7주차가 되었습니다.

 

7주차에는 앞 주차에서 진행했던 시각지능 딥러닝에 이어 3차 미니프로젝트를 진행했습니다.

 

시각지능 딥러닝은 수요일까지 진행하고 그 이후 3차 미니프로젝트를 진행하는데요

미니 프로젝트를 하나하나 수행하니 점점 적응이 되가고 있는 것 같습니다!


시각지능 딥러닝

시각지능 딥러닝에서는 CNN을 통해

  1. 조각을 본다
  2. 각 조각이 조합된 패턴을 본다
  3. 점점 더 복잡한 조합의 패턴을 본다
  4. 반응하는 여러 패턴의 조합을 가지고 이미지를 인식한다.

의 단계로 이미지를 학습합니다.

 

앞에서 배운 것 처럼 Dense Layer만 사용하여 모델을 만들면 위치정보가 소실되는 문제가 있기 때문에

따라서 Convolutional Nerual Network를 통해 Feature map을 만들고 위치 정보를 보존하여 특징을 추출합니다.

 

Conv2D에는 filter, kernel_size등의 파라미터가 존재합니다.

  • filters: 새로운 feature를 제작하려는 filter의 수
  • kernel_size: filter의 가로세로 사이즈, 이전 데이터의 depth
  • strides: filter의 이동 보폭
  • padding: 이전 feature map 사이즈 유지, 외곽 정보 더 반영
  • activation: 활성화함수, 명시하는 거 잊지 말기
hl = Conv2D(filters = 128, #필터의 개수
            kernel_size= (3,3), #필터의 가로세로 사이즈
            strides = (1,1), # defualt 1,1 filter의 이동 보폭
            padding = 'same', #same이면 padding을 쓰겠다는 뜻. 외곽정보 반영
            activation='relu')(il) # 활성화함수 필수

중요한 특징을 추출해내기 위해 Maxpooling을 사용한다

hl =MaxPool2D(pool_size=(2,2), #pooling filter의 가로 세로 크기
              strides=(2,2) #기본적으로 pool_size따라감, Pooling filter의 이동 보폭
              )(hl)

filter를 통과한 후 이미지의 크기를 구하기 위해서는 공식을 사용한다.

(I(원래 이미지 크기) - F(필터 크기) + 2*P(패딩))/S(strides) + 1

 

기본적인 CNN에 대한 지식에 더해 나아가 Transfer Learning에 대해 알 수 있었습니다.

Transfer Learning을 하는 방법에는 사전학습된 모델을 사용하는 Pretrained Model과 Fine-Tuning을 수행하는 방법이 있습니다. fine-tuning전략에는

  1. 데이터 수집 많고 문제와 사전 학습 모델이 유사(모델의 뒷부분 위주로 재학습)
  2. 데이터 수집 많고, 문제와 사전 학습 모델이 상이 ( 모델 전체 재학습)
  3. 데이터 수집 적고, 문제와 사전 학습 모델이 유사 ( 모델의 뒷부분 중의 뒷부분만 재학습)
  4. 데이터 수집 적고, 문제와 사전 학습 모델이 상이 (모델의 뒷부분위주로 재학습)

이 있습니다.

 

Object Detection

Object Detection은 classification 과 Localization을 이용한 방법입니다.

  • Localization : 단 하나의 Object 위치를 Bounding Box로 지정하여 찾음
  • Object Detection : 여러 개의 Object들의 위치를 Bounding Box로 지정하여 찾음

 

Object를 표시할 때는 Bounding Box를 사용합니다.

bounding box는 하나의 Object가 포함된 최소 크기 박스로 Confidence Score와 IOU (Intersection over Union)를 통해 바운딩 박스를 표시합니다.

Confidence Score는 object가 Bounding Box안에 있는지 이에 대한 확신의 정도(0에서 1사이의 값)을 나타내고 IOU (Intersection over Union)는 두 박스의 중복 영역 크기를 통해 측정합니다.

 

평가는 mAP를 사용하는데 각 클래스 별 AP를 합산하여 평균을 낸 것입니다. AP는 Precision - Recall Curve 그래프 아래의 면적을 나타냅니다.

 

Yolov8

강의에서는 현재 가장 좋은 성능을 보이는 Yolov8모델을 사용하여 Object Detection을 수행해봤습니다.

Yolov8은 UltraLytics에서 개발한 모델로 pip설치 후 라이브러리 import만 하면 쉽게 사용할 수 있었습니다.

model = YOLO(model='yolov8n.yaml', task='detect')
model.train(data='data.yaml',

                    epochs=100,
                    patience=5,
                    save=True,
                    project='trained_scratch',
                    exist_ok=False,
                    pretrained=False,
                    optimizer='auto',
                    verbose=False,
                    seed=2023,
                    resume=False,
                    freeze=None
                    )

다양한 하이퍼파라미터를 조정하며 비교를 할 수 있었습니다.

 

데이터 셋은 Roboflow에 있는 데이터 셋을 사용했는데 roboflow에서는 정말 다양한 데이터 셋이 있었고 다른 팀원과 협업이 가능해서 앞으로도 유용하게 쓰일 것 같습니다.


3차 미니프로젝트

 

3차 미니 프로젝트에서는 yolov5를 이용하여 객체를 검출하는 프로젝트를 진행하였습니다.

강의시간에는 yolov8을 이용했었는데 프로젝트에서는 비교적 안정된 모델인 yolov5를 이용하였습니다.

주제는 화폐구분 서비스 개발을 하는 것으로, 데이터는 모두 제공되었습니다.

 

저희 조는 이를 위해

  • 데이터 수집 및 다양성 확보
  • 데이터 확장 (Data Augmentation)
  • 학습 성능 향상을 위한 데이터 전처리
등을 사용하여 모델의 성능을 향상시켰습니다.
 

전처리 과정에서 json형태의 파일에서 원하는 부분만 추출하여 yolo에 맞는 txt파일로 추출했고 train, test 데이터를 분리하여 학습을 진행했습니다. 그리고 yaml파일을 생성하여 데이터에 맞는 경로를 설정했습니다.

 

모델 학습 결과 한 개의 화폐 객체나 정면 사진에 대해서는 인식률이 높았습니다.

확인해보니 데이터 자체가 정면 사진이 많아서 약간의 회전만 있어도 인식이 잘 안되는 것을 확인할 수 있었습니다.

 

저희 조는 기본 데이터셋에 데이터 증강 (Data Augmentation)을 사용하여 회전 데이터에 대해서도 추가 학습을 진행하였습니다.

결과적으로 

  • 성능을 더 발전시켜 지폐를 발견하면 어떤 지폐인지 음성으로 들려주는 앱을 개발할 수 있다.
  • 위조 지폐를 구분하는 시스템을 개발할 수 있다.
  • 위에 제시한 서비스들은 회전, 음영이 적용된 화폐 데이터셋을 더 수집하거나 구축하여 모델에 학습을 시키면서 더 나은 서비스로 개발할 수 있을 것으로 보인다.

의 결론을 냈습니다.