7주자 시각지능 딥러닝 (3)

정지원·2024년 4월 3일
0

에이블 스쿨 복습

목록 보기
31/51
post-thumbnail

Transfer Learning

CNN 모델을 우리는 다른 사람이 만든 것을 가져올 수 있음

이미지 데이터를 분류할 수 있는 모듈

  • 모듈

1. ConvNeXt

  • CNN의 변형으로 다양한 크기의 컨볼루션 필터를 사용하여 특징을 추출함

  • 여러 크기의 필터를 결합함으로써 다양한 크기의 특징을 학습할 수 있음

  • 각 필터 크기마다 다른 스케일의 정보를 캡처하여 입력 이미지에서 다양한 특징을 효과적으로 추출할 수 있다.

ex)

  • 이미지 분류, 객체감지, 세그멘테이션 등 컴퓨터 비전작업에 사용
  • 제조업에서 제품불량검출, 의료 영상분석, 자율주행자동차에서의 환경인식 등에 활용 가능함

2. DenseNet

  • 밀집 연결을 사용하여 네트워크를 구성하고 각 레이어가 이전 레이어의 출력을 입력으로 받는 구조를 가지고 있음

  • 이는 그래디언트의 흐름을 촉진하고, 더 적은 파라미터를 가지며 효율적인 특징 추출이 가능하다.

  • 이 구조는 특징 재사용을 최대화하고 그라디언트 소실문제를 완화하여 깊은 네트워크에서도 효과적인 학습을 가능하게 한다.

ex)

  • 의료 영상 분석, 자연어 처리, 음성 인식 등에서 사용
  • 의료 분야에서 종양 탐지, 질병 진단, 이미지 분류 에 적용

3. EfficientNet

  • 네트워크의 깊이, 너비, 해상도를 동시에 조절하여 모델의 효율성을 높임

  • 모델의 크기와 복잡성을 조절할 수 있어서 다양한 환경에서 사용할 수 있음

  • Compound Scaling이라는 방법으로 각 해상도 단계에 맞게 네트워크의 너비와 깊이를 자동으로 최적으로 구조를 찾는다.

ex)

  • 모바일앱, 온라인 서비스, 스마트 기기 등에서 사용되는 경량화된 딥러닝 모델로 사용됨.
  • 모바일 환경에서의 이미지 분류, 객체감지, 얼굴 인식 등에 적용됨

4. EfficientNetV2

  • EfficientNet보다 성능을 향상시킨 버전

  • 더 효율적인 네트워크 구조와 효과적인 스케일 업 방법 제공하여 성능을 개선한다.

ex)

리소스 제한된 환경에서의 응용프로그램에 유용함

5. InceptionResNetV2

  • Inception모듈과 ResNet의 결합한 아키텍처로 네트워크의 깊이와 특징 추출능력을 향상 시킴

  • 고해상도 이미지나 복잡한 데이터셋에서 좋은 성능을 발휘함

ex)

  • 대규모 이미지 데이터셋에서 이미지 분류, 객체 감지, 세그멘테이션 등에 사용됨
  • 소셜미디어 플랫폼에서 이미지 인식 및 분류
  • 보안 시스템에서의 이상 징후 감지

6. InceptionV3

  • 다양한 크기의 컨볼루션 필터를 병렬로 사용하여 특징을 추출하는 Inception모듈 사용

  • 모듈의 파라미터 수를 줄이면서 효율적인 특징 추출을 가능하게 함

  • 입력 이미지의 다양한 특징을 캡처하여 복잡한 이미지 분류 및 객체 감지 작업에 사용된다.

ex)

  • 비지니스 분야에서 이미지 분류, 객체감지, 이미지 검색 등에 사용됨
  • 전자상거래 플랫폼에서 제품인식 및 추천
  • 의료 영상 분석
  • 자율 주행 자동차의 환경 인식

7. MobileNet

  • 모바일 기기에서 경량화된 딥러닝 모델을 구축하기위해 개발 되었음

  • 작은 모델 크기와 높은 효율성을 통해 모바일 환경에서도 빠르고 효율적인 추론 가능하다.

ex)

  • 모바일 앱
  • 카메라 응용 프로그램
  • 음성 및 이미지 처리 알고리즘의 분야

8. NASNet

  • NAS기법을 사용하여 최적의 네트워크 구조를 자동으로 찾음

  • 이러한 방식으로 개발된 네트워크는 다양한 작업에서 우수한 성능을 보인다.

ex)

  • 이미지 분류, 객체 감지, 음성 인식, 자연어 처리 등 다양한 분야에서 우수한 성능

9. ResNet

  • 잔여 연결을 사용하여 네트워크를 깊게 쌓을 수 있도록 하고, 그래디언트 소실문제를 완화한다.

  • 깊은 네트워크에서도 효율적인 학습이 가능, 다양한 크기의 데이터셋에서 잘 작동한다.

ex)

  • 이미지분류, 객체감지, 세그멘테이션 등의 컴퓨터 비전 작업에 사용

10. VGG

  • 간단하고 규칙적인 구조를 가지고 있어서 이해하기 쉽고 구현하기 간편함

  • 작은 필터 크기와 많은 수의 컨볼루션 레이어로 구성되어 있어서 깊은 특징을 추출할 수 있다.

ex)

  • 이미지 분류, 객체 감지, 특징 추출 등의 작업에 사용

11. Xception

  • 깊은 네트워크를 구성하는 동안 파라미터 수를 줄이고 효율적인 특징 추출하는 모델

  • 네트워크의 깊이를 높일수록 파라미터 수가 급격하게 증가하는 문제를 해결하기 위해 개발되었음

ex)

  • 이미지분류, 객체감지, 세그멘테이션 등의 컴퓨터 비전 작업에 사용

사용 예시

VGG16

  • VGG 모듈의 vgg16 아키텍처 사용
tf.keras.applications.VGG16(
    include_top=True,		# 네트워크 상단에 3개의 완전 연결 레이어를 포함할지 여부
    weights='imagenet',		# None 초기화 / imagenet 사전훈련
    input_tensor=None,		
    input_shape=None,
    pooling=None,			# None 모델의 출력이 마지막 컨벌루션 블록의 4D 텐서 출력이 됨
    						# avg 전역 평균 풀링이 마지막 합성곱 블록의 출력에 적용되므로 모델의 출력이 2D 텐서가 됨
                            # max 전역 최대 풀링이 적용됨
    classes=1000,			# 이미지를 분류할 선택적 클래스 수
    classifier_activation='softmax'	# "최상위" 레이어에서 사용할 활성화 함수
)
  • 사용
# 불러오기
from keras.applications.vgg16 import VGG16

# 모델선언
vgg_model = VGG16(include_top=True,
				  weights='imagenet',
                  input_shape=(224,224,3)
                  )

# 요약
vgg_model.summary()

InceptionV3

tf.keras.applications.InceptionV3(
    include_top=True,		# 연결 레이어를 네트워크의 마지막 레이어로 포함할지 여부
    weights='imagenet',		# None 초기화 / imagenet 사전훈련
    input_tensor=None,
    input_shape=None,
    pooling=None,			# None 모델의 출력이 마지막 컨벌루션 블록의 4D 텐서 출력이 됨
    						# avg 전역 평균 풀링이 마지막 합성곱 블록의 출력에 적용되므로 모델의 출력이 2D 텐서가 됨
                            # max 전역 최대 풀링이 적용됨
    classes=1000,			# 이미지를 분류할 선택적 클래스 수
    classifier_activation='softmax'	# "최상위" 레이어에서 사용할 활성화 함수
)
  • 사용
keras.backend.clear_session()

base_model = InceptionV3(weights='imagenet',       # ImageNet 데이터를 기반으로 미리 학습된 가중치 불러오기
                         include_top=False,        # InceptionV3 모델의 아웃풋 레이어는 제외하고 불러오기
                         input_shape= (299,299,3)) # 입력 데이터의 형태

new_output = GlobalAveragePooling2D()(base_model.output)
new_output = Dense(3, 							   # class 3개   클래스 개수만큼 진행한다.
                  activation = 'softmax')(new_output)

model = keras.models.Model(base_model.inputs, new_output)

model.summary()

ResNet50

  • ResNet 모듈의 ResNet50 아키텍처 사용함
tf.keras.applications.ResNet50(
    include_top=True,		# 연결 레이어를 네트워크의 마지막 레이어로 포함할지 여부
    weights='imagenet',		# None 초기화 / imagenet 사전훈련
    input_tensor=None,
    input_shape=None,
    pooling=None,			# None 모델의 출력이 마지막 컨벌루션 블록의 4D 텐서 출력이 됨
    						# avg 전역 평균 풀링이 마지막 합성곱 블록의 출력에 적용되므로 모델의 출력이 2D 텐서가 됨
                            # max 전역 최대 풀링이 적용됨
    classes=1000,			# 이미지를 분류할 선택적 클래스 수
    classifier_activation='softmax'	# "최상위" 레이어에서 사용할 활성화 함수
)
  • 사용 예시
from keras.applications.resnet50 import ResNet50

keras.backend.clear_session()

base_model = ResNet50(include_top=False,           # 아웃풋 레이어를 포함할 것인지?
                      weights='imagenet',         # 사전학습 모델의 가중치를 어떤 데이터 기반으로 할 것인가
                      input_shape= (32, 32, 3),   # 인풋 데이터의 모양
                      pooling='avg'               # Global Average Pooling 2D
                      )

outpyt_layer = keras.layers.Dense(10, activation = 'softmax')(base_model.output)

new_model = keras.models.Model(base_model.inputs, outpyt_layer)

new_model.summary()

참고 링크

각각의 아키텍쳐 및 파라미터에 대한 자세한 설명이 있음
https://www.tensorflow.org/api_docs/python/tf/keras/applications

profile
뒤늦게 프로그래밍을 시작한 응애

0개의 댓글