自分向けのメモ。よく忘れるところとか、初学時に引っかかったところなど。基本的にリンク先が非常に詳しく、自分でも役に立ったページ。画像分類に関連の深い技術等について
参考図書
前提や、想定読者層
- 一念発起して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 追加