はじめに
Amazon Lookout for Visionで簡単に異常検知ができた。
MVTecのデータセットは固定の画角、構図、明るさで撮影されている。
位置ずれや明るさ、コントラストなどが異なる画像の場合、Amazon Lookout for Visionでどれくらい検出精度が変化するか試してみる。
画像の準備
位置ずれ画像の準備
元画像(1024×1024)を800×800でランダムクロップした後、1024×1024にリサイズ。
random_crop.py
import os
import glob
import torch
import torchvision
import torchvision.transforms as transforms
import cv2
#変換を定義
transform = transforms.Compose([
transforms.ToPILImage(),
transforms.RandomCrop(size = 800)
])
output_dir = './mvtec/screw/train/good_crop/'
os.makedirs(output_dir, exist_ok=True)
# 対象のファイルのリストを取得
files = glob.glob('./mvtec/screw/train/good/*')
for file in files:
# OpenCVを使って画像を読み込む
img = cv2.imread(file)
#BGRをRGBに変換
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
trans_img = transform(img_rgb)
trans_img = trans_img.resize((1024, 1024))
fname = os.path.basename(file)
trans_img.save(f'{output_dir}/{fname}')
学習用データセット(テスト用データセットはオリジナル画像のまま)
明るさ・コントラスト変更画像の準備
オリジナル画像の明るさとコントラストをランダムに変更
random_bright_contrast.py
import os
import glob
import torch
import torchvision
import torchvision.transforms as transforms
import cv2
#変換を定義
transform = transforms.Compose([
transforms.ToPILImage(),
transforms.ColorJitter(brightness=0.3, contrast=0.5)
])
output_dir = './mvtec/screw/train/good_bright/'
os.makedirs(output_dir, exist_ok=True)
# 対象のファイルのリスト
files = glob.glob('./mvtec/screw/train/good/*')
for file in files:
# OpenCVを使って画像を読み込む
img = cv2.imread(file)
#BGRをRGBに変換
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
trans_img = transform(img_rgb)
fname = os.path.basename(file)
trans_img.save(f'{output_dir}/{fname}')
学習用データセット(テスト用データセットはオリジナル画像のまま)
Amazon Lookout for Visionでそれぞれ学習
オリジナル画像の場合
位置ずれ画像の場合
元データに比べ精度が30%ほど低下。
明るさとコントラスト変更画像の場合
位置ずれと全く同じ結果が得られた。
まとめ
Amazon Lookout for Visionでは位置ずれ、明るさとコントラスト変更のいずれも精度が低下した。
Amazon Lookout for Visionを効果的に使用するには少なくとも以下のような条件を満たす画像データを取得するのが良さそう。
- 検知対象が真ん中に映っている
- 明るさやコントラストの条件が一定である