CNN 모델을 우리는 다른 사람이 만든 것을 가져올 수 있음
이미지 데이터를 분류할 수 있는 모듈
ConvNeXtCNN의 변형으로 다양한 크기의 컨볼루션 필터를 사용하여 특징을 추출함
여러 크기의 필터를 결합함으로써 다양한 크기의 특징을 학습할 수 있음
각 필터 크기마다 다른 스케일의 정보를 캡처하여 입력 이미지에서 다양한 특징을 효과적으로 추출할 수 있다.
ex)
- 이미지 분류, 객체감지, 세그멘테이션 등 컴퓨터 비전작업에 사용
- 제조업에서 제품불량검출, 의료 영상분석, 자율주행자동차에서의 환경인식 등에 활용 가능함
DenseNet밀집 연결을 사용하여 네트워크를 구성하고 각 레이어가 이전 레이어의 출력을 입력으로 받는 구조를 가지고 있음
이는 그래디언트의 흐름을 촉진하고, 더 적은 파라미터를 가지며 효율적인 특징 추출이 가능하다.
이 구조는 특징 재사용을 최대화하고 그라디언트 소실문제를 완화하여 깊은 네트워크에서도 효과적인 학습을 가능하게 한다.
ex)
- 의료 영상 분석, 자연어 처리, 음성 인식 등에서 사용
- 의료 분야에서 종양 탐지, 질병 진단, 이미지 분류 에 적용
EfficientNet네트워크의 깊이, 너비, 해상도를 동시에 조절하여 모델의 효율성을 높임
모델의 크기와 복잡성을 조절할 수 있어서 다양한 환경에서 사용할 수 있음
Compound Scaling이라는 방법으로 각 해상도 단계에 맞게 네트워크의 너비와 깊이를 자동으로 최적으로 구조를 찾는다.
ex)
- 모바일앱, 온라인 서비스, 스마트 기기 등에서 사용되는 경량화된 딥러닝 모델로 사용됨.
- 모바일 환경에서의 이미지 분류, 객체감지, 얼굴 인식 등에 적용됨
EfficientNetV2EfficientNet보다 성능을 향상시킨 버전
더 효율적인 네트워크 구조와 효과적인 스케일 업 방법 제공하여 성능을 개선한다.
ex)
리소스 제한된 환경에서의 응용프로그램에 유용함
InceptionResNetV2Inception모듈과 ResNet의 결합한 아키텍처로 네트워크의 깊이와 특징 추출능력을 향상 시킴
고해상도 이미지나 복잡한 데이터셋에서 좋은 성능을 발휘함
ex)
- 대규모 이미지 데이터셋에서 이미지 분류, 객체 감지, 세그멘테이션 등에 사용됨
- 소셜미디어 플랫폼에서 이미지 인식 및 분류
- 보안 시스템에서의 이상 징후 감지
InceptionV3다양한 크기의 컨볼루션 필터를 병렬로 사용하여 특징을 추출하는 Inception모듈 사용
모듈의 파라미터 수를 줄이면서 효율적인 특징 추출을 가능하게 함
입력 이미지의 다양한 특징을 캡처하여 복잡한 이미지 분류 및 객체 감지 작업에 사용된다.
ex)
- 비지니스 분야에서 이미지 분류, 객체감지, 이미지 검색 등에 사용됨
- 전자상거래 플랫폼에서 제품인식 및 추천
- 의료 영상 분석
- 자율 주행 자동차의 환경 인식
MobileNet모바일 기기에서 경량화된 딥러닝 모델을 구축하기위해 개발 되었음
작은 모델 크기와 높은 효율성을 통해 모바일 환경에서도 빠르고 효율적인 추론 가능하다.
ex)
- 모바일 앱
- 카메라 응용 프로그램
- 음성 및 이미지 처리 알고리즘의 분야
NASNetNAS기법을 사용하여 최적의 네트워크 구조를 자동으로 찾음
이러한 방식으로 개발된 네트워크는 다양한 작업에서 우수한 성능을 보인다.
ex)
- 이미지 분류, 객체 감지, 음성 인식, 자연어 처리 등 다양한 분야에서 우수한 성능
ResNet잔여 연결을 사용하여 네트워크를 깊게 쌓을 수 있도록 하고, 그래디언트 소실문제를 완화한다.
깊은 네트워크에서도 효율적인 학습이 가능, 다양한 크기의 데이터셋에서 잘 작동한다.
ex)
- 이미지분류, 객체감지, 세그멘테이션 등의 컴퓨터 비전 작업에 사용
VGG간단하고 규칙적인 구조를 가지고 있어서 이해하기 쉽고 구현하기 간편함
작은 필터 크기와 많은 수의 컨볼루션 레이어로 구성되어 있어서 깊은 특징을 추출할 수 있다.
ex)
- 이미지 분류, 객체 감지, 특징 추출 등의 작업에 사용
Xception깊은 네트워크를 구성하는 동안 파라미터 수를 줄이고 효율적인 특징 추출하는 모델
네트워크의 깊이를 높일수록 파라미터 수가 급격하게 증가하는 문제를 해결하기 위해 개발되었음
ex)
- 이미지분류, 객체감지, 세그멘테이션 등의 컴퓨터 비전 작업에 사용
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()
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()
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