<jupyter_start><jupyter_text>実践その壱自分で用意したデータを使って画像分類モデルをトレーニングし、結果を評価する。 条件- 分類してみたい画像を最低3カテゴリー用意する。レッスン2で使用した「グリズリー」「ブラックベア」「テディベア」はNG。各カテゴリー50個以上データサンプルがあること。- fastaiのライブラリを使用すること ヒント- レッスン2の動画（ https://www.youtube.com/watch?v=MIaAUIc87r4&list=PLPth6MvJU5iFbsl1eNOLV1jJUv2JMjdgg ） を参考にAzureのSearch APIを使ってデータをダウンロードするもよし、こちらの動画（ https://www.youtube.com/watch?v=YZ0czV4N9d0&list=PLPth6MvJU5iEG4Ql3RbKdj7fWWu4JSJmH ）Googleで検索した画像をJavascriptで落とすのも良し。一つ一つ手動でダウロードして一つずつアップロードするも良し。方法は自由です。 その他fastaiのバージョンは2.xを使用してください。Google Colabにデフォルトで入っているバージョンは1.0のため、まず最初にfastaiをアップグレードする必要があります。```! pip install --upgrade fastai==2.4.1```上記実行後、ランタイムを再起動します。GPUを使う設定も忘れずに。<jupyter_code># !pip install --upgrade fastai==2.4.1
# fastaiのバージョンをチェックします。
# 2.x ならokです。

import fastai
fastai.__version__
# ここにStudent IDを記載しておいてください。
Student_ID = ""

# import library
from fastai.vision.all import *
import requests 
import warnings
warnings.filterwarnings('ignore')<jupyter_output><empty_output><jupyter_text>1. 画像を準備するまず、*data*という名前のディレクトリを作成、更にその中にカテゴリーに対応したディレクトリを作成します。その後カテゴリーに対応したディレクトリに画像をデータをそれぞれ入れていきます。以下に例を示します。```./data/black/1.jpg./data/grizzly/4.jpg./data/teddy/2.jpg```例えば```./data/black/```の中にブラックベアの画像が入ることになります。但し今回は自分で考えたカテゴリーを使うのでblack等はそれに合った名前を使ってください。<jupyter_code># 下記を実行することで、クマのサンプルでテストできます。
# ですが、このアサインメントをパスするには"クマ"以外の自分のデータを自分のスキルでなんとかして用意する必要があります。

# ! wget http://shabelab.com/datasets/bears.tar.gz
# ! tar xvzf bears.tar.gz<jupyter_output>--2021-07-07 03:29:27--  http://shabelab.com/datasets/bears.tar.gz
Resolving shabelab.com (shabelab.com)... 192.168.3.11
Connecting to shabelab.com (shabelab.com)|192.168.3.11|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://shabelab.com/datasets/bears.tar.gz [following]
--2021-07-07 03:29:27--  https://shabelab.com/datasets/bears.tar.gz
Connecting to shabelab.com (shabelab.com)|192.168.3.11|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 142392895 (136M) [application/gzip]
Saving to: ‘bears.tar.gz’

bears.tar.gz        100%[===================>] 135.80M  12.7MB/s    in 11s     

2021-07-07 03:29:39 (12.1 MB/s) - ‘bears.tar.gz’ saved [142392895/142392895]<jupyter_text>2. データセットを設定し、学習を行う以下は各セルを順番に実行していくだけでokです。*学習のヒント:*将来類似の問題に出くわした際は、似た様な問題を暑かったnotebooksやgithubのプロジェクトを探し、それを変更して解決できないか試してみましょう。データを変えるだけで解決できることは少ないですが、そこが出発点として使える事は多いです。<jupyter_code># datablock
bears = DataBlock(
    blocks=(ImageBlock, CategoryBlock), 
    get_items=get_image_files, 
    splitter=RandomSplitter(valid_pct=0.2, seed=42),
    get_y=parent_label,
    item_tfms=RandomResizedCrop(224, min_scale=0.5),
    batch_tfms=aug_transforms())
# prepare dataloaders
dls = bears.dataloaders("./data")
# train 
learn = cnn_learner(dls, resnet18, metrics=error_rate)
learn.fine_tune(4)
# evaluate training
interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()

# save 
learn.export()<jupyter_output><empty_output><jupyter_text>3. テスト学習で使わなかった画像を一つ用意しアップロードします。  その後、保存したモデルをロードし、どんな推論結果が出るかテストしてみましょう。ここではtest.jpgという名前で保存しています。<jupyter_code># 画像を一つアップロードする。
# 以下はクマの例です。アサインメントでは自分のデータに合うサンプルを用意する必要があります。

# ! wget https://shabelab.com/mp3/1200px-2010-kodiak-bear-1.jpg -O test.jpg

# load model
learn_inf = load_learner('export.pkl')
# upload image 
test_image = "test.jpg"
from IPython.display import Image
Image(filename=test_image) 
# test model
learn_inf.predict(test_image)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13017066820943013, 'fraction_numerical': 0.05409314434480764, 'mean_word_length': 7.372881355932203, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 17, 'https://': 5, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 3, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '84854', 'license': 'MIT', 'n_tokens_mistral': 2099, 'n_tokens_neox': 1906, 'n_words': 159, 'path': 'nbs/huntercity_practice_1.ipynb', 'repo_name': 'kouohhashi/mytutorials', 'size': '3460'}