import pickle
import numpy as np
import cv2
import os
labels20 = ["aeroplane", "bicycle", "bird", "boat", "bottle",
"bus", "car", "cat", "chair", "cow", "diningtable", "dog",
"horse", "motorbike", "person", "pottedplant", "sheep", "sofa",
"train", "tvmonitor"]
# 8, 14, 15, 19
voc_models = ['yolo-full', 'yolo-tiny', 'yolo-small', # <- v1
'yolov1', 'tiny-yolov1', # <- v1.1
'tiny-yolo-voc', 'yolo-voc'] # <- v2
coco_models = ['tiny-coco', 'yolo-coco', # <- v1.1
'yolo', 'tiny-yolo'] # <- v2
coco_names = 'coco.names'
nine_names = '9k.names'
def labels(meta, FLAGS):
model = os.path.basename(meta['name'])
if model in voc_models:
print("Model has a VOC model name, loading VOC labels.")
meta['labels'] = labels20
else:
file = FLAGS.labels
if model in coco_models:
print("Model has a coco model name, loading coco labels.")
file = os.path.join(FLAGS.config, coco_names)
elif model == 'yolo9000':
print("Model has name yolo9000, loading yolo9000 labels.")
file = os.path.join(FLAGS.config, nine_names)
with open(file, 'r') as f:
meta['labels'] = list()
labs = [l.strip() for l in f.readlines()]
for lab in labs:
if lab == '----': break
meta['labels'] += [lab]
if len(meta['labels']) == 0:
meta['labels'] = labels20
def is_inp(self, name):
return name.lower().endswith(('.jpg', '.jpeg', '.png'))
def show(im, allobj, S, w, h, cellx, celly):
for obj in allobj:
a = obj[5] % S
b = obj[5] // S
cx = a + obj[1]
cy = b + obj[2]
centerx = cx * cellx
centery = cy * celly
ww = obj[3] ** 2 * w
hh = obj[4] ** 2 * h
cv2.rectangle(im,
(int(centerx - ww / 2), int(centery - hh / 2)),
(int(centerx + ww / 2), int(centery + hh / 2)),
(0, 0, 255), 2)
cv2.imshow('result', im)
cv2.waitKey()
cv2.destroyAllWindows()
def show2(im, allobj):
for obj in allobj:
cv2.rectangle(im,
(obj[1], obj[2]),
(obj[3], obj[4]),
(0, 0, 255), 2)
cv2.imshow('result', im)
cv2.waitKey()
cv2.destroyAllWindows()
_MVA = .05
def profile(self, net):
pass
# data = self.parse(exclusive = True)
# size = len(data); batch = self.FLAGS.batch
# all_inp_ = [x[0] for x in data]
# net.say('Will cycle through {} examples {} times'.format(
# len(all_inp_), net.FLAGS.epoch))
# fetch = list(); mvave = list(); names = list();
# this = net.top
# conv_lay = ['convolutional', 'connected', 'local', 'conv-select']
# while this.inp is not None:
# if this.lay.type in conv_lay:
# fetch = [this.out] + fetch
# names = [this.lay.signature] + names
# mvave = [None] + mvave
# this = this.inp
# print(names)
# total = int(); allofthem = len(all_inp_) * net.FLAGS.epoch
# batch = min(net.FLAGS.batch, len(all_inp_))
# for count in range(net.FLAGS.epoch):
# net.say('EPOCH {}'.format(count))
# for j in range(len(all_inp_)/batch):
# inp_feed = list(); new_all = list()
# all_inp = all_inp_[j*batch: (j*batch+batch)]
# for inp in all_inp:
# new_all += [inp]
# this_inp = os.path.join(net.FLAGS.dataset, inp)
# this_inp = net.framework.preprocess(this_inp)
# expanded = np.expand_dims(this_inp, 0)
# inp_feed.append(expanded)
# all_inp = new_all
# feed_dict = {net.inp : np.concatenate(inp_feed, 0)}
# out = net.sess.run(fetch, feed_dict)
# for i, o in enumerate(out):
# oi = out[i];
# dim = len(oi.shape) - 1
# ai = mvave[i];
# mi = np.mean(oi, tuple(range(dim)))
# vi = np.var(oi, tuple(range(dim)))
# if ai is None: mvave[i] = [mi, vi]
# elif 'banana ninja yada yada':
# ai[0] = (1 - _MVA) * ai[0] + _MVA * mi
# ai[1] = (1 - _MVA) * ai[1] + _MVA * vi
# total += len(inp_feed)
# net.say('{} / {} = {}%'.format(
# total, allofthem, 100. * total / allofthem))
# with open('profile', 'wb') as f:
# pickle.dump([mvave], f, protocol = -1)