3.7.6. renom.utility.load package

get_appropriate_directory ( directory )

ディレクトリの最後が’/’で終了しているか確認する

パラメータ: directory ( str ) – 一つのディレクトリパス
Return str:

‘/’で終了している一つのディレクトリパス

Example:
>>> from utilities import get_appropriate_directory
>>> get_appropriate_directory('hogehoge')
'hogehoge/'
>>> get_appropriate_directory('NOT_EXISTING_DIRECTORY')
'input existing directory'
convert_class_to_onehot ( class_list )

クラスリストからワンホットベクトルを生成するために使用

パラメータ: class_list ( list ) – ソートされた全てのクラス名
Return list:

インデックスがclass_listのインデックスに対応するのワンホットベクトルのリスト

Example:
>>> from utilities import convert_class_to_onehot
>>> class_list = ['apple', 'pen', 'pinapple']
>>> convert_class_to_onehot(class_list)
[[0, 0, 1], [0, 1, 0], [1, 0, 0]]
is_image ( filepath )

ファイルパスの拡張子が画像ファイルか確認スルために使用

パラメータ: filepath ( str ) – 特定の画像ファイルを伝えるパス
Return boolean:
Example:
>>> from utilities import is_image
>>> img_filepath, noimg_filepath = './hogehoge.jpg', './foobar.txt'
>>> is_image(img_filepath)
True
>>> is_image(noimg_filepath)
False
get_class_from_onehot ( onehot_vector , class_list )

ワンホットベクトルに対応する名前を取得するために使用

パラメータ:
  • onehot_vector ( list ( of int ) ) – “ワンホットベクト
  • class_list ( list ( of str ) ) – 全てのクラス名のソートされたリスト
Return str:

クラス名

Example:
>>> from utilities import get_class_from_onehot
>>> onehot_vectors = [[0, 1, 0], [1, 0, 0]]
>>> class_list = ['apple', 'pen', 'pinapple']
>>> transformed = [get_class_from_onehot(onehot, class_list) for onehot in onehot_vectors]
>>> transformed
['pen', 'pinapple']
convert_minmax_to_wh ( bndbox )

[x_min, y_min, W(width), H(height)]を[X(x_center), Y(y_center), W(width), H(height)]に変換するために使用

パラメータ: bndbox ( list ( of int ) ) – [x_min, y_min, x_max, y_max]で表現されるバウンディングボックス
Return trans_list (of double):
Example:
>>> from utililies import convert_minmax_to_wh
>>> bndbox = [10, 20, 100, 80]
>>> transformed = convert_minmax_to_wh(bndbox)
>>> transformed
[55.0, 50.0, 90.0, 60.0]
convert_wh_to_minmax ( bndbox )

[X(x_center), Y(y_center), W(width), H(height)]を[x_min, y_min, x_max, y_max]に変換するために使用

パラメータ: bndbox ( list ( of double ) ) – [X(x_center), Y(y_center), W(width), H(height)]で表現されるバウンディングボックス
Return list (of int):
Example:
>>> bndbox = [30.5, 60.0, 50.0, 80.0]
>>> transformed = convert_wh_to_minmax(bndbox)
>>> transformed
[5, 20, 55, 100]
convert_coco_to_minmax ( bndbox )

[xmin, ymin, W, H]を[xmin, ymin, xmax, ymax]に変換スルために使用

パラメータ: bndbox ( list ( of double ) ) – [x_min, y_min, W(width), H(height)]で表現される
Return list (of int):
Example:
>>> from utilities import convert_coco_to_minmax
>>> bndbox = [10.0, 20.0, 40.0, 60.0]
>>> transformed = convert_coco_to_minmax(bndbox)
>>> transformed
[10, 20, 30, 50]
get_num_images ( Y_list )

Y_listの数を取得するために使用

パラメータ: Y_list ( list ) – load_for_detection.load_for_detectionの結果
Result int:

Y_list内の画像数

Example:
>>> from utilities import get_num_images
>>> Y_list = [{'data': [{'bndbox': [1, 111, 58, 169], 'name': 'tvmonitor'},
                        {'bndbox': [371, 160, 476, 404], 'name': 'person'},
                        {'bndbox': [227, 99, 365, 404], 'name': 'person'},
                        {'bndbox': [146, 207, 263, 366], 'name': 'chair'}],
               'filepath': 'VOC2012/2007_001717.jpg'},
              {'data': [{'bndbox': [153, 22, 355, 342], 'name': 'sheep'}],
               'filepath': 'VOC2012/2007_001872.jpg'}]
>>> get_num_images(Y_list)
2
get_max_num_objects ( Y_list )

画像内のオブジェクトの最大数を取得するために使用

パラメータ: Y_list ( list: ) – load_for_detection.load_for_detectionの結果
Return int:

一つの画像内のオブジェクト最大数

Example:
>>> from utilities import get_max_num_objects
>>> Y_list = [{'data': [{'bndbox': [1, 111, 58, 169], 'name': 'tvmonitor'},
                    {'bndbox': [371, 160, 476, 404], 'name': 'person'},
                    {'bndbox': [227, 99, 365, 404], 'name': 'person'},
                    {'bndbox': [146, 207, 263, 366], 'name': 'chair'}],
               'filepath': 'VOC2012/2007_001717.jpg'},
              {'data': [{'bndbox': [153, 22, 355, 342], 'name': 'sheep'}],
               'filepath': 'VOC2012/2007_001872.jpg'}]
>>> get_max_num_objects(Y_list)
4
get_class_list ( Y_list )

Y_list内のアルファベット順(昇順)でソートされた名前を取得するために使用これはレガシーコードです

パラメータ: Y_list ( list ) – detection.load_for_detectionの結果です
Return list:

Y_list内の昇順でソートされたクラス名のリスト

Example:
>>> from utilities import get_class_list
>>> Y_list = [{'data': [{'bndbox': [1, 111, 58, 169], 'name': 'tvmonitor'},
                        {'bndbox': [371, 160, 476, 404], 'name': 'person'},
                        {'bndbox': [227, 99, 365, 404], 'name': 'person'},
                        {'bndbox': [146, 207, 263, 366], 'name': 'chair'}],
               'filepath': 'VOC2012/2007_001717.jpg'},
              {'data': [{'bndbox': [153, 22, 355, 342], 'name': 'sheep'}],
               'filepath': 'VOC2012/2007_001872.jpg'}]
>>> class_list = get_class_list(Y_list)
>>> class_list
['chair', 'person', 'sheep', 'tvmonitor']
convert_name_to_onehot ( Y_list )

Y_list(load_for_detectionの結果)内の全ての名前をワンホットデータに変換するために使用

パラメータ: Y_list ( list ) – load_for_detection.load_for_detectionの結果
Return dictionary:

キーは名前であり、値は対応するワンホットベクトルである

Example:
>>> from utilities import convert_name_to_onehot
>>> Y_list = [{'data': [{'bndbox': [1, 111, 58, 169], 'name': 'tvmonitor'},
                        {'bndbox': [371, 160, 476, 404], 'name': 'person'},
                        {'bndbox': [227, 99, 365, 404], 'name': 'person'},
                        {'bndbox': [146, 207, 263, 366], 'name': 'chair'}],
               'filepath': 'VOC2012/2007_001717.jpg'},
              {'data': [{'bndbox': [153, 22, 355, 342], 'name': 'sheep'}],
               'filepath': 'VOC2012/2007_001872.jpg'}]
>>> result = convert_name_to_onehot(Y_list)
>>> result
{'chair': [0, 0, 0, 1], 'person', [0, 0, 1, 0], 'sheep': [0, 1, 0, 0], 'tvmonitor': [1, 0, 0, 0]}
make_ndarray ( Y_list , class_length )

Use to make ndarray from the result of load_for_detection

パラメータ:
  • Y_list ( list ) – load_for_detection.load_for_detectionの結果
  • class_length ( int ) – クラスリストの長さ
Return tuple(np.ndarray, int):
element1: ndarray([[X Y W H 0 0 0 1 0 X Y W H 0 0 0 0 1 ...], ...]])
要素2: int
Example:
>>> import numpy as np
>>> from utilities import make_ndarray, get_max_num_length
>>> Y_list = [[{'bndbox': convert_minmax_to_wh([1, 111, 58, 169]), 'name': [1, 0, 0, 0]},
               {'bndbox': trans_minmax_to_WH([371, 160, 476, 404]), 'name': [0, 0, 1, 0]},
               {'bndbox': trans_minmax_to_WH([227, 99, 365, 404]), 'name': [0, 0, 1, 0]},
               {'bndbox': trans_minmax_to_WH([146, 207, 263, 366]), 'name': [0, 0, 0, 1]}],
              [{'bndbox': trans_minmax_to_WH([153, 22, 355, 342]), 'name': [0, 1, 0, 0}]]
>>> class_length = get_max_num_length(Y_list)
>>> result = make_ndarray(Y_list, class_length)
>>> result
array([[  29.5,  140. ,   57. ,   58. ,    1. ,    0. ,    0. ,    0. ,
         423.5,  282. ,  105. ,  244. ,    0. ,    0. ,    1. ,    0. ,
         296. ,  251.5,  138. ,  305. ,    0. ,    0. ,    1. ,    0. ,
         204.5,  286.5,  117. ,  159. ,    0. ,    0. ,    0. ,    1. ],
       [ 254. ,  182. ,  202. ,  320. ,    0. ,    1. ,    0. ,    0. ,
           0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,
           0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,
           0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ]])
generate_colors_from_name_list ( class_list )

キーと値が、名前と色の辞書を生成するために使用

パラメータ: class_list ( list ) – ソートされた全てのクラス名
Return dict: {name1: rgb1, name2: rgb2, ...}
Example:
>>> from utilities import generate_colors_from_name_list
>>> class_list = ['apple', 'pen', 'pinapple']
>>> rgb_dict = generate_colors_from_name_list(class_list)
>>> rgb_dict
{'apple': (105, 130, 29), 'pen': (246, 195, 65), 'pinapple': (197, 195, 92)}
(values are randomly chosen)
imshow_with_bndboxes ( image , names , bndboxes , save_name=None )

対応するバウンディングボックスとオブジェクト名を使用して画像を表示するために使用

パラメータ:
  • image ( np.ndarray ) – 画像のnumpy array
  • names ( list ) – クラス名のリスト
  • bndboxes ( list ) – バウンディングボックスのリスト(= [ [xmin, ymin, xmax, ymax], ... ]
  • save_name ( str or None ) – 作成された画像を保存するためのファイルパス
Return None:
Example:
>>> import numpy as np
>>> from PIL import Image
>>> from utilities import imshow_with_bndboxes
>>> from load_for_detection import load_from_xml
>>> xmlpath = '../../test/test_dataset_test_load_for_detection_data/2007_000027.xml'
>>> data = load_from_xml(xmlpath)
>>> image = np.array(Image.open(data['filepath']))
>>> names = [dct['name'] for dct in data['data']]
>>> bndboxes = [dct['bndbox'] for dct in data['data']]
>>> save_name = '2007_000027_with_bndboxes.jpg'
>>> imshow_with_bndboxes(image, names, bndboxes, save_name)
imshow_batch ( images , shape=None , output_path='./output.png' )

複数の画像を表示するために使用

パラメータ:
  • images ( list or np.ndarray ) – list (list(image1, image2, ...)) or np.ndarray (np.ndarray[numofimage][height][width][colors])
  • shape ( list ) – [垂直画像の数, 水平画像の数]を表す2次元のリスト
Return None:
Example:
>>> import numpy as np
>>> from PIL import Image
>>> from utilities import imshow_batch
>>> image_path = ['../../doc/img_autodoc/image0001.jpg',
                  '../../doc/img_autodoc/image0002.jpg',
                  ...
                  '../../doc/img_autodoc/image0016.jpg']
>>> images = [np.array(Image.open(path)) for path in image_path]
>>> shape = [4, 4]
>>> output_path = 'concatenated.jpg'
>>> imshow_batch(images, shape, output_path)
read_bndbox_from_ndarray ( ndarray , num_class )

Use to read bounding boxes from a given ndarray.

パラメータ:
  • ndarray ( ndarray ) – result from make_ndarray
  • num_class ( int ) – 全てのクラスの数
Return tuple(list, list):
要素1: バウンディングボックス ( = [boxes_im1, boxes_im2, ...] )
要素2: ワンホットベクトル ( = [onehot_im1, onehot_im2, ...])
Example:
>>> import numpy as np
>>> from utilities import read_bndbox_from_ndarray
>>> ndarray = np.array([[  29.5,  140. ,   57. ,   58. ,    1. ,    0. ,    0. ,    0. ,
                          423.5,  282. ,  105. ,  244. ,    0. ,    0. ,    1. ,    0. ,
                          296. ,  251.5,  138. ,  305. ,    0. ,    0. ,    1. ,    0. ,
                          204.5,  286.5,  117. ,  159. ,    0. ,    0. ,    0. ,    1. ],
                        [ 254. ,  182. ,  202. ,  320. ,    0. ,    1. ,    0. ,    0. ,
                            0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,
                            0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,
                            0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ]])
>>> num_class = 4
>>> bounding_boxes, onehot_vectors = read_bndbox_from_ndarray(ndarray, num_class)
>>> bounding_boxes
[[[  29.5,  140. ,   57. ,   58. ],
  [ 423.5,  282. ,  105. ,  244. ],
  [ 296. ,  251.5,  138. ,  305. ],
  [ 204.5,  286.5,  117. ,  159. ]],
 [[ 254. ,  182. ,  202. ,  320. ]]]
 >>> onehot_vectors
 >>> [[[1, 0, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1]],
      [[0, 1, 0, 0]]]
build_yolo_labels ( y , total_w , total_h , cells , classes )

画像ごとのオブジェクトリストを画像*cells*cells*(5+クラス)のマトリックスに変換するために使用画像内の各セルは、1つのオブジェクトに対してのみラベルづけすることができる

“5” represents: objectness (0 or 1) and X Y W H

パラメータ:
  • y ( np.ndarray ) – np.ndarray ([バッチ][横幅][高さ])
  • total_w ( int ) – yの行の長さ
  • total_h ( int ) – yの列の長さ
  • cells ( int ) – グリッドのサイズ
  • classes ( int ) – クラスリストの長さ
Return np.ndarray:

[batch][cells][cells][1 + 4 + classes]

Example:
>>> Input: 2 objects in first image, 5 classes
>>> y[0] = X Y W H 0 1 0 0 0 X Y W H 0 0 0 1 0
    |---1st object----||---2nd object---|
>>> Output: 7 * 7 cells * (1 + 4 + 5) per image
>>> truth[0,0,0] = 1 X Y W H 0 1 0 0 0
    (cell 0,0 has first object)
>>> truth[0,0,1] = 0 0 0 0 0 0 0 0 0 0
    (cell 0,1 has no object)