見出し画像

複合機の評価時における異常画像を自動で検出する~その1(Yolov8,Windows)

異常画像評価が手作業になっている

異常画像を評価する際に場合によっては1万枚を超えてプリントし、その画像品質を評価することがありますが、未だ手作業&人判断で画像検査を実施しているらしく、それは好ましい状態とは言えないだろうと思い先日使いこなせるようになったYolov8を使って実践してみることにしました。

異常画像を準備する

今回は、小さな横スジを自動検出したいため、該当部がある画像サンプルを52枚用意しました。project1\ng に配置しました。

NG画像

labelImgを使って異常画像部に対しアノテーションします。(計52枚)

labelImg入力中

学習準備

・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


学習結果(Epoch100)

推論してみます

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の画像を入れる作りをすれば自動化できそうです。次回チャレンジしてみようと思います。

いいなと思ったら応援しよう!