Faster R-CNN に基づくターゲット検出

1. 著者紹介

Yang Jinpeng、男性、2022 年大学院生、西安理工大学電子情報学部
研究方向: マシン ビジョンと人工知能
電子メール: [email protected]

Lu Zhidong 氏、男性、西安理工大学電子情報学部、2022 年度大学院生、張宏偉氏の人工知能研究グループ
研究方向: マシン ビジョンと人工知能
電子メール: [email protected]

2. Faster RCNNの基本フレームワーク

ここに画像の説明を挿入
Faster RCNN 検出部分は主に 4 つのモジュールに分割できます:
(1) conv 層。つまり、特徴抽出ネットワークを使用して特徴を抽出します。画像の特徴マップは、後続の RPN レイヤーおよびプロポーザルのために conv+relu+pooling レイヤーのセットを通じて抽出されます。
(2) RPN(地域提案ネットワーク)。つまり、領域候補ネットワークは、以前の RCNN バージョンの選択検索を置き換え、候補ボックスを生成するために使用されます。ここでのタスクには 2 つの部分があり、1 つは分類です: すべてのプリセット アンカーが正であるか負であるかを判断します (つまり、アンカー内にターゲットがあるかどうか、2 つの分類)。バウンディング ボックス回帰もあります: アンカーを正しい値に修正します。より正確な提案を得ることができます。したがって、RPNネットワークは、事前に検出の一部、つまり、ターゲットが存在するかどうかを判断し(ここでは特定のカテゴリは判断しません)、アンカーを修正してフレームをより正確にすることを行うことに相当します。
(3) RoI プーリング。つまり、RPNによって生成された提案(各ボックスの座標)を収集し、(1)の特徴マップから抽出するために使用される関心領域プーリング(SPPネットの空間ピラミッドプーリング)(対応する位置から差し引かれます)、提案特徴マップを生成し、それらを後続の完全に接続された層に送信して、分類 (具体的にはどのカテゴリ) と回帰を続行します。
(4) 分類と回帰。提案された特徴マップを使用して特定のカテゴリを計算し、別のバウンディング ボックス回帰を実行して、検出フレームの最終的な正確な位置を取得します。
ここに画像の説明を挿入

3. モデルのトレーニングとテスト

3.1 データセット

トレーニングの前にデータセットを作成し、データの準備を行う必要があります。ワイヤー送受信装置を使用してリアルタイムで画像を収集し、画像サイズは 1536*1280 でマークされ、最終的にトレーニングのためにネットワークに送信されます。検出のフィールド効果をシミュレートするために、糸の 4 つの一般的な欠陥 (ループ、ヘアボール、フォーク、ヘア欠陥) が分割され、データセットはマーキング ソフトウェアによってマークされます。注釈ファイルは VOC2007/Annotations に配置され、画像ファイルは VOC2007/JPEGImages ディレクトリに配置され、ImageSet\Main に 4 つの txt ファイルが生成されます。つまり、trainval.txt (トレーニング セットと検証セットの合計)、train.txt です。 (トレーニング セット)、val.txt (検証セット)、test.txt (テスト セット)、トレーニング セット/検証セット/テスト セットの比率は 6:2:2 です。
ここに画像の説明を挿入

3.2 環境構成

ここに画像の説明を挿入
ここに画像の説明を挿入

3.3 トレーニングパラメータ

(1) lib/datasets/pascal_voc.py を修正し、カテゴリを独自のカテゴリに変更します。
ここに画像の説明を挿入
ここで注意すべき点は、ここでのカテゴリと前のカテゴリ名はすべて小文字にするのが最善であるということです。大文字の場合、keyError エラーが報告されます。(2)実際のニーズとハードウェアに従って、コード内の関連パラメータを設定します。–num-classes、-data-path、-weights-path およびその他のパラメーターを変更する必要がある条件のトレーニング プロセスを図に示します。
ここに画像の説明を挿入
ここに画像の説明を挿入
予測結果は図に示されています
ここに画像の説明を挿入
ここに画像の説明を挿入

3.4 トレーニングパラメータ

PicoDet テスト
写真はトレーニング プロセスと予測結果を示します
ここに画像の説明を挿入
ここに画像の説明を挿入
YOLOv3 テスト
写真はトレーニング プロセスと予測結果を示します
ここに画像の説明を挿入
ここに画像の説明を挿入

3.5 コード表示

import os
import time
import torch
import torchvision.transforms as transforms
import torchvision
from PIL import Image
from matplotlib import pyplot as plt

# 获取当前路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")


# classes_coco类别信息
COCO_INSTANCE_CATEGORY_NAMES = [
    '__background__', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',
    'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'N/A', 'stop sign',
    'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
    'elephant', 'bear', 'zebra', 'giraffe', 'N/A', 'backpack', 'umbrella', 'N/A', 'N/A',
    'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
    'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket',
    'bottle', 'N/A', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
    'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
    'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'N/A', 'dining table',
    'N/A', 'N/A', 'toilet', 'N/A', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
    'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'N/A', 'book',
    'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'
]


if __name__ == "__main__":

    # 检测图片路径
    path_img = os.path.join(BASE_DIR, "bear.jpg")

    # 预处理
    preprocess = transforms.Compose([
        transforms.ToTensor(),
    ])

    input_image = Image.open(path_img).convert("RGB")
    img_chw = preprocess(input_image)

    # 加载预训练模型
    model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
    model.eval()

    # if torch.cuda.is_available():
    #     img_chw = img_chw.to('cuda')
    #     model.to('cuda')

    # 前向传播
    input_list = [img_chw]
    with torch.no_grad():
        tic = time.time()
        print("input img tensor shape:{}".format(input_list[0].shape))
        output_list = mode

3.6 問題と分析

トレーニングパラメータのデバッグと環境設定
トレーニングの前に、必要な環境を適切に設定する必要がありますが、同時に、呼び出されるライブラリのバージョンが要件を満たしているか、場合によってはそれぞれのバージョンが 1 対 1 に対応しているかどうかを確認する必要があります。図書館。トレーニング中のパラメーターのデバッグは非常に重要であり、モデルの検出効果に非常に重要な影響を与えます。モデルに対するさまざまなパラメーターの影響を調査するには、より多くの実験を試みる必要があります。
データセットの準備 データセット
の収集プロセスでは、外部の干渉を可能な限り回避すると同時に、対象物や欠陥が確実に反映されるように照明方法や明るさなどに注意を払う必要があります。検出できるものを明確に収集できます。データセットはプロジェクト全体ではそれほど重要ではないようですが、データセットが明確に収集され、正しくマークされているかどうかは、検出結果に大きな影響を与えます。

参考文献(参照用のリンクと引用)

1. リンク: [http://t.csdn.cn/JrWZ1]
2. リンク: [http://t.csdn.cn/TjQov]

おすすめ

転載: blog.csdn.net/m0_37758063/article/details/130976850