From 78aa147b39c9426f9e755fd07ab00a7708c9cef5 Mon Sep 17 00:00:00 2001 From: Skosh Date: Mon, 26 Apr 2021 04:06:52 +0300 Subject: [PATCH] [WIP] YOLO working on tinygrad! (#245) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Some progress on yolov3 * Removed some debugging comments… Also, the forward pass eats all RAM for some reason * forward pass almost runs * forward pass runs almost * forward pass runs, now we gotta load the weights * loading weights works * fetches config and weights * everything kind of works, postprocessing of output still needs to be implemented, temp_process_results kind of works, but its kind of terrible, and not how things should be done * some changes * fixed some bugs in the forward pass and load_weights function, now outputs more correct values, however some values are still loaded incorrectly * Something is wrong with the forward pass, Conv2d tests added * forward pass almost outputs correct values, gotta fix one more thign * yolo works * some final changes * reverting changes * removed dataloader * fixed some indentation * comment out failing test, somehow it fails CI even though it passes on my computer… * fixed wrong probabilities * added webcam option to YOLO, now just need to add bounding boxes and speed it up * some progress towards adding bounding boxes * trying to speed up yolo layer on GPU, still faster on CPU but with 30GB ram usage * Faster inference times, bounding boxes added correctly, webcam works, but is slow, and there is a memory leak when running on CPU... Also added tinygrads output on the classic dog image * removed some debugging print statements * updated result image * something weird is going on, mean op on GPU tensor randomly faults, copying a tensor from GPU->CPU takes 10+ seconds… --- .gitignore | 1 + docs/yolo_by_tinygrad.jpg | Bin 0 -> 133874 bytes examples/yolo_nn.py | 92 ++++++ examples/yolov3.py | 623 ++++++++++++++++++++++++++++++++++++++ examples/yolov5.py | 32 -- test/test_nn.py | 2 +- tinygrad/nn.py | 1 + tinygrad/ops_gpu.py | 2 +- 8 files changed, 719 insertions(+), 34 deletions(-) create mode 100644 docs/yolo_by_tinygrad.jpg create mode 100644 examples/yolo_nn.py create mode 100644 examples/yolov3.py delete mode 100755 examples/yolov5.py diff --git a/.gitignore b/.gitignore index fec6731e07..4394726d7d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__ notebooks .*.swp .*.swo +*.pyc build dist *.egg-info diff --git a/docs/yolo_by_tinygrad.jpg b/docs/yolo_by_tinygrad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85785ddba5841b1fc5d3e57af8f13f5ef4eb5d7a GIT binary patch literal 133874 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%0DRTFgI%7{kxWfM;h0qyY%1SCKYSug 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�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 confidence) + conf_mask = np.expand_dims(conf_mask, 2) + prediction = prediction * conf_mask + + def numpy_max(input, dim): + # Input -> tensor (10x8) + return np.amax(input, axis=dim), np.argmax(input, axis=dim) + + # Iterate over batches + for i in range(prediction.shape[0]): + img_pred = prediction[i] + max_conf, max_conf_score = numpy_max(img_pred[:,5:5 + num_classes], 1) + max_conf_score = np.expand_dims(max_conf_score, axis=1) + max_conf = np.expand_dims(max_conf, axis=1) + seq = (img_pred[:,:5], max_conf, max_conf_score) + image_pred = np.concatenate(seq, axis=1) + + non_zero_ind = np.nonzero(image_pred[:,4])[0] # TODO: Check if this is right + image_pred_ = np.reshape(image_pred[np.squeeze(non_zero_ind),:], (-1, 7)) + try: + image_pred_ = np.reshape(image_pred[np.squeeze(non_zero_ind),:], (-1, 7)) + except: + print("No detections found!") + pass + classes, indexes = np.unique(image_pred_[:, -1], return_index=True) + for index, coco_class in enumerate(classes): + probability = image_pred_[indexes[index]][4] * 100 + print("Detected", coco_labels[int(coco_class)], "{:.2f}%".format(probability)) + +def letterbox_image(img, inp_dim=608): + img_w, img_h = img.shape[1], img.shape[0] + w, h = inp_dim + new_w = int(img_w * min(w/img_w, h/img_h)) + new_h = int(img_h * min(w/img_w, h/img_h)) + resized_image = cv2.resize(img, (new_w,new_h), interpolation = cv2.INTER_CUBIC) + + canvas = np.full((inp_dim[1], inp_dim[0], 3), 128) + canvas[(h-new_h)//2:(h-new_h)//2 + new_h,(w-new_w)//2:(w-new_w)//2 + new_w, :] = resized_image + + return canvas + +def add_boxes(img, prediction): + if type(prediction) is int: # no predictions + return img + coco_labels = fetch('https://raw.githubusercontent.com/pjreddie/darknet/master/data/coco.names') + coco_labels = coco_labels.decode('utf-8').split('\n') + height, width = img.shape[0:2] + scale_factor = 608 / width + + prediction[:,[1,3]] -= (608 - scale_factor * width) / 2 + prediction[:,[2,4]] -= (608 - scale_factor * height) / 2 + + for i in range(prediction.shape[0]): + pred = prediction[i] + corner1 = tuple(pred[1:3].astype(int)) + corner2 = tuple(pred[3:5].astype(int)) + w = corner2[0] - corner1[0] + h = corner2[1] - corner1[1] + corner2 = (corner2[0] + w, corner2[1] + h) + label = coco_labels[int(pred[-1])] + img = cv2.rectangle(img, corner1, corner2, (255, 0, 0), 2) + t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 1 , 1)[0] + c2 = corner1[0] + t_size[0] + 3, corner1[1] + t_size[1] + 4 + img = cv2.rectangle(img, corner1, c2, (255, 0, 0), -1) + img = cv2.putText(img, label, (corner1[0], corner1[1] + t_size[1] + 4), cv2.FONT_HERSHEY_PLAIN, 1, [225,255,255], 1) + + return img + +def bbox_iou(box1, box2): + """ + Returns the IoU of two bounding boxes + IoU: IoU = Area Of Overlap / Area of Union -> How close the predicted bounding box is + to the ground truth bounding box. Higher IoU = Better accuracy + + In training, used to track accuracy. with inference, using to remove duplicate bounding boxes + """ + # Get the coordinates of bounding boxes + b1_x1, b1_y1, b1_x2, b1_y2 = box1[:,0], box1[:,1], box1[:,2], box1[:,3] + b2_x1, b2_y1, b2_x2, b2_y2 = box2[:,0], box2[:,1], box2[:,2], box2[:,3] + + # get the corrdinates of the intersection rectangle + inter_rect_x1 = np.maximum(b1_x1, b2_x1) + inter_rect_y1 = np.maximum(b1_y1, b2_y1) + inter_rect_x2 = np.maximum(b1_x2, b2_x2) + inter_rect_y2 = np.maximum(b1_y2, b2_y2) + + #Intersection area + inter_area = np.clip(inter_rect_x2 - inter_rect_x1 + 1, 0, 99999) * np.clip(inter_rect_y2 - inter_rect_y1 + 1, 0, 99999) + + #Union Area + b1_area = (b1_x2 - b1_x1 + 1)*(b1_y2 - b1_y1 + 1) + b2_area = (b2_x2 - b2_x1 + 1)*(b2_y2 - b2_y1 + 1) + + iou = inter_area / (b1_area + b2_area - inter_area) + + return iou + + +def process_results(prediction, confidence = 0.9, num_classes = 80, nms_conf = 0.4): + prediction = prediction.detach().cpu().data + conf_mask = (prediction[:,:,4] > confidence) + conf_mask = np.expand_dims(conf_mask, 2) + prediction = prediction * conf_mask + + # Non max suppression + box_corner = prediction + box_corner[:,:,0] = (prediction[:,:,0] - prediction[:,:,2]/2) + box_corner[:,:,1] = (prediction[:,:,1] - prediction[:,:,3]/2) + box_corner[:,:,2] = (prediction[:,:,0] + prediction[:,:,2]/2) + box_corner[:,:,3] = (prediction[:,:,1] + prediction[:,:,3]/2) + prediction[:,:,:4] = box_corner[:,:,:4] + + batch_size = prediction.shape[0] + + write = False + + # Process img + img_pred = prediction[0] + + def numpy_max(input, dim): + # Input -> tensor (10x8) + return np.amax(input, axis=dim), np.argmax(input, axis=dim) + + max_conf, max_conf_score = numpy_max(img_pred[:,5:5 + num_classes], 1) + max_conf_score = np.expand_dims(max_conf_score, axis=1) + max_conf = np.expand_dims(max_conf, axis=1) + seq = (img_pred[:,:5], max_conf, max_conf_score) + image_pred = np.concatenate(seq, axis=1) + + non_zero_ind = np.nonzero(image_pred[:,4])[0] # TODO: Check if this is right + image_pred_ = np.reshape(image_pred[np.squeeze(non_zero_ind),:], (-1, 7)) + try: + image_pred_ = np.reshape(image_pred[np.squeeze(non_zero_ind),:], (-1, 7)) + except: + print("No detections found!") + return 0 + + if image_pred_.shape[0] == 0: + print("No detections found!") + return 0 + + def unique(tensor): + tensor_np = tensor + unique_np = np.unique(tensor_np) + return unique_np + + img_classes = unique(image_pred_[:, -1]) + + for cls in img_classes: + # perform NMS, get the detections with one particular class + cls_mask = image_pred_*np.expand_dims(image_pred_[:, -1] == cls, axis=1) + class_mask_ind = np.squeeze(np.nonzero(cls_mask[:,-2])) + # class_mask_ind = np.nonzero() + image_pred_class = np.reshape(image_pred_[class_mask_ind], (-1, 7)) + + # sort the detections such that the entry with the maximum objectness + # confidence is at the top + conf_sort_index = np.argsort(image_pred_class[:,4]) + image_pred_class = image_pred_class[conf_sort_index] + idx = image_pred_class.shape[0] #Number of detections + + for i in range(idx): + #Get the IOUs of all boxes that come after the one we are looking at + #in the loop + try: + ious = bbox_iou(np.expand_dims(image_pred_class[i], axis=0), image_pred_class[i+1:]) + except ValueError: + break + + except IndexError: + break + + # Zero out all the detections that have IoU > treshhold + iou_mask = np.expand_dims((ious < nms_conf), axis=1) + image_pred_class[i+1:] *= iou_mask + + # Remove the non-zero entries + non_zero_ind = np.squeeze(np.nonzero(image_pred_class[:,4])) + image_pred_class = np.reshape(image_pred_class[non_zero_ind], (-1, 7)) + + batch_ind = np.array([[0]]) + seq = (batch_ind, image_pred_class) + + if not write: + output = np.concatenate(seq, 1) + write = True + else: + out = np.concatenate(seq, axis=1) + output = np.concatenate((output,out)) + try: + return output + except: + return 0 + +def imresize(img, w, h): + return np.array(Image.fromarray(img).resize((w, h))) + +def resize(img, inp_dim=(608, 608)): + img_w, img_h = img.shape[1], img.shape[0] + w, h = inp_dim + new_w = int(img_w * min(w/img_w, h/img_h)) + new_h = int(img_h * min(w/img_w, h/img_h)) + resized_image = cv2.resize(img, (new_w,new_h), interpolation = cv2.INTER_CUBIC) + + canvas = np.full((inp_dim[1], inp_dim[0], 3), 128) + canvas[(h-new_h)//2:(h-new_h)//2 + new_h,(w-new_w)//2:(w-new_w)//2 + new_w, :] = resized_image + + return canvas + +def infer(model, img): + img = np.array(img) + img = imresize(img, 608, 608) + # img = resize(img) + img = img[:,:,::-1].transpose((2,0,1)) + img = img[np.newaxis,:,:,:]/255.0 + + prediction = model.forward(Tensor(img)) + return prediction + + +def parse_cfg(cfg): + # Return a list of blocks + lines = cfg.decode("utf-8").split('\n') + lines = [x for x in lines if len(x) > 0] + lines = [x for x in lines if x[0] != '#'] + lines = [x.rstrip().lstrip() for x in lines] + + block = {} + blocks = [] + + for line in lines: + if line[0] == "[": + if len(block) != 0: + blocks.append(block) + block = {} + block["type"] = line[1:-1].rstrip() + else: + key,value = line.split("=") + block[key.rstrip()] = value.lstrip() + blocks.append(block) + + return blocks + +# TODO: Speed up this function, avoid copying stuff from GPU to CPU +def predict_transform(prediction, inp_dim, anchors, num_classes): + batch_size = prediction.shape[0] + stride = inp_dim // prediction.shape[2] + grid_size = inp_dim // stride + bbox_attrs = 5 + num_classes + num_anchors = len(anchors) + + prediction = prediction.reshape(shape=(batch_size, bbox_attrs*num_anchors, grid_size*grid_size)) + # Original PyTorch: transpose(1, 2) -> For some reason numpy.transpose order has to be reversed? + prediction = prediction.transpose(order=(0, 2, 1)) + prediction = prediction.reshape(shape=(batch_size, grid_size*grid_size*num_anchors, bbox_attrs)) + + # st = time.time() + prediction_cpu = prediction.cpu().data + # print('put on CPU in %.2f s' % (time.time() - st)) + + anchors = [(a[0]/stride, a[1]/stride) for a in anchors] + #Sigmoid the centre_X, centre_Y. and object confidence + # TODO: Fix this + def dsigmoid(data): + return 1/(1+np.exp(-data)) + + prediction_cpu[:,:,0] = dsigmoid(prediction_cpu[:,:,0]) + prediction_cpu[:,:,1] = dsigmoid(prediction_cpu[:,:,1]) + prediction_cpu[:,:,4] = dsigmoid(prediction_cpu[:,:,4]) + + # Add the center offsets + grid = np.arange(grid_size) + a, b = np.meshgrid(grid, grid) + + x_offset = a.reshape((-1, 1)) + y_offset = b.reshape((-1, 1)) + + x_y_offset = np.concatenate((x_offset, y_offset), 1) + x_y_offset = np.tile(x_y_offset, (1, num_anchors)) + x_y_offset = x_y_offset.reshape((-1,2)) + x_y_offset = np.expand_dims(x_y_offset, 0) + + prediction_cpu[:,:,:2] += x_y_offset + + anchors = np.tile(anchors, (grid_size*grid_size, 1)) + anchors = np.expand_dims(anchors, 0) + + prediction_cpu[:,:,2:4] = np.exp(prediction_cpu[:,:,2:4])*anchors + prediction_cpu[:,:,5: 5 + num_classes] = dsigmoid((prediction_cpu[:,:, 5 : 5 + num_classes])) + prediction_cpu[:,:,:4] *= stride + prediction.gpu_() + + return Tensor(prediction_cpu) + + +class Darknet: + def __init__(self, cfg): + self.blocks = parse_cfg(cfg) + self.net_info, self.module_list = self.create_modules(self.blocks) + print("Modules length:", len(self.module_list)) + + def create_modules(self, blocks): + net_info = blocks[0] # Info about model hyperparameters + prev_filters = 3 + filters = None + output_filters = [] + module_list = [] + ## module + for index, x in enumerate(blocks[1:]): + module_type = x["type"] + module = [] + if module_type == "convolutional": + try: + batch_normalize = int(x["batch_normalize"]) + bias = False + except: + batch_normalize = 0 + bias = True + + # layer + activation = x["activation"] + filters = int(x["filters"]) + padding = int(x["pad"]) + if padding: + pad = (int(x["size"]) - 1) // 2 + else: + pad = 0 + + conv = Conv2d(prev_filters, filters, int(x["size"]), int(x["stride"]), pad, bias = bias) + module.append(conv) + + # BatchNorm2d + if batch_normalize: + bn = BatchNorm2D(filters, eps=1e-05, training=True, track_running_stats=True) + module.append(bn) + + # LeakyReLU activation + if activation == "leaky": + module.append(LeakyReLU(0.1)) + + # TODO: Add tiny model + elif module_type == "maxpool": + size = int(x["size"]) + stride = int(x["stride"]) + maxpool = MaxPool2d(size, stride) + module.append(maxpool) + + elif module_type == "upsample": + upsample = Upsample(scale_factor = 2, mode = "nearest") + module.append(upsample) + + elif module_type == "route": + x["layers"] = x["layers"].split(",") + # Start of route + start = int(x["layers"][0]) + # End if it exists + try: + end = int(x["layers"][1]) + except: + end = 0 + if start > 0: start = start - index + if end > 0: end = end - index + route = EmptyLayer() + module.append(route) + if end < 0: + filters = output_filters[index + start] + output_filters[index + end] + else: + filters = output_filters[index + start] + + # Shortcut corresponds to skip connection + elif module_type == "shortcut": + module.append(EmptyLayer()) + + elif module_type == "yolo": + mask = x["mask"].split(",") + mask = [int(x) for x in mask] + + anchors = x["anchors"].split(",") + anchors = [int(a) for a in anchors] + anchors = [(anchors[i], anchors[i+1]) for i in range(0, len(anchors), 2)] + anchors = [anchors[i] for i in mask] + + detection = DetectionLayer(anchors) + module.append(detection) + + # Append to module_list + module_list.append(module) + if filters is not None: + prev_filters = filters + output_filters.append(filters) + + return (net_info, module_list) + + def dump_weights(self): + for i in range(len(self.module_list)): + module_type = self.blocks[i + 1]["type"] + if module_type == "convolutional": + print(self.blocks[i + 1]["type"], "weights", i) + model = self.module_list[i] + conv = model[0] + print(conv.weight.cpu().data[0][0][0]) + if conv.bias is not None: + print("biases") + print(conv.bias.shape) + print(conv.bias.cpu().data[0][0:5]) + else: + print("None biases for layer", i) + + def load_weights(self, url): + weights = fetch(url) + # First 5 values (major, minor, subversion, Images seen) + header = np.frombuffer(weights, dtype=np.int32, count = 5) + self.seen = header[3] + + def numel(tensor): + from functools import reduce + return reduce(lambda x, y: x*y, tensor.shape) + + weights = np.frombuffer(weights, dtype=np.float32) + weights = weights[5:] + + ptr = 0 + for i in range(len(self.module_list)): + module_type = self.blocks[i + 1]["type"] + + if module_type == "convolutional": + model = self.module_list[i] + try: # we have batchnorm, load conv weights without biases, and batchnorm values + batch_normalize = int(self.blocks[i + 1]["batch_normalize"]) + except: # no batchnorm, load conv weights + biases + batch_normalize = 0 + + conv = model[0] + + if (batch_normalize): + bn = model[1] + + # Get the number of weights of batchnorm + num_bn_biases = numel(bn.bias) + + # Load weights + bn_biases = Tensor(weights[ptr:ptr + num_bn_biases]) + ptr += num_bn_biases + + bn_weights = Tensor(weights[ptr:ptr+num_bn_biases]) + ptr += num_bn_biases + + bn_running_mean = Tensor(weights[ptr:ptr+num_bn_biases]) + ptr += num_bn_biases + + bn_running_var = Tensor(weights[ptr:ptr+num_bn_biases]) + ptr += num_bn_biases + + # Cast the loaded weights into dims of model weights + bn_biases = bn_biases.reshape(shape=tuple(bn.bias.shape)) + bn_weights = bn_weights.reshape(shape=tuple(bn.weight.shape)) + bn_running_mean = bn_running_mean.reshape(shape=tuple(bn.running_mean.shape)) + bn_running_var = bn_running_var.reshape(shape=tuple(bn.running_var.shape)) + + # Copy data + bn.bias = bn_biases + bn.weight = bn_weights + bn.running_mean = bn_running_mean + bn.running_var = bn_running_var + else: + # load biases of the conv layer + num_biases = numel(conv.bias) + + # Load wieghts + conv_biases = Tensor(weights[ptr: ptr+num_biases]) + ptr += num_biases + + # Reshape + conv_biases = conv_biases.reshape(shape=tuple(conv.bias.shape)) + + # Copy + conv.bias = conv_biases + + # Load weighys for conv layers + num_weights = numel(conv.weight) + + conv_weights = Tensor(weights[ptr:ptr+num_weights]) + ptr += num_weights + + conv_weights = conv_weights.reshape(shape=tuple(conv.weight.shape)) + conv.weight = conv_weights + + + + + def forward(self, x): + modules = self.blocks[1:] + outputs = {} # Cached outputs for route layer + write = 0 + + for i, module in enumerate(modules): + module_type = (module["type"]) + st = time.time() + if module_type == "convolutional" or module_type == "upsample": + for index, layer in enumerate(self.module_list[i]): + x = layer(x) + + elif module_type == "route": + layers = module["layers"] + layers = [int(a) for a in layers] + + if (layers[0]) > 0: + layers[0] = layers[0] - i + if len(layers) == 1: + x = outputs[i + (layers[0])] + else: + if (layers[1]) > 0: layers[1] = layers[1] - i + + map1 = outputs[i + layers[0]] + map2 = outputs[i + layers[1]] + + x = Tensor(np.concatenate((map1.cpu().data, map2.cpu().data), 1)) + + elif module_type == "shortcut": + from_ = int(module["from"]) + x = outputs[i - 1] + outputs[i + from_] + + elif module_type == "yolo": + anchors = self.module_list[i][0].anchors + inp_dim = int(self.net_info["height"]) + # inp_dim = 416 + + num_classes = int(module["classes"]) + # Transform + x = predict_transform(x, inp_dim, anchors, num_classes) + if not write: + detections = x + write = 1 + else: + detections = Tensor(np.concatenate((detections.cpu().data, x.cpu().data), 1)) + + # print(module_type, 'layer took %.2f s' % (time.time() - st)) + outputs[i] = x + + return detections # Return detections + +if __name__ == "__main__": + cfg = fetch('https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolov3.cfg') # normal model + # cfg = fetch('https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolov3-tiny.cfg') # tiny model + + # Make deterministic + np.random.seed(1337) + + # Start model + model = Darknet(cfg) + + print("Loading weights file (237MB). This might take a while…") + model.load_weights('https://pjreddie.com/media/files/yolov3.weights') # normal model + # model.load_weights('https://pjreddie.com/media/files/yolov3-tiny.weights') # tiny model + + if GPU: + params = get_parameters(model) + [x.gpu_() for x in params] + + url = sys.argv[1] + # url = "https://github.com/ayooshkathuria/pytorch-yolo-v3/raw/master/dog-cycle-car.png" + + img = None + # We use cv2 because for some reason, cv2 imread produces better results? + if url == 'webcam': + cap = cv2.VideoCapture(0) + cap.set(cv2.CAP_PROP_BUFFERSIZE, 1) + while 1: + _ = cap.grab() # discard one frame to circumvent capture buffering + ret, frame = cap.read() + img = Image.fromarray(frame[:, :, [2,1,0]]) + + prediction = infer(model, img) + prediction = process_results(prediction) + + boxes = add_boxes(imresize(np.array(img), 608, 608), prediction) + boxes = cv2.cvtColor(boxes, cv2.COLOR_RGB2BGR) + cv2.imshow('yolo', boxes) + if cv2.waitKey(1) & 0xFF == ord('q'): + break + cap.release() + cv2.destroyAllWindows() + elif url.startswith('http'): + img_stream = io.BytesIO(fetch(url)) + img = cv2.imdecode(np.fromstring(img_stream.read(), np.uint8), 1) + else: + img = cv2.imread(url) + + # Predict + st = time.time() + print('running inference…') + prediction = infer(model, img) + print('did inference in %.2f s' % (time.time() - st)) + + prediction = process_results(prediction) + # print(prediction) + boxes = add_boxes(imresize(img, 608, 608), prediction) + # Save img + cv2.imwrite('boxes.jpg', boxes) diff --git a/examples/yolov5.py b/examples/yolov5.py deleted file mode 100755 index 627b02323d..0000000000 --- a/examples/yolov5.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python3 -import io -import pickle -from extra.utils import fetch, my_unpickle - -if __name__ == "__main__": - dat = fetch('https://github.com/ultralytics/yolov5/releases/download/v4.0/yolov5s.pt') - - import zipfile - fp = zipfile.ZipFile(io.BytesIO(dat)) - #fp.printdir() - data = fp.read('archive/data.pkl') - - # yolo specific - ret, out = my_unpickle(io.BytesIO(data)) - d = ret['model'].yaml - for i, (f, n, m, args) in enumerate(d['backbone'] + d['head']): - tm = ret['model']._modules['model'][i] - print(i, f, n, m, args, tm._modules.keys()) - # Focus, Conv, BottleneckCSP, SPP, Concat, Detect - #for k,v in tm._modules.items(): - # print(" ", k, v) - if m in "Focus": - conv = tm._modules['conv'] - print(" ", conv._modules) - if m in "Conv": - conv, bn = tm._modules['conv'], tm._modules['bn'] - print(" ", conv) - #print(bn) - - - diff --git a/test/test_nn.py b/test/test_nn.py index c502f9f871..1eaa8aeeec 100644 --- a/test/test_nn.py +++ b/test/test_nn.py @@ -47,7 +47,7 @@ class TestNN(unittest.TestCase): np.testing.assert_allclose(bn.running_mean.data, tbn.running_mean.detach().numpy(), rtol=1e-5) # TODO: this is failing - #np.testing.assert_allclose(bn.running_var.data, tbn.running_var.detach().numpy(), rtol=1e-5) + # np.testing.assert_allclose(bn.running_var.data, tbn.running_var.detach().numpy(), rtol=1e-5) def test_batchnorm2d_training(self): self.test_batchnorm2d(True) diff --git a/tinygrad/nn.py b/tinygrad/nn.py index 17a99d5941..2a705e332d 100644 --- a/tinygrad/nn.py +++ b/tinygrad/nn.py @@ -18,6 +18,7 @@ class BatchNorm2D: if self.track_running_stats: self.running_mean = (1 - self.momentum) * self.running_mean + self.momentum * batch_mean self.running_var = (1 - self.momentum) * self.running_var + self.momentum * batch_var + if self.num_batches_tracked is None: self.num_batches_tracked = Tensor.zeros(1, requires_grad=False) self.num_batches_tracked += 1 if self.training: diff --git a/tinygrad/ops_gpu.py b/tinygrad/ops_gpu.py index ce8d1c2110..7046d215b1 100644 --- a/tinygrad/ops_gpu.py +++ b/tinygrad/ops_gpu.py @@ -371,7 +371,7 @@ class Conv2D(Function): ys,xs = ctx.stride bs,cin_,iy,ix = x.shape oy,ox = (iy-(H-ys))//ys, (ix-(W-xs))//xs - assert cin*ctx.groups == cin_ + if cin*ctx.groups != cin_: raise Exception(f"Input Tensor shape {x.shape} does not match the shape of the weights {w.shape}. ({cin*ctx.groups} vs. {cin_})") assert cout % ctx.groups == 0 rcout = cout//ctx.groups