私的AI研究会 > YOLOv5
このページは新規に更新ページを作成 →「【復習】物体検出アルゴリズム「YOLO V5」」
「PyTorch ではじめる AI開発」Chapter04 Section-011 '物体検出 AIを使う'の章で使用する「YOLO V5」について調査する。
https://www.ariseanalytics.com/activities/report/20210521/ より
『YOLO』とは "You only live once”「人生一度きり」を引用した "You Only Look Once"「見るのは一度きり」が名の由来。
ID | coco.names | coco.names_jp | ID | coco.names | coco.names_jp |
0 | person | 人 | 40 | wine glass | ワイングラス |
1 | bicycle | 自転車 | 41 | cup | カップ |
2 | car | 車 | 42 | fork | フォーク |
3 | motorbike | バイク | 43 | knife | ナイフ |
4 | aeroplane | 飛行機 | 44 | spoon | スプーン |
5 | bus | バス | 45 | bowl | 丼鉢 |
6 | train | 列車 | 46 | banana | バナナ |
7 | truck | トラック | 47 | apple | リンゴ |
8 | boat | ボート | 48 | sandwich | サンドイッチ |
9 | traffic light | 信号機 | 49 | orange | オレンジ |
10 | fire hydrant | 消火栓 | 50 | broccoli | ブロッコリー |
11 | stop sign | 一時停止標識 | 51 | carrot | 人参 |
12 | parking meter | パーキングメーター | 52 | hot dog | ホットドッグ |
13 | bench | ベンチ | 53 | pizza | ピザ |
14 | bird | 鳥 | 54 | donut | ドーナッツ |
15 | cat | 猫 | 55 | cake | ケーキ |
16 | dog | 犬 | 56 | chair | 椅子 |
17 | horse | 馬 | 57 | sofa | ソファー |
18 | sheep | 羊 | 58 | pottedplant | 鉢植え |
19 | cow | 牛 | 59 | bed | ベッド |
20 | elephant | 象 | 60 | diningtable | ダイニングテーブル |
21 | bear | 熊 | 61 | toilet | トイレ |
22 | zebra | シマウマ | 62 | tvmonitor | テレビ |
23 | giraffe | キリン | 63 | laptop | ラップトップコンピューター |
24 | backpack | バックパック | 64 | mouse | マウス |
25 | umbrella | 傘 | 65 | remote | リモコン |
26 | handbag | ハンドバック | 66 | keyboard | キーボード |
27 | tie | ネクタイ | 67 | cell phone | 携帯電話 |
28 | suitcase | スーツケース | 68 | microwave | 電子レンジ |
29 | frisbee | フリスビー | 69 | oven | オーブン |
30 | skis | スキー板 | 70 | toaster | トースター |
31 | snowboard | スノーボード | 71 | sink | キッチン・シンク |
32 | sports ball | スポーツボール | 72 | refrigerator | 冷蔵庫 |
33 | kite | 凧 | 73 | book | 本 |
34 | baseball bat | 野球のバット | 74 | clock | 時計 |
35 | baseball glove | 野球のグローブ | 75 | vase | 花瓶 |
36 | skateboard | スケートボード | 76 | scissors | ハサミ |
37 | surfboard | サーフボード | 77 | teddy bear | テディベア |
38 | tennis racket | テニスラケット | 78 | hair drier | ヘアドライヤー |
39 | bottle | 瓶 | 79 | toothbrush | 歯ブラシ |
ダウンロードする版は「v5.0」とする。(OpenVINO™ にコンバートして利用するため)
[env_select.sh] Environment Select !! 1: Nomal 2: OpenVINO 3: Anaconda Prease input '1-3' : 3 ** Anaconda environment select !! ** [anaconda_setup.sh] Anaconda3 environment initialized [OMZ_demos.sh] Open Model Zoo Demos environment initialized # conda environments: # base /home/mizutu/anaconda3 py37 * /home/mizutu/anaconda3/envs/py37 PYTHONPATH= /home/mizutu/workspace/lib:/home/mizutu/omz_demos_build/intel64/Release/lib (py37) $
→ YOLOv5で物体検出 (PyTorch Hubからダウンロード)
(py37) $ cd ~/workspace_py37/yolo_OV/ (py37) $ python3 yolov5-test.py Using cache found in /home/mizutu/.cache/torch/hub/ultralytics_yolov5_master YOLOv5 🚀 2021-9-14 torch 1.8.2+cpu CPU Fusing layers... [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. Model Summary: 224 layers, 7266973 parameters, 0 gradients Adding AutoShape... Saved 2 images to runs/detect/exp image 1/2: 720x1280 2 persons, 2 ties image 2/2: 1080x810 4 persons, 1 bus Speed: 1041.8ms pre-process, 479.0ms inference, 43.6ms NMS per image at shape (2, 3, 640, 640) 最初の画像からの検出 tensor([[7.49472e+02, 4.36570e+01, 1.14765e+03, 7.04565e+02, 8.74176e-01, 0.00000e+00], [4.33667e+02, 4.33769e+02, 5.17575e+02, 7.14644e+02, 6.88577e-01, 2.70000e+01], [1.15053e+02, 1.95761e+02, 1.09553e+03, 7.08221e+02, 6.25422e-01, 0.00000e+00], [9.86198e+02, 3.04159e+02, 1.02802e+03, 4.20193e+02, 2.86980e-01, 2.70000e+01]]) 2番目の画像からの検出 tensor([[5.39249e+01, 3.96443e+02, 2.27883e+02, 8.84316e+02, 8.85955e-01, 0.00000e+00], [2.21809e+02, 4.08172e+02, 3.47631e+02, 8.59990e+02, 8.56445e-01, 0.00000e+00], [6.69742e+02, 4.09900e+02, 8.10000e+02, 8.74648e+02, 8.49890e-01, 0.00000e+00], [0.00000e+00, 2.18276e+02, 8.10000e+02, 7.38612e+02, 7.11332e-01, 5.00000e+00], [7.56615e-01, 5.42520e+02, 7.52420e+01, 8.84386e+02, 3.86610e-01, 0.00000e+00]]) 全てのクラス ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush']・結果画像は「runs/detect/exp(2・3・4 …)」ディレクトリに保存されている。
(py37) $ cd ~/workspace_py37/yolo_OV/ $ cp ~/workspace_py37/chapter04/coco.names ./ $ cp ~/workspace_py37/chapter04/coco.names_jp ./
(py37) $ cd ~/workspace_py37/yolo_OV/ (py37) $ python3 detect_yolov5.py Using cache found in /home/mizutu/.cache/torch/hub/ultralytics_yolov5_master YOLOv5 🚀 2021-9-16 torch 1.8.2+cpu CPU Fusing layers... [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. Model Summary: 224 layers, 7266973 parameters, 0 gradients Adding AutoShape... AutoShape already enabled, skipping... --- Object detection YoloV5 in PyTorch --- 4.5.2 Object detection YoloV5 in PyTorch: Starting application... - Image File : /home/mizutu/Videos/car_m.mp4 - Language : jp - Program Title: y - Speed flag : y - Processed out: non FPS average: 3.90 Finished.
color = (int(min(class_id * 12.5, 255)), min(class_id * 7, 255), min(class_id * 5, 255))
(py37) $ cd ~/workspace_py37/yolo_OV/yolov5 (py37) $ vi requirements.txt # pip install -r requirements.txt # base ---------------------------------------- matplotlib>=3.2.2 numpy>=1.18.5 #opencv-python>=4.1.2 Pillow PyYAML>=5.3.1 scipy>=1.4.1 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.41.0 :
(py37) $ cd ~/workspace_py37/yolo_OV/yolov5 (py37) $ vi models/export.py : # ONNX export try: import onnx print('\nStarting ONNX export with onnx %s...' % onnx.__version__) f = opt.weights.replace('.pt', '.onnx') # filename # torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'], # output_names=['classes', 'boxes'] if y is None else ['output'], # dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}, # size(1,3,640,640) # 'output': {0: 'batch', 2: 'y', 3: 'x'} } if opt.dynamic else None) torch.onnx.export(model, img, f, verbose=False, opset_version=10, input_names=['images'], output_names=['classes', 'boxes'] if y is None else ['output']) :
(py37) $ python models/export.py --weights yolov5-v3/yolov5s.pt --img 640 --batch 1
[env_select.sh] Environment Select !! 1: Nomal 2: OpenVINO 3: Anaconda Prease input '1-3' : 2 ** OpenVINO environment select !! ** [openvino_setup.sh] OpenVINO environment initialized Anaconda exist !! >> base # conda environments: # base * /home/mizutu/anaconda3 py37 /home/mizutu/anaconda3/envs/py37 [setupvars.sh] OpenVINO environment initialized [OMZ_demos.sh] Open Model Zoo Demos environment initialized : $ cd workspace_py37/yolo_OV/yolov5 $ ls Dockerfile data models train.py weights LICENSE detect.py requirements.txt tutorial.ipynb yolov5-v3 README.md hubconf.py test.py utils
$ python3 /opt/intel/openvino_2021/deployment_tools/model_optimizer/mo.py --input_model yolov5-v3/yolov5s.onnx --model_name yolov5-v3/yolov5s -s 255 --reverse_input_channels --output Conv_487,Conv_471,Conv_455
OpenVINO™/Anaconda どちらの環境でも動作する。
$ cd ~/workspace_py37/yolo_OV $ cp yolov5_demo/yolov5_demo_OV2021.3.py ./yolov5_demo_OV2021.3a.py・表示の不具合対応のパッチをあてる。(389行追加)
$ vi yolov5_demo_OV2021.3a.py : 388 if not args.no_show: 389 cv2.namedWindow("DetectionResults", cv2.WINDOW_AUTOSIZE) 390 cv2.imshow("DetectionResults", frame) :・オリジナルのデモプログラムを実行する。
$ cd ~/workspace_py37/yolo_OV $ python3 yolov5_demo_OV2021.3a.py -i yolov5/data/images/zidane.jpg -m yolov5/yolov5-v3/yolov5s.xml [ INFO ] Creating Inference Engine... [ INFO ] Loading network: yolov5s.xml [ INFO ] Preparing inputs [ INFO ] Loading model to the plugin [ INFO ] Starting inference... To close the application, press 'CTRL+C' here or switch to the output window and press ESC key To switch between sync/async modes, press TAB key in the output window [ INFO ] Layer Conv_455 parameters: [ INFO ] classes : 80 [ INFO ] num : 3 [ INFO ] coords : 4 [ INFO ] anchors : [10.0, 13.0, 16.0, 30.0, 33.0, 23.0, 30.0, 61.0, 62.0, 45.0, 59.0, 119.0, 116.0, 90.0, 156.0, 198.0, 373.0, 326.0] [ INFO ] Layer Conv_471 parameters: [ INFO ] classes : 80 [ INFO ] num : 3 [ INFO ] coords : 4 [ INFO ] anchors : [10.0, 13.0, 16.0, 30.0, 33.0, 23.0, 30.0, 61.0, 62.0, 45.0, 59.0, 119.0, 116.0, 90.0, 156.0, 198.0, 373.0, 326.0] [ INFO ] Layer Conv_487 parameters: [ INFO ] classes : 80 [ INFO ] num : 3 [ INFO ] coords : 4 [ INFO ] anchors : [10.0, 13.0, 16.0, 30.0, 33.0, 23.0, 30.0, 61.0, 62.0, 45.0, 59.0, 119.0, 116.0, 90.0, 156.0, 198.0, 373.0, 326.0] (720, 1280)
$ cp ~/workspace_py37/chapter04/coco.names ./ $ cp ~/workspace_py37/chapter04/coco.names_jp ./・ソースコードをコピーして編集する。
$ cp yolov5_demo_OV2021.3a.py yolov5_demo_OV.py $ vi yolov5_demo_OV.py : (ソースファイル 後述)・ソースコードを実行する。
$ python3 yolov5_demo_OV.py -i yolov5/data/images/zidane.jpg -m yolov5/yolov5-v3/yolov5s.xml --labels coco.names_jp -r [ INFO ] Creating Inference Engine... [ INFO ] Loading network: yolov5/yolov5-v3/yolov5s.xml [ INFO ] Preparing inputs [ INFO ] Loading model to the plugin [ INFO ] Starting inference... To close the application, press 'CTRL+C' here or switch to the output window and press ESC key To switch between sync/async modes, press TAB key in the output window [ INFO ] Detected boxes for batch 1: [ INFO ] Class ID | Confidence | XMIN | YMIN | XMAX | YMAX | COLOR (720, 1280) [ INFO ] 人 | 0.873057 | 747 | 39 | 1148 | 711 | (0, 80, 0) [ INFO ] 人 | 0.816088 | 116 | 197 | 1003 | 711 | (0, 80, 0) [ INFO ] ネクタイ | 0.778782 | 422 | 430 | 517 | 719 | (128, 0, 128)
$ python3 yolov5_demo_OV.py -i ~/Videos/car1_m.mp4 -m yolov5/yolov5-v3/yolov5s.xml --labels coco.names_jp [ INFO ] Creating Inference Engine... [ INFO ] Loading network: yolov5/yolov5-v3/yolov5s.xml [ INFO ] Preparing inputs [ INFO ] Loading model to the plugin [ INFO ] Starting inference... To close the application, press 'CTRL+C' here or switch to the output window and press ESC key To switch between sync/async modes, press TAB key in the output window
コマンド・オプション | 意味 |
-m , --mode | 学習済みモデルのパス |
-i , --input | 入力ソースのパス or cam |
-d , --device | 推論デバイス |
--labels | ラベルファイルのパス(coco.name, coco_name_jp) |
-r, --raw_output_message | メッセージ出力フラグ |