私的AI研究会 > RevYOLOv5_3

【復習】物体検出アルゴリズム「YOLO V5」3 == 編集中 ==

20110805_111736_001m.jpg

「PyTorch ではじめる AI開発」Chapter04 で使用する「YOLO V5」について復習する。
「YOLO V5」の学習を深堀する

▲ 目 次
※ 最終更新:2024/05/17

「車のナンバープレート読み取り」

 物体検出の応用として車のナンバープレート識別を検討してみる

前準備(Step 1)

vehicle_detection_m.jpg
  1. Vehicle Detection Computer Vision Project のページを開く
    ・「Download」ボタンを押す
    ・ダウンロードファイル「Vehicle Detection.v7i.yolov5pytorch.zip」を解凍する
    ・フォルダ名を変更「Vehicle Detection.v7i.yolov5pytorch」→「vd_dataset」

  2. 「vd_dataset/」フォルダ内の「data.yaml」をコピーしてファイル「vd_data.yaml」を作成
    ・データセットの配置場所は「yolov5/data/」フォルダとする
    train: data/vd_dataset/train/images
    val: data/vd_dataset/valid/images
    test: data/vd_dataset/test/images
    
    nc: 2
    names: ['licence', 'licenseplate']
    
    roboflow:
      workspace: image-processing-u647q
      project: vehicle-detection-639on
      version: 7
      license: CC BY 4.0
      url: https://universe.roboflow.com/image-processing-u647q/vehicle-detection-639on/dataset/7
  3. 「vd_dataset/」フォルダを「yolov5/data/」内にコピー(移動)する

学習の実行(Step 1)

  1. エポック数 100 で実行する
    ・実行ディレクトリは「workspace_pylearn/yolov5/」
    ・学習モデルはデフォールト設定「yolov7s」を使用する
    ・学習結果フォルダ名は「vd_yolov5s_ep100」とする
    (py_learn) python train.py --epochs 100 --data data/vd_dataset/vd_data.yaml --weights yolov5s.pt --name vd_yolov5s_ep100
    ・GPU を使用しない場合は以下のコマンドを実行する
    (py_learn) python train.py --epochs 100 --data data/vd_dataset/vd_data.yaml --weights yolov5s.pt --name vd_yolov5s_ep100 --device cpu
  2. 学習の終了
    (py_learn) python train.py --epochs 100 --data data/vd_dataset/vd_data.yaml --weights yolov5s.pt --name vd_yolov5s_ep100
            :
    
          Epoch    GPU_mem   box_loss   obj_loss   cls_loss  Instances       Size
          99/99      4.17G    0.01894   0.006213   0.000583         12        640: 100%|██████████| 34/34 [00:02<00:00, 12.
                     Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 5/5 [00:00<0
                       all        136        155      0.544        0.5      0.468      0.242
    
    100 epochs completed in 0.107 hours.
    Optimizer stripped from runs\train\vd_yolov5s_ep100\weights\last.pt, 14.4MB
    Optimizer stripped from runs\train\vd_yolov5s_ep100\weights\best.pt, 14.4MB
    
    Validating runs\train\vd_yolov5s_ep100\weights\best.pt...
    Fusing layers...
    Model summary: 157 layers, 7015519 parameters, 0 gradients, 15.8 GFLOPs
                     Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 5/5 [00:01<0
                       all        136        155      0.476       0.53      0.472       0.26
                   licence        136        132      0.681      0.712      0.635      0.333
              licenseplate        136         23       0.27      0.348       0.31      0.187
    Results saved to runs\train\vd_yolov5s_ep100
    ▼「train.py」実行ログ詳細

  3. メッセージ「Results saved to runs\train\vd_yolov5s_ep30」のファイルを確認
    ・学習結果モデルは「runs/train/vd_yolov5s_ep100/weights」評価指標は「runs/train/vd_yolov5s_ep100/」
    F1 curveP curvePR curveR curve

実行結果を使って推論(Step 1)

  1. ラベルファイルを作成する
    ・「vd_names_jp」日本語ファイル
    ナンバー
    ナンバープレート
    ・「vd_names」英語ファイル
    licence
    licenseplate
  2. 「detect2.py」で推論実行(静止画をフォルダごとまとめて)
    ・学習結果モデルを指定する
    (py_learn) python detect2.py --weights runs/train/vd_yolov5s_ep100/weights/best.pt --source ../number/test_data/
    ・実行ログ(結果は「runs/detect/exp*」*は順次更新)
    (py_learn) python detect2.py --weights runs/train/vd_yolov5s_ep100/weights/best.pt --source ../number/test_data/
    detect2: weights=['runs/train/vd_yolov5s_ep100/weights/best.pt'], source=../number/test_data/, data=data\coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_csv=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
    YOLOv5  v7.0-294-gdb125a20 Python-3.11.8 torch-2.2.1+cu121 CUDA:0 (NVIDIA GeForce RTX 4070 Ti, 12282MiB)
    
    Fusing layers...
    Model summary: 157 layers, 7015519 parameters, 0 gradients, 15.8 GFLOPs
    Speed: 0.2ms pre-process, 5.4ms inference, 1.2ms NMS per image at shape (1, 3, 640, 640)
    Results saved to runs\detect\exp43
  3. 「detect3_yolov5.py」で推論実行(静止画)
    ・学習結果モデルを指定する
    (py_learn) python detect3_yolov5.py -m runs/train/vd_yolov5s_ep100/weights/best.pt -i ../number/test_data/japan69.jpg -l vd_names_jp
    ・実行ログ
    (py_learn) python detect3_yolov5.py -m runs/train/vd_yolov5s_ep100/weights/best.pt -i ../number/test_data/japan69.jpg -l vd_names_jp
     Starting..
    
    Object detection YoloV5 in PyTorch Ver. 0.07: Starting application...
       OpenCV virsion : 4.9.0
    
       - Image File   :  ../number/test_data/japan69.jpg
       - YOLO v5      :  ultralytics/yolov5
       - Pretrained   :  runs/train/vd_yolov5s_ep100/weights/best.pt
       - Confidence lv:  0.25
       - Label file   :  vd_names_jp
       - Program Title:  y
       - Speed flag   :  y
       - Processed out:  non
       - Use device   :  cuda:0
       - Log Level    :  3
    
    Using cache found in C:\Users\izuts/.cache\torch\hub\ultralytics_yolov5_master
    YOLOv5  2024-4-9 Python-3.11.8 torch-2.2.1+cu121 CUDA:0 (NVIDIA GeForce RTX 4070 Ti, 12282MiB)
    
    Fusing layers...
    Model summary: 157 layers, 7015519 parameters, 0 gradients, 15.8 GFLOPs
    Adding AutoShape...
    
    FPS average:       9.50
    
     Finished.
 

更新履歴

参考資料

  ・ハイパーパラメータ

  ・「roboflow」のMask Wearing Datasetを使用

  ・学習用データセット作成