def main(tiny): if tiny: model = YOLOv3_tiny(n_classes=80, iou_threshold=0.5, confidence_threshold=0.5) else: model = YOLOv3(n_classes=80, iou_threshold=0.5, confidence_threshold=0.5) inputs = tf.placeholder(tf.float32, [1, 416, 416, 3]) model(inputs) model_vars = tf.global_variables(scope=model.scope) if tiny: assign_ops = load_weights_tiny(model_vars, './weights/yolov3-tiny.weights') else: assign_ops = load_weights(model_vars, './weights/yolov3.weights') saver = tf.train.Saver(tf.global_variables(scope=model.scope)) config = tf.ConfigProto() config.gpu_options.allow_growth = True with tf.Session(config=config) as sess: save_path = './weights/model-tiny.ckpt' if tiny else './weights/model.ckpt' sess.run(assign_ops) saver.save(sess, save_path) print("Model Saved at \"" + save_path + "\"")
def main(mode, tiny, iou_threshold, confidence_threshold, path): class_names, n_classes = load_class_names() if tiny: model = YOLOv3_tiny(n_classes=n_classes, iou_threshold=iou_threshold, confidence_threshold=confidence_threshold) else: model = YOLOv3(n_classes=n_classes, iou_threshold=iou_threshold, confidence_threshold=confidence_threshold) inputs = tf.placeholder(tf.float32, [1, *model.input_size, 3]) detections = model(inputs) saver = tf.train.Saver(tf.global_variables(scope=model.scope)) with tf.Session() as sess: saver.restore(sess, './weights/model-tiny.ckpt' if tiny else './weights/model.ckpt') if mode == 'image': image = load_image(path, input_size=model.input_size) result = sess.run(detections, feed_dict={inputs: image}) draw_boxes(path, boxes_dict=result[0], class_names=class_names, input_size=model.input_size) return elif mode == 'video': cv2.namedWindow("Detections") video = cv2.VideoCapture(path) fourcc = int(video.get(cv2.CAP_PROP_FOURCC)) fps = video.get(cv2.CAP_PROP_FPS) frame_size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))) out = cv2.VideoWriter('./detections/video_output.mp4', fourcc, fps, frame_size) print("Video being saved at \"" + './detections/video_output.mp4' + "\"") print("Press 'q' to quit") while True: retval, frame = video.read() if not retval: break resized_frame = cv2.resize(frame, dsize=tuple((x) for x in model.input_size[::-1]), interpolation=cv2.INTER_NEAREST) result = sess.run(detections, feed_dict={inputs: [resized_frame]}) draw_boxes_frame(frame, frame_size, result, class_names, model.input_size) cv2.imshow("Detections", frame) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break out.write(frame) cv2.destroyAllWindows() video.release() return elif mode == 'webcam': while True: frame, addr = receive() frame_size = (frame.shape[1], frame.shape[0]) resized_frame = cv2.resize(frame, dsize=tuple((x) for x in model.input_size[::-1]), interpolation=cv2.INTER_NEAREST) result = sess.run(detections, feed_dict={inputs: [resized_frame]}) draw_boxes_frame(frame, frame_size, result, class_names, model.input_size) jpgstring = cv2.imencode(".jpg", frame) packet = jpgstring[1].tostring() udpServSock.sendto(packet, addr) return
def __init__(self, iou_threshold, confidence_threshold): tf.reset_default_graph() class_names, n_classes = load_class_names() self.model = YOLOv3(n_classes=n_classes, iou_threshold=iou_threshold, confidence_threshold=confidence_threshold) self.inputs = tf.placeholder( tf.float32, [1, *self.model.input_size, 3]) self.detections = self.model(self.inputs) saver = tf.train.Saver(tf.global_variables(scope=self.model.scope)) self.sess = tf.Session() saver.restore(self.sess, './weights/model.ckpt')
def build_model(self): input_layer = tf.keras.layers.Input([self.W, self.H, self.D]) feature_maps = YOLOv3(input_layer) bbox_tensors = [] for i, fm in enumerate(feature_maps): bbox_tensor = decode(fm, i) bbox_tensors.append(bbox_tensor) model = tf.keras.Model(input_layer, bbox_tensors) utils.load_weights(model, "yoloweights/yolov3.weights") #print(model.summary()) return model
def __init__(self, iou_threshold, confidence_threshold): self.class_names, self.n_classes = load_class_names() self.model = YOLOv3(n_classes=self.n_classes, iou_threshold=iou_threshold, confidence_threshold=confidence_threshold) self.inputs = tf.placeholder(tf.float32, [1, *self.model.input_size, 3]) self.detections = self.model(self.inputs) self.saver = tf.train.Saver( tf.global_variables(scope=self.model.scope)) config = tf.ConfigProto() config.gpu_options.allow_growth = True self.sess = tf.Session(config=config) self.saver.restore(self.sess, './weights/model.ckpt')
raw_label = {} with open(cfg.TEST.ANNOT_PATH,'r',encoding='utf-8') as f: for line in f: line = line.strip().split(' ') p = line[0] tag = [] for _ in line[1:]: tag.append([float(__) for __ in _.split(',')]) tag[-1] = tag[-1][:-1]+[1]+tag[-1][-1:] raw_label[p] = tag # 获取输入图像的shape n2s = read_json('./data/n2s.json') model = YOLOv3({ 'num_class':9 }) # 打印variable model.get_loss(init_call[0], ((init_call[1], init_call[4]), (init_call[2], init_call[5]), (init_call[3], init_call[6]))) # for index, x in enumerate(model.variables): # print('%s %s %s'%(str(index), str(x.name), str(x.shape))) optimizer1,_ = create_optimizer(1e-4, cfg.TRAIN.EPOCHS*size, size, 1e-7) optimizer2,_ = create_optimizer(1e-3, cfg.TRAIN.EPOCHS*size, size, 1e-6) optimizer = [optimizer1, optimizer2]
def main(mode, tiny, iou_threshold, confidence_threshold, path): rectangleColor = (0, 255, 0) frameCounter = 0 currentCarID = 0 fps = 0 carTracker = {} carNumbers = {} carLocation1 = {} carLocation2 = {} speed = [None] * 1000 class_names, n_classes = load_class_names() if tiny: model = YOLOv3_tiny(n_classes=n_classes, iou_threshold=iou_threshold, confidence_threshold=confidence_threshold) else: model = YOLOv3(n_classes=n_classes, iou_threshold=iou_threshold, confidence_threshold=confidence_threshold) inputs = tf.placeholder(tf.float32, [1, *model.input_size, 3]) detections = model(inputs) saver = tf.train.Saver(tf.global_variables(scope=model.scope)) with tf.Session() as sess: saver.restore( sess, './weights/model-tiny.ckpt' if tiny else './weights/model.ckpt') if mode == 'image': image = load_image(path, input_size=model.input_size) result = sess.run(detections, feed_dict={inputs: image}) draw_boxes( path, boxes_dict=result[0], class_names=class_names, input_size=model.input_size) return cv2.namedWindow("Detections") print("Video being saved at \"" + './detections/video_output.mp4' + "\"") print("Press 'q' to quit") pathIn = './data/PETS_2000_Frames/' files = [f for f in os.listdir(pathIn)] files.sort(key= lambda x: int(x.split('.')[0].split('_')[1])) frame=cv2.imread(pathIn+files[0]) frame_size = frame.shape[:2][::-1] fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter( './detections/video_output.mp4', fourcc, 20, frame_size) for i in range(len(files)): frame = cv2.imread(pathIn+files[i]) resized_frame = cv2.resize(frame, dsize=tuple( (x) for x in model.input_size[::-1]), interpolation=cv2.INTER_NEAREST) result = sess.run(detections, feed_dict={inputs: [resized_frame]}) draw_boxes_frame(frame, frame_size, result, class_names, model.input_size) start_time = time.time() # rc, image = video.read() if type(frame) == type(None): break frame = cv2.resize(frame, frame_size) resultImage = frame frameCounter = frameCounter + 1 carIDtoDelete = [] for carID in carTracker.keys(): trackingQuality = carTracker[carID].update(frame) if trackingQuality < 7: carIDtoDelete.append(carID) for carID in carIDtoDelete: print('Removing carID ' + str(carID) + \ ' from list of trackers.') print('Removing carID ' + str(carID) + ' previous location.') print('Removing carID ' + str(carID) + ' current location.') carTracker.pop(carID, None) carLocation1.pop(carID, None) carLocation2.pop(carID, None) if not (frameCounter % 10): gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cars = carCascade.detectMultiScale( gray, 1.1, 13, 18, (24, 24)) for (_x, _y, _w, _h) in cars: x = int(_x) y = int(_y) w = int(_w) h = int(_h) x_bar = x + 0.5 * w y_bar = y + 0.5 * h matchCarID = None for carID in carTracker.keys(): trackedPosition = carTracker[carID].get_position() t_x = int(trackedPosition.left()) t_y = int(trackedPosition.top()) t_w = int(trackedPosition.width()) t_h = int(trackedPosition.height()) t_x_bar = t_x + 0.5 * t_w t_y_bar = t_y + 0.5 * t_h if ((t_x <= x_bar <= (t_x + t_w)) and (t_y <= y_bar <= (t_y + t_h)) and (x <= t_x_bar <= (x + w)) and (y <= t_y_bar <= (y + h))): matchCarID = carID if matchCarID is None: print('Creating new tracker ' + str(currentCarID)) tracker = dlib.correlation_tracker() tracker.start_track( frame, dlib.rectangle(x, y, x + w, y + h)) carTracker[currentCarID] = tracker carLocation1[currentCarID] = [x, y, w, h] currentCarID = currentCarID + 1 for carID in carTracker.keys(): trackedPosition = carTracker[carID].get_position() t_x = int(trackedPosition.left()) t_y = int(trackedPosition.top()) t_w = int(trackedPosition.width()) t_h = int(trackedPosition.height()) carLocation2[carID] = [t_x, t_y, t_w, t_h] end_time = time.time() if not (end_time == start_time): # print("Reached at 168") fps = 1.0/(end_time - start_time) for i in carLocation1.keys(): if frameCounter % 1 == 0: [x1, y1, w1, h1] = carLocation1[i] [x2, y2, w2, h2] = carLocation2[i] # print 'previous location: ' + str(carLocation1[i]) + ', current location: ' + str(carLocation2[i]) carLocation1[i] = [x2, y2, w2, h2] # print("Reached at 177") # print 'new previous location: ' + str(carLocation1[i]) if [x1, y1, w1, h1] != [x2, y2, w2, h2]: # print("Reached at 181") if (speed[i] == None or speed[i] == 0): speed[i] = estimateSpeed( [x1, y1, w1, h1], [x2, y2, w2, h2]) # if y1 > 275 and y1 < 285: if speed[i] != None: print(str(int(speed[i])) + " km/hr") cv2.putText(resultImage, str(int(speed[i])) + " km/hr", (int(x1 + w1/2), int(y1-5)), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (255, 255, 255), 2) cv2.imshow("Detections", resultImage) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break out.write(resultImage) cv2.destroyAllWindows()