記事ディレクトリ
序文
最近、IDカードの識別が関係してきたので、識別結果の名前、ID番号、住所などの属性を照合するために、dbnetをベースにした分類ブランチを追加することを考えました。プロセス中に発生したバグを記録します。
1. DBNetの複数分類
このアイデアを思いついたとき、まず Du Niang を通じて実装事例があるかどうかを確認したところ、大手の方が既に実装していることがわかったので、大手のコードを直接参照して修正しました。 DBNet マルチカテゴリ。このアイデアは、ID カード、銀行カード、その他の書類の識別に応用できます。
2 つのステップ
1. トレーニング、トレーニングモデル推論、モデル変換
上記のリンクに従ってコードを変更するか、PaddleOCR で PaddleOCR/アプリケーション/クイック ビルド カード OCR.md を作成するだけで、個人テストが実行可能です。
2. 推論モデルによる推論
ここで直接実行すると、エラーは報告されませんが、以下の図に示すように、推論結果が満足のいくものではない可能性があります (図は自分で合成したものです。情報は無視してください)。 上の図から、次のことがわかります。ボックスの位置が間違っていて
カテゴリが表示されないことを実現したいのですが、結果は以下の通りです。
では、どうすれば私の目標を達成できるでしょうか?解決策は引き続き下を向いています。
3. 解決策
1. モデルを表示する
最初はモデルの変換が間違っているのかと思い、変換したモデルを netron で確認したところ、 netron の Web ページの URL が netron モデルを開く
と次のようになります
つまり、モデルに問題があるということです。まず独自のトレーニング モデルを使用して推論し、結果が正しいかどうかを確認します。モデルが次のようであれば、
モデル変換も正しいことを意味します。そのまま下に進んでください。
2. Tools/infer/predict_det.py の変更
まず、図に示すように、約 250 行で出力を出力します。
出力結果は次のとおりです。
実行結果から、出力が 2 つになり、半分の成功を意味します。最初の出力の型が int で、2.1 で変更したコードのクラス ブランチの出力が int 型であることから、最初の出力が分類され、2 番目の出力が dbnet であることが推測できます。構造図と組み合わせると、
最初の出力をクラス ブランチとして設定し、2 番目の出力を dbent として設定できるため、次の変更が加えられます。
ここで変更が完了すると、後処理入力は先ほど変更した部分に相当しますので、後処理結果を取得した後は、上記の方法に従って表示部分を次のように変更するだけです。
( ) 関数や args.num_classes などは次のステップで説明します。
3. Utility.pyの修正
まず、次のように 2 つのパラメータを追加する必要があります。
ここでカテゴリ数やカテゴリラベルファイルのパスは任意に変更できますが、カテゴリを表示したくない場合はnum_classesのデフォルト値をNoneに変更するだけです。次に、次のように、元の結果とは異なる結果を視覚化する関数を追加する必要があります。
def draw_det_res_and_label(dt_boxes, classes, label_file_path, img):
label_list = label_file_path
labels = []
if label_list is not None:
if isinstance(label_list, str):
with open(label_list, "r+", encoding="utf-8") as f:
for line in f.readlines():
labels.append(line.replace("\n", ""))
else:
labels = label_list
if len(dt_boxes) > 0:
import cv2
index = 0
src_im = img
for box in dt_boxes:
box = box.astype(np.int32).reshape((-1, 1, 2))
cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2)
font = cv2.FONT_HERSHEY_SIMPLEX
src_im = cv2.putText(src_im, labels[classes[index]], (box[0][0][0], box[0][0][1]), font, 0.5, (255, 0, 0), 1)
index += 1
return src_im
ここは変更しても問題ありませんので、ご自身で練習してみてください。
要約する
これがこの記事の全内容です。誤解がある場合は、コメント欄で修正してください。最後に、ご貢献に改めて感謝いたします。 https://blog.csdn.net/YY007H/article/details/124491217