Pythonで機械学習(忘備録③画像分類)

IT

自分向けのメモ。よく忘れるところとか、初学時に引っかかったところなど。基本的にリンク先が非常に詳しく、自分でも役に立ったページ。画像分類に関連の深い技術等について

参考図書

前提や、想定読者層

  • 一念発起してpythonや機械学習を始めた、自分みたいな境遇の人
  • 完全なプログラム言語初心者は想定していない
  • (私は、visual basic/VBA程度の開発経験あり)

前処理

 画像について読み込ませる前に必要な処理。事前に画像サイズを合わせたり、背景をカットしたりすることで、より効率的に人工知能に学ばせる。AIに余計な情報を与えないことで、意図した判断基準に導ける可能性を増やす。

opencv

Open Source Computer Vision Library。最もよく使われている画像処理ライブラリ。

画像を読み込ませる

imread

画像を読み込んでNumpyの配列データに変換することができる。

import cv2
import numpy as np
from matplotlib import pyplot as plt
#グレースケールで読み込み
image =cv2.imread("images.jpg",cv2.IMREADA_GRAYSCALE)
#読み込んだ画像を確認する
plt.imshow(image,cmap="gray"),plt.axis("off")
plt.show()

#カラーで読み込む場合
image_bgr=cv2.imread(images.jpg,cv2.IMREAD_COLOR)
#BGRをRGB変換
image_rgb=cv2.cvtColor(image_bgr,Cv2.COLOR_BGR2RGB)

imagefolder

resize

画像サイズの変更。画像を軽くしたり、サイズを共通化することでAIに意図しない判断基準を与えないようにする。

#グレースケールで読み込み
image =cv2.imread("images.jpg",cv2.IMREADA_GRAYSCALE)
image50_50 = cv2.resize(image,(50,50))

画像のクロップ(トリミング)

配列のスライスを行うことで、画像のトリミングになる。

#グレースケールで読み込み
image =cv2.imread("images.jpg",cv2.IMREADA_GRAYSCALE)
image_trim=image[:,:128]

画像の2値化

閾値処理。thresholding

#グレースケールで読み込み
image =cv2.imread("images.jpg",cv2.IMREADA_GRAYSCALE)
#適応的閾値処理
max_output_value=255 #出力するピクセルの最大値
neighborhood_size=99
subtract_from_mean=10#手動で一律減算する
image_biarized = cv2.adaptiveThreshold(image,max_output_value,csv.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,beighborhood_size,subtract_from_mean)

転移学習

混同行列とは

第一種の誤りとPrecisionと偽陽性

第二種の誤りとRecallと偽陰性

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred, labels=[0,1,2,3,4,5,6,7,8,9])
print (cm)

y_testに正解のラベル、y_predにAIが予測したラベルを入力する。

Precisionを求める。

precision_0 = cm[0,0]/sum(cm[:,0])#ゼロ番目のラベルについて、分子:正解のラベルと予測のラベルが一致した数、分母:予測がゼロのケースの総数

recallを求める。

recall_0 = cm[0,0]/sum(cm[0])#ゼロ番目のラベルについて、分子:正解のラベルと予測のラベルが一致した数、分母:正解ラベルがゼロのケースの総数

F値を求める。通常トレードオフとなるPrecisionとrecallのバランスを図るための指標。

F = 2*(precision_0 * recall_0) /(precision_0 + recall_0)

更新履歴

2021/4/1 新規作成
2021/5/5 追加

タイトルとURLをコピーしました