Welcome to Mashykom WebSite



PyTorchを用いたObject Detectionのページ

 PyTorch はディープラーニングを実装する際に用いられるディープラーニング用ライブラリのPython APIの一つです。もともとは、Torch7と呼ばれるLua言語で書かれたライブラリでした。Chainerは日本のPreferred Networks社が開発したライブラリですが、Pytorchに統合されました。Caffe2もPyTorchに併合されました。現在、PyTorch は Team PyTorch によって開発されています。PyTorchの利点はDefine by Run(動的計算グラフ)と呼ばれる特徴です。Define by Runは入力データのサイズや次元数に合わせてニューラルネットワークの形や計算方法を変更することができます。

 多くのユーザーを持つディープラーニングの Python API であるTensorFlow の特徴は Define and Run(静的計算グラフ)と呼ばれます。Define and Runではニューラルネットワークの計算方法をはじめに決めてしまうため、入力データの次元がデータごとに異なる状況に対応しづらいという特徴があります 。Keras + Tensorflow は見やすく簡易で、非常に簡単にネットワークを作成できるので、人工知能の専門家以外の人たちにとって、使いやすい必須の道具となっています。しかし、アップグレードが後方互換性を持たないという欠点と、動作が遅いという問題点もあります。他方で、PyTorchは、Define by Runという特徴ゆえに、AIを開発する専門家に必須のアイテムになりつつあります。Object Detection用のライブラリの中では処理速度が最も最速です。

 このページでは、PyTorch を利用した物体検出の Python 実装を取り上げます。最初に、画像分類と物体検出の関係について簡単な説明をします。その後、物体検出のためのアルゴリズムである SSD を取り上げて説明し、その Python 実装例を紹介します。さらに、物体検出のもう一つの有用なアルゴリズムである YOLO の Python 実装について説明します。このページの主要な目的は、web camera からのライブ映像の物体検出になります。

Pytorch の examples パッケージはpytorch examplesからダウンロードできます。

Last updated: 2020.4.17(first uploaded 2018.6.13)


物体検出と画像分類の関係


 画像分類の歴史は大体以下のようになります。

 畳み込みネットワークを組み込んだAlexNetが、2012年開催された大規模画像認識のコンペILSVRC(ImageNet Large Scale Visual Recognition Challenge) で圧倒的な成績で優勝しました。それ以来、ディープラーニングの手法(CNN)が画像分類での主役に躍り出ました。2014年に開催されたILSVRCでの優勝者はGoogLeNetでした。GoogLeNetは複雑に見える構成ですが、基本的には、AlexNetのようなCNNと本質的には同じです。ただ、GoogLeNetには、縦方向に深さがあるだけでなく、横方向にも深さがあるという点で異なっています。横方向の幅はinception構造と呼ばれています(Inceptionモデルと呼ばれます) 。

 このとき、VGGは2位の成績に終わりましたが、シンプルな構成なので応用面ではよく使用されます。ちなみに、VGGでは、3x3のフィルターによる畳み込み層を2回から4回連続して、プーリング層でサイズを半分にするという処理を繰り返します。重みのある層を16層にしたモデルをVGG16、19層にしたものをVGG19と呼んでいます。

 2015年のILSVRCでの優勝者はResNetで、Microsoftのチームによって開発されたニューラルネットワークでした。その特徴は、層を深くしすぎると過学習などの問題が起きるのを回避するために、スキップ構造(ショートカット)と呼ばる概念を導入した点です。ResNetは、VGGのネットワークをベースにして、スキップ構造を取り入れて、層を深くしています。具体的には、畳み込み層を2層おきにスキップしてつなぎ、層を150層以上まで深くしています。ILSVRCのコンペでは、誤認識率が3.5%という驚異的な成果を出しています。

 画像分類(Image Classification)は同じクラスの物体の画像に写っている物体のラベルの分類を目指すものです。一方、一つの画像の中に写っている複数の物体を検出して、その物体の分類を行うことを物体検出(Object Detection)と言います。物体検出の中で、物体の分類処理に使用されアルゴリズムが画像分類で開発されてきた CNN モデルです。また、この物体検出に付随して、画像内の各pixelごとに、あるいは、グリッドごとのラベルの分類を与えることを Segmentation あるいは region proposal と言います。画像の特定の領域が物体であるかどうかを判断する( Bounding Boxの) region proposal アルゴリズムが必要となります。

 現実の課題として、例えば、自動車の自動運転を実現するためには、センサーから入手したデータから一般物体(人間、車、歩道、樹木など)の検出を可能とするソフトウエアが必要です。これを担う物体検出ソフトが、ライブ映像の画像の中から定められた物体の位置とラベル(クラス)を検出します。物体検出の問題は、性質のわからない、数が不明な物体をビデオ画像やカメラ画像から特定するという問題になります。

 画像分類と物体検出の学習で用いられるデータセットや指標はまったく異なります。Image Classification(画像分類)でよく利用されるデータセットは MNIST データセットや ImageNet の画像セット、Kaggleのイメージ画像などです。一方、物体検出の精度の比較によく用いられているデータセットは PASCAL VOC2007 と PASCAL VOC2012 、あるいは、別の年度の PASCAL VOC や MS COCO などのデータセットです。物体検出の学習では、物体のラベルだけでなく、各物体の位置情報も必要となります。また、物体検出の分野で重要とされている指標は、mAP (mean Average Precision) と FPS (Frame Per Second) です。

 PASCAL VOC2007のデータセットは、以下のような分類となっています。

20 classes:
Person: person
Animal: bird, cat, cow, dog, horse, sheep
Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train
Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor
Train/validation/test: 9,963 images containing 24,640 annotated objects

MS COCO (Microsoft Common Object in Context) データセットは、Microsoft が提供しているアノテーション付きの画像データです。以下のように80 classesに分類されたデータセットです。

person, bicycle, car, motorbike, aeroplane, 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, sofa, pottedplant, bed, diningtable, toilet, tvmonitor
laptop, mouse, remote, keyboard, cell phone, microwave, oven, toaster, sink, refrigerator
book, clock, vase, scissors, teddy bear, hair drier, toothbrush

 Deep Learning(CNN)を応用した一般物体検出アルゴリズムで有名なものとしては、3種類挙げられます。Faster R-CNN(R-CNN の発展系)、YOLO(You Only Look Once)、SSD( Single Shot MultiBox Detector)に大別できます。

 TensorFlow や Pytorch などのライブラリに実装されている物体検出のアルゴリズムでは

  • Region Proposal : 物体が存在する領域を検出
  • Classification : 検出領域における物体のラベル(クラス)分類
  • Bounding Box Regression : 物体を囲う領域の正確な位置座標を推定
  • という 3 phase に大きく別れています。

     以下では、PyTorch を用いた物体検出のPython API ライブラリ、SSD系のアルゴリズムを実装する事例などをいくつか紹介します。また、YOLO系モデルの一つであるDarkentを活用する方法についても紹介します。


    SSD in PyTorch framework


     既に触れた通り、Deep Learning(CNN)を応用した一般物体検出アルゴリズムで有名なものとしては、3種類挙げられます。 Faster R-CNN 、YOLO(You Only Look Once) 、SSD(Single Shot MultiBox Detector) に大別できます。YOLO と SSD 以前のモデルでは、バウンディング・ボックスの提案をする処理と物体識別をする処理の2種類の CNN が必要でした。そのためリアルタイムでの物体検出における処理時間に課題がありました。YOLO と SSD では、バウンディング・ボックスの提案をする処理を入力画像の物体識別の CNN と統合することにより、処理時間を短縮しました。

     始めに、SSD の特徴を簡単に説明します。SSD モデルでは、デフォルト・ボックスという概念を使用します。デフォルト・ボックスとは画像マップの各セルを中心とする4種類または6種類の(各辺の長さが異なる)四角形のことです。画像識別の CNN 、例えば、VGG16やResNetなどに、みられるように、畳み込み層は様々なサイズの特徴マップを生成します。SSD では、これらのうちサイズ38x38 、 19x19 、 10x10 、 5x5 、3x3 、 1x1 の特徴マップにおいて、各マップをデフォルト・ボックスで覆います。したがって、総数で8732個(38x4+19x6+10x6+5x6+3x4+1x4))のデフォルト・ボックスが存在します。これらのボックスの中に何らかの物体が存在するか否かを調べて、その物体を識別します。物体識別の確率が最も高いデフォルト・ボックスだけを残し、それを物体検出のバウンディング・ボックスとします。

    ssd_diagram.png
    SSD ネットワークの構成

     SSD モデルの Pytorch 実装を説明するコードとして最も分かり易い例として、この GitHub Repの ssd.pytorch を利用します。この Repo を git clone して下さい。すると、以下の構成になっているフォルダーが作成されます。

    
    .
    ├── LICENSE
    ├── README.md
    ├── data
    │   ├── __init__.py
    │   ├── coco.py
    │   ├── coco_labels.txt
    │   ├── config.py
    │   ├── example.jpg
    │   ├── dog.jpg
    │   ├── eagle.jpg
    │   ├── giraffe.jpg
    │   ├── herd_of_horses.jpg
    │   ├── messi.jpg
    │   └── person.jpg
    │   ├── scripts
    │   │   ├── COCO2014.sh
    │   │   ├── VOC2007.sh
    │   │   └── VOC2012.sh
    │   └── voc0712.py
    ├── demo
    │   ├── __init__.py
    │   ├── demo.ipynb
    │   └── live.py
    ├── doc
    │   ├── SSD.jpg
    │   ├── detection_example.png
    │   ├── detection_example2.png
    │   ├── detection_examples.png
    │   └── ssd.png
    ├── layers
    │   ├── __init__.py
    │   ├── box_utils.py
    │   ├── functions
    │   │   ├── __init__.py
    │   │   ├── detection.py
    │   │   └── prior_box.py
    │   └── modules
    │       ├── __init__.py
    │       ├── l2norm.py
    │       └── multibox_loss.py
    ├── utils
    │    ├── __init__.py
    │    └── augmentations.py
    ├── eval.py
    ├── ssd.py
    ├── test.py
    └── train.py
    
    

     Google Colab で実行する時は、このフォルダー全体を /My Drive/ にアップロードして下さい。demo.ipynb と ssd.pytorch.ipynb は Google Colab で使用できるコードになっています。

     私の Github Repo をGoogle Colab で git clone する形式でも実行できます。この Colab での demo ssd_pytorch_demo を使用しましょう。

     Repo を git clone したら、VGG16の重み (vgg16_reducedfc.pth) をフォルダー ssd.pytorch/weights に保存します。

    
    ! git clone https://github.com/mashyko/ssd.pytorch
    
    import os
    os.chdir('ssd.pytorch')
    
    ! mkdir weights
    %cd weights
    
    ! wget https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
    
    

     さらに、VOC0712のデータセットで学習された SSD300 pretrained model( PyTorch 用のweights)も

    
    ! wget https://s3.amazonaws.com/amdegroot-models/ssd300_mAP_77.43_v2.pth 
    %cd ..
    
    

    とダウンロードする必要があります。この後に、物体検出をするコードを置きます。実行すると、以下のような物体検出の画像が表示されます。

    ssd_dog.png

     なお、GitHub repo にある demo.ipynb を Colab でそのまま実行できます。フォルダー weights が作成され、そこに必要な学習済みモデルが保存されます。その後、example.jpg の画像に対する物体検出が行われます。data フォルダーにある画像を交互に使用して実証してみて下さい。

    SSD の学習用データセットとしては、 Microsoft CoCo2014 または PASCAL Visual Object Classes (VOC2007, VOC2012)を使用します。ここでは、VOC2007 を利用します。VOC は20クラスのデータセットで、画像ファイルとアノテーション・ファイルから構成されます。モデルの学習はGPU の使用を前提としていますので、Google Colab を使用することにします。

    それゆえ、私のGitHub Repo フォルダーを Google Colab に git clone します。ssd.pytorch というノートブックが配置されていますので、それを開いて下さい。以下のようにセルから始まります。

    
    !git clone https://github.com/mashyko/ssd.pytorch
    
    !sh data/scripts/VOC2007.sh >& VOC2007.log
    !sh data/scripts/VOC2012.sh >& VOC2012.log
    
    

     VOC2007.sh(VOC2012.sh)がVOC2007(VOC2012) データセットを読み込むためのファイルです。VOCdevkit というディレクトリの下にVOC2007 と VOC2012 という名称のフォルダーが作成され、その中に画像ファイルとアノテーション・ファイルがダウンロードされます。2ギガ以上のサイズがあります。

     このノートブックを用いてモデルの学習をしてみましょう。以下のセルを順番に実行します。

    
    !mkdir /root/data/coco
    !cp  ssd.pytorch/data/coco_labels.txt /root/data/coco/
    
    !cd ssd.pytorch; python train.py --dataset VOC --dataset_root ~/data/VOCdevkit --batch_size 16 --lr 1e-5
    
    

     train.py を実行すると、/root/dats/coco/coco_labels.txt をアクセスするので、先頭の2行のコードが必要です。これがないと、coco_labels.txt がないというエラーが出ます。max_iter = 20000 とエポック数を少なくしていますが、20時間以上かかると思われます。

     ここで説明した ssd.pytorch のオリジナルコードをPytorch 1.3 以上のバージョンでもより使いやすい形に改良したプログラムがあります。『PyTorchニューラルネットワーク実装ハンドブック』の第7章で、SSD の説明とその使用法が解説されていて、それに対応するコードが提供されています。この書籍に付録するコードは、この GitHub Repo にあります。Google Colab で利用可能になっています。この書籍で提供されたコードを部分的に修正したプログラムは、この Colab のコードで実行できます。学習済みモデルを使った物体検出および VOC データセットを用いたモデルの学習が実験できますので、ご利用ください。ただし、学習には半日以上の時間がかかります。 Google Colab は連続で12時間までですので、config.py ファイルでの設定で max_iterを少なくして、途中で切れないようにして下さい。

     NVIDIA が提供しているSSDモデルは、ResNet-50 modelを用いています。このColab で実行できます。また、(白血球、赤血球、血小板の画像ファイル)BCCD Dataset を用いて、新たなクラスの物体検出が試みた SSD モデルのコードは、このサイトにありますが、セキュリティーの警告が出ます。

     ところで、PyTorch で Pascal VOC のデータセットを使うのに、 Torchvision の VOCDetection というクラスです。 Pascal VOC のデータを簡単に読み込めるようなクラスが用意されています。 クラスは下のような引数をとります。image_set は train, trainval, val の3種類を取ります。

    
    torchvision.datasets.VOCDetection(root, year='2012', image_set='train', download=False, transform=None, target_transform=None, transforms=None)
    
    

     返り値は、(image,target)で、imageはPILの画像、targetはxml treeの辞書となっている。 targetには画像サイズやbounding boxの位置などの情報が入っている。

     2012年のデータセットのtrainを使う例を取り上げます。 download=Trueなので、実行するとデータがrootで指定した ./VOCDetection/2012 にダウンロードされます。

    
    import torchvision
    
    voc_dataset=torchvision.datasets.VOCDetection(root="./VOCDetection/2012",year="2012",image_set="train",download=True)
    
    

     データセットから一番最初のデータを取得してみます。 返り値は、画像とアノテーション情報になります。画像を表示してみます。

    
    image,target=voc_dataset[0]
    
    from IPython.display import display
    
    display(image)
    
    

     次に、軽量CNN モデルの MobileNet を使用した SSD アルゴリズムを組み込んだ Pytorch コードを取り上げます。ライブカメラからの映像の物体検出を行いたいので、Google Colab は使用しません。 MobileNet モデルによるライブ映像から物体検出を試みましょう。この作業を実行するにあたり、github repo にあるpytorch-ssdを利用します。このリポジトリをダウンロードしましょう。展開後に、pytorch-ssd-master という名称のフォルダーが以下のように作成されます。

    .
    ├── LICENSE
    ├── README.md
    ├── convert_to_caffe2_models.py
    ├── draw_eval_results.py
    ├── eval_ssd.py
    ├── example.jpg
    ├── extract_tf_weights.py
    ├── gun.jpg
    ├── models
    ├── open_images_downloader.py
    ├── prune_alexnet.py
    ├── readme_ssd_example.jpg
    ├── run_ssd_example.py
    ├── run_ssd_example_output.jpg
    ├── run_ssd_live_caffe2.py
    ├── run_ssd_live_demo.py
    ├── train_ssd.py
    ├── translate_tf_mobilenetv1.py
    ├── vision
    │   ├── __init__.py
    │   ├── __pycache__
    │   ├── datasets
    │   │   ├── __init__.py
    │   │   ├── collation.py
    │   │   ├── generate_vocdata.py
    │   │   ├── open_images.py
    │   │   └── voc_dataset.py
    │   ├── nn
    │   │   ├── __init__.py
    │   │   ├── __pycache__
    │   │   ├── alexnet.py
    │   │   ├── mobilenet.py
    │   │   ├── mobilenet_v2.py
    │   │   ├── multibox_loss.py
    │   │   ├── scaled_l2_norm.py
    │   │   ├── squeezenet.py
    │   │   └── vgg.py
    │   ├── prunning
    │   │   ├── __init__.py
    │   │   └── prunner.py
    │   ├── ssd
    │   │   ├── __init__.py
    │   │   ├── __pycache__
    │   │   ├── config
    │   │   ├── data_preprocessing.py
    │   │   ├── fpn_mobilenetv1_ssd.py
    │   │   ├── fpn_ssd.py
    │   │   ├── mobilenet_v2_ssd_lite.py
    │   │   ├── mobilenetv1_ssd.py
    │   │   ├── mobilenetv1_ssd_lite.py
    │   │   ├── predictor.py
    │   │   ├── squeezenet_ssd_lite.py
    │   │   ├── ssd.py
    │   │   └── vgg_ssd.py
    │   ├── test
    │   │   ├── __init__.py
    │   │   ├── assets
    │   │   │   └── 000138.jpg
    │   │   └── test_vgg_ssd.py
    │   ├── transforms
    │   │   ├── __init__.py
    │   │   ├── __pycache__
    │   └── utils
    │       ├── __init__.py
    │       ├── __pycache__
    │       ├── box_utils.py
    │       ├── box_utils_numpy.py
    │       ├── measurements.py
    │       ├── misc.py
    │       └── model_book.py
    └── visual_tf_models.p
    

    README.md に 「 Single Shot MultiBox Detector Implementation in Pytorch 」なるタイトルの下に使用するための記述が並んでいます。ここまでにインストールした環境で正常に作動しますので、新たにインストールすべきモジュールはありません。

     MobilenetV1 SSDを用いたwebcameraの映像からの物体検出は以下の手順で行います。はじめに、学習済みのモデルの重みをダウンロードして、データのラベル分類をダウンロードします。python script "run_ssd_live_demo.py"を実行します。ターミナルのシェルプロンプトをpytorch-ssd-masterのディレクトリにおいて下さい。

    
    $ wget -P models https://storage.googleapis.com/models-hao/mobilenet-v1-ssd-mp-0_675.pth
    
    $ wget -P models https://storage.googleapis.com/models-hao/voc-model-labels.txt
    
    $ python run_ssd_live_demo.py mb1-ssd models/mobilenet-v1-ssd-mp-0_675.pth models/voc-model-labels.txt 
    
    

     ライブ映像が表示されて、COCOデータセットのラベルで物体検出が行われます。以下のよう形式で表示されると思います。

    object_detection_5.jpg

     MobileNetV2 SSD Liteを使用するときは、以下のように入力して下さい。

    
    $ wget -P models https://storage.googleapis.com/models-hao/mb2-ssd-lite-mp-0_686.pth
    
    $ wget -P models https://storage.googleapis.com/models-hao/voc-model-labels.txt
    
    $ python run_ssd_live_demo.py mb2-ssd-lite models/mb2-ssd-lite-mp-0_686.pth models/voc-model-labels.txt 
    
    

     上記のモデルと同様なライブ映像が表示されますが、それよりも軽くて速いです。

     写真ファイルの映像を使用するときは、コマンドの最後に検出対象の画像 example.jpg を追加します。以下のように

    
     $ python run_ssd_example.py mb2-ssd-lite models/mb2-ssd-lite-mp-0_686.pth models/voc-model-labels.txt example.jpg
    

    と実行します。


    YOLO(You Only Look Once) in PyTorch framework

     YOLO(You Only Look Once)とは、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)を用いた物体検出アルゴリズムです。現時点ではv2、v3までのアップグレードが存在します。また、Tiny YOLOというサイズの小さなバージョンも開発されています。YOLOは、SSDの物体検出アルゴリズムとは異なり、画像をバウンディングボックスで分割してクラス分類を行なっている。

     YOLO(YOLOv1)では、結果として、45FPSの処理速度を実現した。YOLO9000(YOLOv2)では、YOLOv1を改良し、9000種類の物体検出が可能になっている。COCO Datasetに対して、40FPSにおいて、23.7 mAP(mean Average Precision)を達成した。YOLOv3では、220FPSにおいて33.1mAPを実現しています。ちなみに、SSD300では、46FPSにおいて41.2mAPとなっています。

     YOLOの公式サイトはここです。このサイトには、インストールなどの手続きが説明されています。活用できるドキュメントも多数掲載されています。

     PyTorchを使用するので、TensorFlowを必要としません。その代わりに、以下の環境が必要です。

    Python 3.5 以上
    OpenCV3
    PyTorch 1.3.1

    TensorFlowを使用しないので、処理速度はかなり速くなります。なお、コマンド"wget"を使用しますので、インストールされていないときは、"wget"をインストールして下さい。($ brew install wget)

     まず、パッケージ 'pytorch-yolo-v3' をダウンロードします。'pytorch-yolo-v3'は このGitHubからダウンロードできます。 学習済み重みをダウンロードする必要があります。ここでは、'yolov3.weights'を使います。

    
    $wget https://pjreddie.com/media/files/yolov3.weights 
    
    

    サイズは248MBです。このファイルを pytorch-yolo-v3 フォルダーの下に移動してください。物体検出にはコード 'detect.py' を使います。オプションを見るために、

    
    $python detect.py -h
    
    

    と打って見てください。検出するときの様々なオプションが表示されます。以下のように入力します。

    
    $python detect.py --images imgs --det det 
    
    

    --images flag は検出対象の画像ファイルの指定をします。ここでは、 'imgs' に画像が入っています。--det は検出済みの画像ファイルを保存するフォルダーを指定します。'det' というフォルダーになっています。コマンドが正常に動作して、下のような表示が出ます。

    
    Loading network.....
    Network successfully loaded
    dog.jpg              predicted in  1.781 seconds
    Objects Detected:    bicycle truck dog
    ----------------------------------------------------------
    eagle.jpg            predicted in  1.751 seconds
    Objects Detected:    bird
    ----------------------------------------------------------
    giraffe.jpg          predicted in  1.784 seconds
    Objects Detected:    zebra giraffe giraffe
    ----------------------------------------------------------
    herd_of_horses.jpg   predicted in  1.755 seconds
    Objects Detected:    horse horse horse horse
    ----------------------------------------------------------
    img1.jpg             predicted in  1.847 seconds
    Objects Detected:    person dog
    ----------------------------------------------------------
    img2.jpg             predicted in  1.842 seconds
    Objects Detected:    train
    ----------------------------------------------------------
    img3.jpg             predicted in  1.817 seconds
    Objects Detected:    car car car car car car car truck traffic light
    ----------------------------------------------------------
    img4.jpg             predicted in  1.768 seconds
    Objects Detected:    chair chair chair clock
    ----------------------------------------------------------
    messi.jpg            predicted in  1.812 seconds
    Objects Detected:    person person person sports ball
    ----------------------------------------------------------
    person.jpg           predicted in  1.850 seconds
    Objects Detected:    person dog horse
    ----------------------------------------------------------
    
    SUMMARY
    ----------------------------------------------------------
    Task                     : Time Taken (in seconds)
    
    Reading addresses        : 0.001
    Loading batch            : 3.065
    Detection (11 images)    : 20.594
    Output Processing        : 0.000
    Drawing Boxes            : 0.190
    Average time_per_img     : 2.168
    ----------------------------------------------------------
    
    

     Tensorflowを使うときに比較して処理速度はより速いです。保存された画像の一つは

    YOLO_3.jpg

    です。carとtruckの違いを検出しています。信号機まで検出されています。

     リアルタイムでの物体検出の仕方について説明します。web cameraからの映像を取り込むコードは 'cam_demo.py' です。USB接続されたwebcamからの映像をキャプチャーしたいときは、この 'cam_demo.py' の106行が 'cap = cv2.VideoCapture(0)' となっているときは、 'cap = cv2.VideoCapture(1)' に修正してください。

    以下の通りに、シンプルにコマンドを入力します。1回目の入力で実行されないときは、2回目の入力をすると実行されます。

    
    $ python cam_demo.py
    
    FPS of the video is  0.24
    FPS of the video is  0.42
    FPS of the video is  0.56
    FPS of the video is  0.69
    FPS of the video is  0.78
    ------
    

    と表示が現れて、webcamの映像で検出された物体に枠がついた動画がリアルタイムで表示されます。動画映像は保存されません。webcamの映像の動きと連動して、ほとんど瞬間的に検出画像が切り替わります。速いです


    ページの先頭に戻る

    Caffe2 と Detectron2を用いた物体検出のページに行く

    トップページに戻る