- (1/6): 아나콘다 가상환경 만들기, 파이토치 설치, 주피터랩 설치, conda install 과 pip install 의 차이

- (2/6): 이미지 분석을 위한 데이터셋 준비 및 정리

- (3/6): 학습 및 예측

- (4/6): 코랩설명 + 깃허브/블로그 (뒷부분은 화면전환 오류로 설명이 부실함)

- (5/6): 코랩설명 + 깃허브/블로그

- (6/6): 우리강아지 이미지를 활용한 예측

from fastai.vision.all import *
  • fastai 깔기, error 뜬다면 런타임에서 GPU 변경
  • !pip install --ungrade fastai
path=untar_data(URLs.PETS)/'images'
# To download model **pretrained** weights:
files=get_image_files(path)
# 이미지파일들의 이름을 모두 복붙하여 리스트를 만든뒤에 files.txt로 저장하는 과정으로 비유할 수 있음
files[2]
# txt파일의 3번째 목록
Path('/home/cgb4/.fastai/data/oxford-iiit-pet/images/leonberger_5.jpg')
def label_func(f):
    if f[0].isupper():
        return 'cat' 
    else: 
        return 'dog' 
  • 만일 f[0]파일 제목의 첫 글자가 대문자면 고양이, 소문자면 강아지로 반환
  • 원래 있던 모델
label_func('asdf') # 소문자로 시작하니까 강아지로 리턴
'dog'
dls=ImageDataLoaders.from_name_func(path,files,label_func,item_tfms=Resize(224)) 

ImageDataLoaders.from_name_func(path, fnames, label_func, valid_pct=0.2, seed=None, item_tfms=None, batch_tfms=None, bs=64, val_bs=None, shuffle=True, device=None)

dls.show_batch(max_n=16) # 16개의 사진들을 보여줘라.

cnn_learner 사용 전 에러뜬다면 설치도 해주고~

!conda install -c conda-forge jupyterlab_widgets -y

!conda install -c conda-forge ipywidgets -y

!conda install -c conda-forge nodejs -y

learn=cnn_learner(dls,resnet34,metrics=error_rate)
  • 모형이 만들어진 것.
  • Resnet34 is a 34 layer convolutional neural network(모형 이름)
  • metrics=error_rate 평가지표로 삼겠다
  • cnn_learner(dls, arch, normalize=True, n_out=None, pretrained=True, config=None, loss_func=None, opt_func=Adam, lr=0.001, splitter=None, cbs=None, metrics=None, path=None, model_dir='models', wd=None, wd_bn_bias=False, train_bn=True, moms=(0.95, 0.85, 0.95), cut=None, n_in=3, init=kaimingnormal, custom_head=None, concat_pool=True, lin_ftrs=None, ps=0.5, first_bn=True, bn_final=False, lin_first=False, y_range=None)
learn.fine_tune(1)
epoch train_loss valid_loss error_rate time
0 0.154754 0.033434 0.006089 00:10
epoch train_loss valid_loss error_rate time
0 0.061337 0.014634 0.004736 00:11
  • r과 달리 python은 object(learn) 만들어서 기능 세분화 후 분석
  • 학습을 시키라는 뜻.
  • Learner.fine_tune(epochs, base_lr=0.002, freeze_epochs=1, lr_mult=100, pct_start=0.3, div=5.0, lr_max=None, div_final=100000.0, wd=None, moms=None, cbs=None, reset_opt=False)

- 예측

learn.predict(files[0]) # 파일중 첫 번째 사진 가져와라.
('dog', TensorBase(1), TensorBase([3.5456e-06, 1.0000e+00]))
  • output: ('dog', tensor(1), tensor([6.1421e-07, 1.0000e+00]))
  • 이 파일은 개이며, tensor(1) 우리가 강아지는 1로 저장해놓놨음 tensor(확신 확률, loss확률)
  • Learner.predict(item, rm_type_tfms=None, with_input=False)
learn.show_results()

- 오답분석

interp = Interpretation.from_learner(learn) # Interpretation
interp.plot_top_losses(16) # 잘 틀리는 거 16개 뽑아서 보여주기
# 한 개 나온 결과는 이상한데..!

1주차 4번째

PILImage.create('502104_3008_164.png') # 귀여워..
learn.predict(PILImage.create('502104_3008_164.png'))
# 고양이 tensor=0 으로 잘 예측한 모습!
('cat', TensorBase(0), TensorBase([1.0000e+00, 1.4151e-11]))
PILImage.create('p1065602463397191_754_thum.jpg') # 너 누가 귀여우래..
learn.predict(PILImage.create('p1065602463397191_754_thum.jpg'))
# 잘 맞춘다!
('dog', TensorBase(1), TensorBase([0.0017, 0.9983]))
PILImage.create('601f57a1260000bd0c275eca.jpeg') # 귀여운 경태
learn.predict(PILImage.create('601f57a1260000bd0c275eca.jpeg'))
('dog', TensorBase(1), TensorBase([2.4683e-04, 9.9975e-01]))