目次
Amazon Lookout for Vision v2.0 完全ガイド(AI/ML - Vision)
初心者から実務者向けの包括的解説
Amazon Lookout for Vision は、コンピュータビジョンと機械学習を使用して製品の外観検査を自動化するマネージドサービスです。少数の正常品画像だけから異常検知モデルを構築し、製造ラインの欠陥品を高速・高精度で検出します。
⚠️ End of Support Notice: Amazon Lookout for Vision は 2025年10月31日をもってサポート終了予定です。詳細参照。
目次
- 概要
- Lookout for Vision が解決する課題
- 主な特徴
- アーキテクチャ
- コアコンポーネント
- 異常検知アプローチ
- ワークフロー
- データセット管理
- モデル学習
- 推論とデプロイメント
- エッジデプロイメント
- パフォーマンス指標
- ユースケース
- 他サービスとの比較
- セキュリティとコンプライアンス
- コスト分析
- マイグレーション戦略
- ベストプラクティス
- トラブルシューティング
- End of Support Notice
- まとめ
概要
Lookout for Vision とは
「製造業向けコンピュータビジョン異常検知サービス」 で、以下の特徴があります:
- 少ないデータで学習: 正常品の画像 20-100 枚から異常検知モデルを構築
- 異常検知ベース: ラベル付きデータが少ない環境に最適
- バウンディングボックス可視化: 欠陥箇所を画像上に表示
- エッジデプロイ対応: AWS Greengrass で現場に展開
- 自動メトリクス計算: 精度・F1スコア・混同行列を自動生成
選ぶべき理由
以下のいずれかに該当すれば Lookout for Vision は最適:
- 製造ラインで外観欠陥を自動検査したい
- 正常品の画像は多いが、異常品のサンプルが少ない
- 欠陥箇所の位置を可視化したい(ローカライズ)
- ネットワーク断時もエッジで推論を続けたい
- SageMaker のカスタム学習には時間がない
Lookout for Vision が解決する課題
| 課題 | 従来の方法 | Lookout for Vision |
|---|---|---|
| 異常サンプルの不足 | 数千枚の欠陥画像が必要 | 正常品のみで学習可 |
| モデル開発時間 | 数ヶ月の ML エンジニア作業 | 数日で実装 |
| 欠陥ローカライズ | バウンディングボックス手作業 | 自動的に欠陥箇所を可視化 |
| 検査員依存 | 人手による目視検査(非効率) | 完全自動検査 |
| 品質スループット | 秒 100-1000 枚程度 | 秒 1000+ 枚(リアルタイム) |
| エッジ展開 | SDK 統合に 2-3 ヶ月 | Greengrass で 1-2 週間 |
| 検査の客観性 | 検査員による誤差 | AI による一貫性 |
主な特徴
✅ 異常検知機械学習
- 正常パターンを学習して異常を検出
- 異常サンプルが少ない業界に最適
- One-class SVM / 深層学習ハイブリッド
✅ バウンディングボックス検出
- 欠陥位置を画像上に表示
- 検査員への改善フィードバック
- ローカライズスコア(信頼度)付き
✅ 自動メトリクス計算
- 精度・再現率・F1 スコア自動生成
- 混同行列
- ROC 曲線分析
✅ マルチスケール検出
- 異なる大きさの欠陥を検出
- 複数層での学習
✅ エッジ推論対応
- AWS IoT Greengrass での実行
- インターネット断時の動作継続
アーキテクチャ
製造ラインカメラ
↓
Lookout for Vision(クラウド)
├── データセット管理
├── モデル学習(異常検知)
└── 推論エンジン
↓ 推論結果
IsAnomalous: true/false
AnomalyScore: 0.0-1.0
AnomalyMask: 欠陥領域(RGB)
↓
├── クラウド推論(リアルタイム)
│ → S3 + SNS + Lambda
│
└── エッジ推論(Greengrass)
→ オフライン動作継続
データフロー例(PCB 検査)
PCB ラインカメラ(毎秒 30 フレーム)
→ Lookout for Vision 推論
→ IsAnomalous = true
→ 欠陥画像を S3 に保存
→ SNS で検査チームに通知
→ Lambda で欠陥統計を記録
→ IsAnomalous = false
→ 次工程に進行
コアコンポーネント
1. Project(プロジェクト)
import boto3
client = boto3.client('lookoutvision')
# プロジェクト作成
response = client.create_project(
ProjectName='pcb-defect-detector',
ProjectDescription='プリント基板の欠陥検出'
)
project_arn = response['ProjectMetadata']['ProjectArn']
2. Dataset(データセット)
# データセット作成
response = client.create_dataset(
ProjectName='pcb-defect-detector',
DatasetType='train', # 'train' または 'test'
DatasetSource={
'GroundTruthManifest': {
'S3Object': {
'Bucket': 'my-bucket',
'Key': 'manifests/train.manifest' # COCO JSON フォーマット
}
}
}
)
# COCO 形式マニフェスト例
{
"images": [
{
"id": 1,
"file_name": "pcb_001.jpg",
"height": 640,
"width": 480
}
],
"annotations": [
{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [10, 20, 50, 30], # [x, y, width, height]
"area": 1500,
"iscrowd": 0
}
],
"categories": [
{
"id": 1,
"name": "defect",
"supercategory": "anomaly"
}
]
}
3. Model(モデル)
# モデル作成(学習開始)
response = client.create_model(
ProjectName='pcb-defect-detector',
ModelDescription='PCB 表面欠陥検出モデル v1.0',
ClientToken='unique-token-001'
)
model_arn = response['ModelMetadata']['ModelArn']
# モデルステータス確認
response = client.describe_model(
ProjectName='pcb-defect-detector',
ModelVersion='1.0'
)
# Status: TRAINING / TRAINED / FAILED
4. Anomaly Detection
# クラウド推論
response = client.detect_anomalies(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
ContentType='image/jpeg',
Body=open('test_image.jpg', 'rb').read()
)
# 推論結果
prediction = response['DetectAnomalyResult']['Predictions'][0]
print(f"IsAnomalous: {prediction['IsAnomalous']}")
print(f"AnomalyScore: {prediction['Confidence']}")
# 欠陥マスク(ローカライズ)
if prediction['IsAnomalous']:
anomaly_regions = prediction['Anomalies']
for region in anomaly_regions:
print(f"欠陥 Bounding Box: {region['PixelAnomaly']}")
5. Package Export(エッジパッケージ)
# エッジモデルをパッケージング
response = client.create_model_packaging_job(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
Configuration={
'Greengrass': {
'TargetPlatform': {
'Os': 'LINUX',
'Arch': 'ARM64' # または X86_64
},
'TargetDevice': 'JETSON_NANO' # NVIDIA Jetson / SageMaker Edge
}
},
Description='PCB 検出モデル Greengrass パッケージ',
OutputS3Location={
'Bucket': 'my-bucket',
'Prefix': 'models/packaged/'
}
)
job_name = response['JobName']
# ステータス確認
response = client.describe_model_packaging_job(
ProjectName='pcb-defect-detector',
JobName=job_name
)
# Status: CREATED / IN_PROGRESS / SUCCEEDED / FAILED
異常検知アプローチ
One-Class SVM
正常パターン(ハイパープレーン)を学習
↓
新しい画像が「正常の外側」なら異常と判定
利点:
- サンプル数が少なくても学習可能
- 計算効率が良い
欠点:
- 複雑な異常パターンには弱い
深層学習(オートエンコーダー)
正常画像 → エンコード → デコード → 再構成画像
正常画像:
再構成誤差:低い(同じ画像に戻る)
→ IsAnomalous = false
異常画像:
再構成誤差:高い(復元できない)
→ IsAnomalous = true
Lookout for Vision のハイブリッド
Lookout for Vision = One-Class SVM + 深層学習
① 浅層特徴抽出(One-Class SVM)
② 深層特徴抽出(CNN)
③ アンサンブル判定
ワークフロー
1. 初期データ収集(1-2 週間)
タスク: 正常品の画像を 50-100 枚収集
├─ 異なる照度条件
├─ 異なるカメラ角度
├─ 異なる製造時間帯
└─ 異なる季節条件
結果: train.zip(正常画像集合)
2. データセットアップロード(1 日)
# ディレクトリ構造
my-bucket/
├── dataset/
│ ├── train/
│ │ ├── normal_001.jpg
│ │ ├── normal_002.jpg
│ │ └── ...
│ └── test/
│ ├── test_001.jpg
│ └── test_002.jpg
└── manifests/
├── train.manifest # COCO JSON
└── test.manifest
3. モデル学習(1-3 時間)
response = client.create_model(
ProjectName='pcb-defect-detector',
ModelDescription='v1.0'
)
# 完了まで待機
waiter = client.get_waiter('model_trained')
waiter.wait(ProjectName='pcb-defect-detector')
4. モデル評価(30 分)
# テストデータで精度確認
response = client.describe_model(
ProjectName='pcb-defect-detector',
ModelVersion='1.0'
)
metrics = response['ModelMetadata']['Performance']
print(f"Precision: {metrics['Precision']}")
print(f"Recall: {metrics['Recall']}")
print(f"F1-Score: {metrics['F1Score']}")
5. デプロイ(即座)
# クラウド推論を有効化
response = client.start_model(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
MinInferenceUnits=1 # スケーリングユニット
)
6. エッジデプロイ(1-2 日)
# Greengrass パッケージ作成
response = client.create_model_packaging_job(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
Configuration={'Greengrass': {...}}
)
# Greengrass ネイティブコンポーネントとしてデプロイ
# → 現場の Jetson / SageMaker Edge で自動実行
データセット管理
データセットのライフサイクル
- 収集 → ラベリング → マニフェスト作成 → アップロード → 学習
- ↓
- 精度確認(テスト) → 再ラベリング → 再学習(イテレーション)
画像品質ガイドライン
推奨:
✅ 解像度: 640x480 以上
✅ 被写体占有率: 30-80%
✅ 照度: 均一(逆光なし)
✅ 焦点: シャープ
✅ 欠陥が明確に見える角度
非推奨:
❌ 小さすぎる(<320x240)
❌ 暗すぎる(ISO感度 400 以上)
❌ ぼやけている
❌ 複数製品が重なる
ラベリング(COCO フォーマット)
{
"images": [
{
"id": 1,
"file_name": "normal_001.jpg",
"height": 640,
"width": 480
}
],
"annotations": [], // 正常品なので annotations なし
"categories": [
{
"id": 1,
"name": "defect"
}
]
}
バージョン管理
# データセットバージョン
response = client.create_dataset(
ProjectName='pcb-defect-detector',
DatasetType='train',
DatasetSource={...}
)
# v1: 100 枚
# v2: 200 枚(新データ追加)
# v3: 300 枚(季節変動対応)
モデル学習
学習パラメータ
# Lookout for Vision は自動最適化
# → 手動パラメータ調整不可(マネージドサービス)
# カスタマイズできる項目:
response = client.create_model(
ProjectName='pcb-defect-detector',
ModelDescription='PCB v1.0',
KmsKeyId='arn:aws:kms:region:account:key/key-id' # 暗号化キー指定
)
学習時間見積もり
データサイズ | 学習時間 | 推論レイテンシ
50-100枚 | 30分 | 500ms
100-200枚 | 60分 | 400ms
200-500枚 | 90分 | 300ms
500-1000枚 | 120分 | 250ms
精度改善のイテレーション
# イテレーション 1
client.create_model(ProjectName='project', ...)
# F1-Score: 0.85
# → 低精度な画像を分析して追加
# → より多様なデータセット v2 を作成
# イテレーション 2
client.create_model(ProjectName='project', ...)
# F1-Score: 0.92(改善)
推論とデプロイメント
クラウド推論
# リアルタイム API 推論
response = client.detect_anomalies(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
ContentType='image/jpeg',
Body=image_bytes
)
prediction = response['DetectAnomalyResult']['Predictions'][0]
# 結果処理
if prediction['IsAnomalous']:
# 不良品排出機構に信号
send_reject_signal()
# 欠陥画像を S3 に保存
save_to_s3('s3://bucket/defects/', image_bytes)
# SNS でアラート
send_alert_email('quality@factory.com')
推論スケーリング
# 推論ユニット(1 = 300 リクエスト/分)
response = client.start_model(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
MinInferenceUnits=1 # 最小 1
# 最大: 10
)
# スケーリング例
1 ユニット → 300 req/min → $0.04/時間
5 ユニット → 1500 req/min → $0.20/時間
10 ユニット → 3000 req/min → $0.40/時間
Lambda 統合
import boto3
import json
lookout = boto3.client('lookoutvision')
s3 = boto3.client('s3')
sns = boto3.client('sns')
def lambda_handler(event, context):
# S3 から新規画像を取得
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
image_obj = s3.get_object(Bucket=bucket, Key=key)
image_bytes = image_obj['Body'].read()
# Lookout for Vision で推論
response = lookout.detect_anomalies(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
ContentType='image/jpeg',
Body=image_bytes
)
prediction = response['DetectAnomalyResult']['Predictions'][0]
# 欠陥発見時の処理
if prediction['IsAnomalous']:
anomaly_score = prediction['Confidence']
# DynamoDB に記録
dynamodb = boto3.client('dynamodb')
dynamodb.put_item(
TableName='defect-log',
Item={
'timestamp': {'N': str(int(time.time()))},
'image_key': {'S': key},
'anomaly_score': {'N': str(anomaly_score)}
}
)
# SNS でアラート
sns.publish(
TopicArn='arn:aws:sns:region:account:defect-alerts',
Subject=f'Defect Detected (Score: {anomaly_score:.2%})',
Message=f'Image: s3://{bucket}/{key}'
)
return {
'statusCode': 200,
'body': json.dumps(prediction)
}
エッジデプロイメント
AWS IoT Greengrass
# ステップ 1: Greengrass デバイスにコンポーネントをデプロイ
response = client.create_model_packaging_job(
ProjectName='pcb-defect-detector',
ModelVersion='1.0',
Configuration={
'Greengrass': {
'TargetPlatform': {
'Os': 'LINUX',
'Arch': 'ARM64' # Jetson Nano
},
'TargetDevice': 'JETSON_NANO'
}
},
OutputS3Location={
'Bucket': 'my-bucket',
'Prefix': 'greengrass-components/'
}
)
Greengrass コンポーネント例
# recipe.yaml
---
RecipeFormatVersion: 2020-01-25
ComponentName: com.lookout.vision.pcb-detector
ComponentVersion: 1.0.0
ComponentDescription: PCB Defect Detection
ComponentPublisher: AWS
ComponentConfiguration:
DefaultConfiguration:
ModelName: pcb-defect-detector
ModelVersion: '1.0'
Manifests:
- Platform:
os: linux
architecture: arm64
Artifacts:
- URI: s3://my-bucket/greengrass-components/model.tar.gz
Name: Model
エッジ推論コード
# Jetson Nano 上で実行
import cv2
import json
from AWSIoTGreengrassCore import lambda_runtime
from lookout_vision_model import LookoutVisionModel
def lambda_handler(event, context):
"""Greengrass コンポーネント内で実行"""
# ローカルに格納されたモデルをロード
model = LookoutVisionModel('models/pcb-detector-1.0')
# ローカルカメラから画像取得
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# エッジで推論(インターネット不要)
result = model.detect_anomalies(frame)
if result['IsAnomalous']:
# ローカル GPIO で不良品排出
set_reject_signal(True)
# 異常が発生した場合のみ S3 にアップロード
s3_client.put_object(
Bucket='defects',
Key=f'defects/{int(time.time())}.jpg',
Body=cv2.imencode('.jpg', frame)[1].tobytes()
)
cv2.imshow('Defect Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
パフォーマンス指標
精度指標
精度(Precision)
= TP / (TP + FP)
= 「欠陥と判定したもの中、実際に欠陥」の割合
→ 誤検出を少なくしたい場合に重視
再現率(Recall)
= TP / (TP + FN)
= 「実際の欠陥中、検出できた」の割合
→ 見落としを少なくしたい場合に重視
F1-Score
= 2 * (Precision * Recall) / (Precision + Recall)
→ 精度と再現率のバランス指標
推論速度
- 実装環境 | レイテンシ | スループット
- クラウド | 500ms | 300 req/min
- Greengrass (Jetson Nano) | 100ms | 1000 req/min
- Greengrass (GPU) | 30ms | 3000 req/min
誤検出 / 見落とし分析
Confusion Matrix:
予測: Anomaly | 予測: Normal
実: Anomaly | TP | FN(見落とし)
実: Normal | FP(誤検)| TN
見落とし削減:
→ Threshold を下げる
→ (IsAnomalous = true if Confidence > 0.5)
誤検削減:
→ Threshold を上げる
→ (IsAnomalous = true if Confidence > 0.8)
ユースケース
1. PCB(プリント基板)検査
- 入力: PCB ラインカメラ(毎秒 30 フレーム)
- 処理: ハンダ付け不良・部品未実装検出
- 出力: 不良率 KPI / 欠陥位置可視化
- 効果: 検査員 1-2 名削減 / 歩留まり向上
2. 半導体ウエーハ検査
- 入力: ウエーハ表面カメラ
- 処理: パターン欠陥・キズ検出
- 出力: 欠陥マップ / 不良ウエーハ排出信号
- 効果: 歩留まり改善(1-2%)
3. ボトル・容器検査
- 入力: 高速ラインカメラ(100+ FPS)
- 処理: ラベル貼り不良・変形・異物混入検出
- 出力: リアルタイム検査結果
- 効果: 人間が見落とせない微細欠陥も検出
4. 食品検査
- 入力: 農産物・加工食品カメラ
- 処理: 色ムラ・傷・異物検出
- 出力: 等級仕分け(A/B/C 等)
- 効果: 検査の客観化・スループット向上
5. 電子部品検査
- 入力: コネクタ・スイッチなど部品カメラ
- 処理: 寸法・色・バリ検出
- 出力: 不良品排出信号
- 効果: 100% 検査の実現
他サービスとの比較
Lookout for Vision vs Rekognition Custom Labels
| 観点 | Lookout for Vision | Rekognition Custom |
|---|---|---|
| 特化領域 | 製造業欠陥検出 | 汎用カスタム分類 |
| 学習データ | 正常品のみ可 | ラベル付き画像必須 |
| 欠陥ローカライズ | ✅ バウンディング | ❌ |
| エッジ推論 | ✅ Greengrass | ❌ |
| UI/UX | 製造向け専門的 | シンプル |
| コスト | $10/学習時間 | $1/1000 画像 |
| 採用理由 | 製造ライン / 少数据 | 汎用分類 / 大量数据 |
Lookout for Vision vs SageMaker
| 観点 | Lookout for Vision | SageMaker |
|---|---|---|
| セットアップ時間 | 数日 | 数週間 |
| 必要なスキル | 最小限(ローコード) | Python / ML 知識 |
| モデルカスタマイズ | 限定的 | 高度に可能 |
| 推論レイテンシ | 300-500ms | 100-1000ms(設定次第) |
| エッジデプロイ | ✅ Greengrass | 可能(複雑) |
| 価格 | $10/学習時間 | 従量課金 |
セキュリティとコンプライアンス
データセキュリティ
# KMS 暗号化を有効化
response = client.create_project(
ProjectName='pcb-defect-detector',
KmsKeyId='arn:aws:kms:region:account:key/key-id'
)
# S3 エンドツーエンド暗号化
s3_client.create_bucket(
Bucket='lookout-bucket',
ServerSideEncryptionConfiguration={
'Rules': [
{
'ApplyServerSideEncryptionByDefault': {
'SSEAlgorithm': 'aws:kms',
'KMSMasterKeyID': 'arn:aws:kms:...'
}
}
]
}
)
アクセス制御(IAM)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lookoutvision:DetectAnomalies",
"lookoutvision:DescribeModel"
],
"Resource": "arn:aws:lookoutvision:region:account:project/pcb-defect-detector/*"
},
{
"Effect": "Deny",
"Action": [
"lookoutvision:DeleteProject",
"lookoutvision:DeleteModel"
],
"Resource": "*"
}
]
}
コンプライアンス
- HIPAA: 医療画像処理に対応
- PCI-DSS: 支払い環境での使用可
- GDPR: 画像メタデータの削除機能
コスト分析
課金体系
| 項目 | 価格 |
|---|---|
| モデル学習 | $10/時間 |
| クラウド推論 | $4/推論ユニット/時間 |
| エッジパッケージ | $1/月/デバイス |
| S3 ストレージ | 標準 S3 料金 |
| 無料枠 | 最初の 3 ヶ月:40 時間推論 |
コスト最適化
低コスト構成:
① モデル学習: 初回のみ $30-50(1-5 時間)
② エッジ推論: $1/月/デバイス × 5 デバイス = $5/月
③ S3 保存: $0.023/GB(100GB = $2.30/月)
④ 合計: 約 $8/月(初年度以降)
ROI(現場 1 つ):
従来: 検査員 $2,500/月
Lookout: $8/月
削減: $2,492/月(初年度)
マイグレーション戦略
2025年10月31日以降への対応
推奨移行先:
- Amazon SageMaker(カスタム学習)
- Amazon Rekognition Custom Labels(クラウド推論)
- AWS Bedrock Vision API(LLM 連携)
移行シナリオ
シナリオ 1: SageMaker への移行
# Lookout モデルをエクスポート
response = lookout.describe_model(
ProjectName='pcb-defect-detector',
ModelVersion='1.0'
)
# ONNX 形式でエクスポート(手動変換)
# → SageMaker Processing で再学習
# SageMaker Endpoint としてデプロイ
endpoint_name = 'pcb-detector-sagemaker'
sagemaker.deploy(...)
シナリオ 2: Rekognition Custom Labels への移行
# データセットを COCO → Rekognition フォーマットに変換
# → Rekognition で同じ画像セットで学習
# → クラウド推論は同じ API インターフェース
# ただし欠陥ローカライズ(バウンディング)は手動実装が必要
シナリオ 3: ハイブリッド(Bedrock + SageMaker)
# 構造化データ: SageMaker(欠陥分類)
# 根本原因分析: Bedrock Vision API(画像説明生成)
response = bedrock.invoke_model(
modelId='anthropic.claude-3-5-vision-20241022-v2:0',
body=json.dumps({
'messages': [{
'role': 'user',
'content': [
{
'type': 'image',
'source': {
'type': 's3',
's3Location': {
'uri': 's3://bucket/defect.jpg'
}
}
},
{
'type': 'text',
'text': 'This PCB has a defect. Explain the issue.'
}
]
}]
})
)
ベストプラクティス
1. データ品質
✅ 推奨:
- 異なる照度条件の画像(500 ルクス、1000 ルクス)
- 異なるカメラアングル(正面、斜め 45°、側面)
- 異なる季節・時間帯の画像
- 正常品を 50-200 枚集める
❌ 非推奨:
- 同じカメラ位置・照度のみ
- 5 枚以下の極少数データセット
- ぼやけた / 暗い画像
2. モデルイテレーション
Iteration 1: 精度 80%
→ 低精度画像を分析
→ 原因: 特定の照度条件での見落とし
Iteration 2: データ拡張(その照度条件の画像追加)
→ 精度 88%
Iteration 3: 季節変動対応
→ 精度 92%
3. スコア閾値調整
# デフォルト: threshold = 0.5
# 見落とし > 誤検: threshold = 0.3(感度向上)
# 誤検 > 見落とし: threshold = 0.7(特異度向上)
# 動的調整例
if defect_type == 'critical':
threshold = 0.3 # 見落とし防止
else:
threshold = 0.7 # 誤検削減
4. エッジ推論のメンテナンス
# Greengrass コンポーネント定期更新
# 毎月 1 日に自動デプロイ
# モデル v1.0 → v2.0 への段階的更新
# - Phase 1: 10% のデバイスに展開(テスト)
# - Phase 2: 50% のデバイスに展開
# - Phase 3: 100% のデバイスに展開
トラブルシューティング
精度が低い(F1 < 0.80)
① データセット品質確認
→ 画像のぼかし / 暗さをチェック
→ 異なる条件の画像を追加
② モデルの過学習確認
→ テストセットで再評価
→ 正常品の多様性を向上
③ 閾値調整
→ threshold = 0.5 から 0.4 に下げて再評価
デプロイが失敗する
エラー: "ModelPackagingJobFailed"
→ パッケージング対象デバイスを確認
→ S3 出力先のアクセス権限確認
エラー: "InsufficientResourcesException"
→ Greengrass コアリソース不足
→ 他のコンポーネントを停止
推論が遅い
クラウド推論: 500ms → 1000ms
→ 推論ユニット数を増加
→ (1 ユニット → 3 ユニットに変更)
エッジ推論: 100ms → 300ms
→ Jetson Nano のメモリ逼迫
→ 他アプリを停止 / GPU メモリ最適化
End of Support Notice
重要なお知らせ
Amazon Lookout for Vision は 2025年10月31日をもってサポート終了予定です。
- 新規プロジェクト: 開始を避け、代替手段の評価を推奨
- 既存プロジェクト: サポート期間内に代替ソリューションへの移行を計画
- 既存モデル: 2025年10月31日まで使用可能(その後アクセス不可)
推奨される移行経路
- SageMaker – カスタム学習・高度なカスタマイズ
- Rekognition Custom Labels – クラウド推論・API 互換
- Bedrock Vision API – LLM による説明生成・根本原因分析
まとめ
Amazon Lookout for Vision は 「製造業向けコンピュータビジョン異常検知サービス」 です。
強み
- 少ないデータで学習(正常品のみ)
- 欠陥位置の自動可視化
- エッジ推論対応(Greengrass)
- ローコード・マネージド
制約
- カスタマイズ機能は限定的
- 2025年10月31日でサポート終了
- 複雑な分類には不向き
選択基準
- ✅ 製造ラインで外観欠陥を自動検査したい
- ✅ 異常品サンプルが少ない環境
- ✅ エッジで実行したい
- ❌ 2025年以降の長期運用予定
公式ドキュメント
最終更新: 2025年4月27日 バージョン: v2.0