複合機の評価時における異常画像を自動で検出する~その1(Yolov8,Windows)
異常画像評価が手作業になっている
異常画像を評価する際に場合によっては1万枚を超えてプリントし、その画像品質を評価することがありますが、未だ手作業&人判断で画像検査を実施しているらしく、それは好ましい状態とは言えないだろうと思い先日使いこなせるようになったYolov8を使って実践してみることにしました。
異常画像を準備する
今回は、小さな横スジを自動検出したいため、該当部がある画像サンプルを52枚用意しました。project1\ng に配置しました。
labelImgを使って異常画像部に対しアノテーションします。(計52枚)
学習準備
・project1\images\trainに30枚、project1\images\valに22枚の異常画像を入れます。
・project1\labels\trainに30ファイル(labelImgで生成したテキストファイル)、project1\labels\valに22ファイル(labelImgで生成したテキストファイル)を入れます。
・project1\data.yamlファイルを作成します。以下の通りです。
train: C:\Users\r00526423\data\python\yolo311\project1\images\train
val: C:\Users\r00526423\data\python\yolo311\project1\images\val
nc: 1 # クラス数(アノテーションで使用するカテゴリ数)
names: ['ng'] # クラス名(アノテーションのラベルと対応)
学習開始
以下を実行します。
yolo task=detect mode=train model=yolov8n.pt data=data.yaml epochs=100 imgsz=640
学習結果
こうなりました。
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
100/100 0G 2.727 4.11 0.9165 31 640: 100%|██████████| 2/2 [00:08<00:00, 4.36s/it]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 1/1 [00:02<00:00, 2.25s/it
all 22 35 0.711 0.4 0.522 0.144
100 epochs completed in 0.311 hours.
Optimizer stripped from runs\detect\train2\weights\last.pt, 6.2MB
Optimizer stripped from runs\detect\train2\weights\best.pt, 6.2MB
Validating runs\detect\train2\weights\best.pt...
Ultralytics 8.3.38 🚀 Python-3.11.1 torch-2.5.1+cpu CPU (12th Gen Intel Core(TM) i7-1265U)
Model summary (fused): 168 layers, 3,005,843 parameters, 0 gradients, 8.1 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 1/1 [00:01<00:00, 1.92s/it
all 22 35 0.71 0.4 0.519 0.141
Speed: 0.7ms preprocess, 61.0ms inference, 0.0ms loss, 6.0ms postprocess per image
Results saved to runs\detect\train2
推論してみます
project1\suironフォルダを作り、推論したい画像を入れファイル名をsuiron3.jpgとします。conf=0.10としました。
yolo task=detect mode=predict model=runs/detect/train2/weights/best.pt source=C:\Users\r00526423\data\python\yolo311\project1\suiron\suiron3.jpg conf=0.10
結果確認
project1\runs\detect\predict\に推論後のsuiron3.jpg画像が入っているので確認します。見事に検出できていますね。
おわりに
どうやらYolov8を使って異常画像を自動検出できそうです。評価したい画像を複合機のスキャナからスキャン蓄積(USBメモリ:PDF)して、PC上で1枚ずつJPG変換して、連続して推論し、推論結果NGフォルダにNGの画像を入れる作りをすれば自動化できそうです。次回チャレンジしてみようと思います。