Tensorflow 2.0 이미지 분류: 설치, 데이터 로드, 모델 구축 및 교육
게시 됨: 2020-04-21이미지 분류는 패턴 인식의 범주입니다. 인접 픽셀 간의 관계에 따라 이미지를 분류합니다. 즉, 상황 정보를 사용하여 이미지를 구성하고 다양한 기술에서 널리 사용됩니다. 이것은 딥 러닝에서 두드러진 주제이며, 이에 대해 배우고 있다면 이 기사를 재미있게 읽을 수 있을 것입니다.
여기서는 TensorFlow 이미지 분류를 수행합니다. 우리는 모델을 만들고 훈련시킨 다음 선인장의 이미지를 분류하기 위해 정확도를 높일 것입니다. TensorFlow는 오픈 소스 기계 학습 플랫폼이자 Google의 제품입니다.
시작하자.
목차
텐서플로우 2.0 설치
먼저 Google Colab에 TensorFlow를 설치해야 합니다. pip를 통해 설치할 수 있습니다.
!pip 설치 tensorflow-gpu==2.0.0-alpha0
그런 다음 설치를 확인합니다.

텐서플로를 tf로 가져오기
인쇄(tf.__버전)
# 출력: 2.0.0-alpha0
원천
배우기: 초보자를 위한 가장 인기 있는 5가지 TensorFlow 프로젝트
데이터 로드
확인 후 tf.data.dataset을 사용하여 데이터를 로드할 수 있습니다. 이미지에 선인장이 포함되어 있는지 여부를 결정하는 분류기를 만들 것입니다. 선인장은 기둥 모양이어야 합니다. 이 용도로 선인장 항공 사진 데이터세트를 사용할 수 있습니다. 이제 레이블과 함께 파일 경로를 로드합니다.
train_csv = pd.read_csv('data/train.csv')
# 상대 경로와 함께 train/의 이미지 파일 이름 앞에 추가
파일 이름 = ['train/' + train_csv['id'].tolist()의 fname에 대한 fname]
레이블 = train_csv['has_cactus'].tolist()
train_filenames, val_filenames, train_labels, val_labels =
train_test_split(파일 이름,
라벨,
기차_크기=0.9,
random_state=42)
레이블과 파일 이름이 있으면 tf.data.Dataset 개체를 만들 준비가 됩니다.
train_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(train_filenames), tf.constant(train_labels))
)
val_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(val_filenames), tf.constant(val_labels))
)
원천
현재 데이터 세트에는 실제 이미지가 없습니다. 파일 이름만 있습니다. TensorFlow 이미지 인식을 수행할 수 있도록 필요한 이미지를 로드하고 처리하는 함수가 필요합니다.
IMAGE_SIZE = 96 # MobileNetV2에서 사용하기 위한 최소 이미지 크기
배치_크기 = 32
# 각 이미지를 불러와 전처리하는 기능
def _parse_fn(파일 이름, 레이블):
img = tf.io.read_file(img)
img = tf.image.decode_jpeg(img)
img = (tf.cast(img, tf.float32)/127.5) – 1
img = tf.image.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
img, 레이블 반환
# train 및 val 데이터 세트의 각 예제에 대해 _parse_fn 실행
# 또한 셔플 및 배치 생성
train_data = (train_data.map(_parse_fn)
.shuffle(buffer_size=10000)
.배치(BATCH_SIZE)
)
val_data = (val_data.map(_parse_fn)
.shuffle(buffer_size=10000)
.배치(BATCH_SIZE)
)
원천
모델 구축
이 TensorFlow 이미지 분류 예제에서는 전이 학습 모델을 생성합니다. 이러한 모델은 이전에 교육을 받은 기존 이미지 분류 모델을 사용할 수 있으므로 빠릅니다. 이 계층은 필요한 이미지의 클래스를 지정하므로 네트워크의 상위 계층만 다시 훈련하면 됩니다.
TensorFlow 2.0의 Keras API를 사용하여 이미지 분류 모델을 생성하겠습니다. 그리고 전이 학습을 위해 MobileNetV2를 속성 감지기로 사용할 것입니다. MobileNet의 두 번째 버전이며 Google의 제품입니다. Inception 및 ResNet과 같은 다른 모델보다 무게가 가볍고 모바일 장치에서 실행할 수 있습니다. ImageNet에 이 모델을 로드하고 가중치를 고정하고 분류 헤드를 추가하고 최상위 레이어 없이 실행합니다.
IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3)
# MobileNetV2로 사전 훈련된 모델
base_model = tf.keras.applications.MobileNetV2(

input_shape=IMG_SHAPE,
include_top=거짓,
weights='이미지넷'
)
# 사전 훈련된 모델 가중치 고정
base_model.trainable = 거짓
# 훈련 가능한 분류 헤드
maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()
예측 레이어 = tf.keras.layers.Dense(1, 활성화 = '시그모이드')
# 특징 검출기가 있는 레이어 분류 헤드
모델 = tf.keras.Sequential([
기본 모델,
maxpool_layer,
예측_계층
])
learning_rate = 0.0001
# 모델 컴파일
model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),
손실='binary_crossentropy',
측정항목=['정확도']
)
원천
tf.keras 모델을 훈련시키려면 TensorFlow 옵티마이저를 사용해야 합니다. tf.keras.optimizers 및 tf.train API의 옵티마이저는 TensorFlow 2.0의 tf.keras.optimizers에 함께 있습니다. TensorFlow 2.0에서 tf.keras의 많은 원래 최적화 프로그램이 더 나은 성능을 위해 업그레이드 및 교체되었습니다. 이를 통해 성능 저하 없이 최적화 프로그램을 적용할 수 있고 시간도 절약할 수 있습니다.
읽기: 초보자를 위한 TensorFlow 객체 감지 튜토리얼
세계 최고의 대학에서 데이터 과학 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
모델 훈련
모델을 만든 후에는 가르칠 수 있습니다. TensorFlow 2.0의 tf.keras API는 tf.data API를 지원하므로 이를 위해서는 tf.data.Dataset 객체를 사용해야 합니다. 훈련을 효율적으로 수행할 수 있으며 성능과 타협할 필요가 없습니다.
num_epochs = 30
steps_per_epoch = 라운드(num_train)//BATCH_SIZE
val_steps = 20
model.fit(train_data.repeat(),
epochs=num_epochs,
steps_per_epoch = steps_per_epoch,
validation_data=val_data.repeat(),
validation_steps=val_steps)
원천
30 에포크 후에 모델의 정확도가 크게 증가하지만 더 개선할 수 있습니다. 이전 학습 중에 가중치 고정에 대해 언급한 것을 기억하십니까? 이제 분류 헤드를 훈련했으므로 해당 레이어를 고정 해제하고 데이터 세트를 추가로 미세 조정할 수 있습니다.
# MobileNetV2의 모든 레이어 고정 해제
base_model.trainable = 참
# 미세 조정하려는 레이어까지 레이어를 다시 고정합니다.
base_model.layers[:100]의 레이어:
layer.trainable = 거짓
# 낮은 학습률 사용
lr_finetune = 학습 속도 / 10
# 모델 재컴파일
model.compile(loss='binary_crossentropy',
옵티마이저 = tf.keras.optimizers.Adam(lr=lr_finetune),
측정항목=['정확도'])
# 미세 조정을 위한 훈련 에포크 증가
fine_tune_epochs = 30
total_epochs = num_epochs + fine_tune_epochs
# 미세 조정 모델
# 참고: 우리가 epoch 30 이후에 훈련을 시작하도록 initial_epoch를 설정하십시오.
# 이전에 30 Epoch 동안 훈련되었습니다.
model.fit(train_data.repeat(),
steps_per_epoch = steps_per_epoch,
epochs=total_epochs,
initial_epoch = num_epochs,
validation_data=val_data.repeat(),
validation_steps=val_steps)

원천
30 Epoch 후에 모델의 정확도가 더욱 향상됩니다. 에포크가 많을수록 모델의 정확도가 더 많이 향상되었습니다. 이제 이미지에서 기둥 모양의 선인장을 높은 정확도로 인식할 수 있는 적절한 TensorFlow 이미지 인식 모델이 있습니다.
더 읽어보기: 초보자를 위한 Tensorflow 프로젝트 아이디어
TensorFlow 이미지 분류에 대해 자세히 알아보기
TensorFlow의 고기능 API와 그 기능은 모든 프로그래머가 사용할 수 있는 강력한 기술입니다. 또한 고급 API는 일반적인 복잡성을 제거하여 사용하기 쉽게 만듭니다.
TensorFlow, 이미지 분류 및 관련 주제에 대해 더 알고 싶으십니까? 그런 다음 작업 전문가를 위해 설계되었으며 450시간 이상의 엄격한 교육, 30개 이상의 사례 연구 및 과제, IIIT-B 동문 자격, 5개 이상의 실습을 제공하는 IIIT-B 및 upGrad의 기계 학습 및 AI PG 디플로마를 확인하는 것이 좋습니다 . 실무형 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.