いつもお世話になっています。
前提・実現したいこと
機械学習の推論過程にて、
同一タグ名の複数検出・描画を1つに絞り込みたいと考えています。
その為、yolo.py内にある
out_classes
out_scores
out_boxes
を使って解決しようとしています。
具体的には
0. out_classes内の重複する要素を検出
0. 重複要素に対応するout_scoresから(重複種類ごとに)最大値を検出
0. out_classesにて重複要素かつout_scoresにて最大値以外を消去してリサイズ
で達成可能かと思っています。
今、2と3で行き詰っています。
どのような関数を使えば解決できますか。
元のデータが
out_classes = np.array([0, 0, 3, 3, 5]) out_scores = np.array([0.99801666, 0.7711145, 0.9962558, 0.96635705, 0.80220133]) out_boxes = np.array( [[ 8.540416, 61.232857, 76.36931, 123.20946 ], [ 10.599434, 67.45303, 75.46433, 115.5706 ], [101.44424, 137.79492, 165.17267, 201.09848 ], [ 90.32121, 60.167862, 160.19128, 126.34792 ], [ 92.46553, 210.28862, 167.8457, 296.00696 ]])
の形になっているので、
out_classes = np.array([0, 3, 5]) out_scores = np.array([0.99801666, 0.9962558, 0.80220133]) out_boxes = np.array( [[ 8.540416, 61.232857, 76.36931, 123.20946 ], [101.44424, 137.79492, 165.17267, 201.09848 ], [ 92.46553, 210.28862, 167.8457, 296.00696 ]])
の様にさせたいです。
該当のソースコード
python
1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4import numpy as np 5 6out_classes = np.array([0, 0, 3, 3, 5]) 7out_scores = np.array([0.99801666, 0.7711145, 0.9962558, 0.96635705, 0.80220133]) 8out_boxes = np.array( 9 [[ 8.540416, 61.232857, 76.36931, 123.20946 ], 10 [ 10.599434, 67.45303, 75.46433, 115.5706 ], 11 [101.44424, 137.79492, 165.17267, 201.09848 ], 12 [ 90.32121, 60.167862, 160.19128, 126.34792 ], 13 [ 92.46553, 210.28862, 167.8457, 296.00696 ]]) 14 15u, indices, inverse, counts = np.unique(out_classes, return_index = True, return_inverse = True, return_counts = True) 16 17if np.amax(counts)>=2:#---------------|重複があれば処理 18 print(out_classes) 19 print(u) 20 print(counts) 21 print("重複無し|", u[counts == 1])#|重複無しの要素 22 print("重複あり|", u[counts != 1])#|重複ありの要素 23 print(indices)#-------------------|該当数字が最初に出てくる場所 24 print(inverse) 25 26else: 27 print("重複無し")
補足情報(FW/ツールのバージョンなど)
python 3.8
numpy 1.18.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/25 00:44