From d6bce232e013a62923612037b213e5d527cbed0f Mon Sep 17 00:00:00 2001 From: baiyuxiu <1525645606@qq.cpm> Date: Sat, 4 May 2019 19:49:27 +0800 Subject: [PATCH 1/4] fix bugs related to train --- data/coco.py | 2 +- layers/modules/multibox_loss.py | 6 ++++-- train.py | 8 ++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/data/coco.py b/data/coco.py index 765531761..f6e7d0dc1 100644 --- a/data/coco.py +++ b/data/coco.py @@ -83,7 +83,7 @@ class COCODetection(data.Dataset): in the target (bbox) and transforms it. """ - def __init__(self, root, image_set='trainval35k', transform=None, + def __init__(self, root, image_set='train2014', transform=None, target_transform=COCOAnnotationTransform(), dataset_name='MS COCO'): sys.path.append(osp.join(root, COCO_API)) from pycocotools.coco import COCO diff --git a/layers/modules/multibox_loss.py b/layers/modules/multibox_loss.py index fb49cf439..8acff30f7 100644 --- a/layers/modules/multibox_loss.py +++ b/layers/modules/multibox_loss.py @@ -94,8 +94,8 @@ def forward(self, predictions, targets): loss_c = log_sum_exp(batch_conf) - batch_conf.gather(1, conf_t.view(-1, 1)) # Hard Negative Mining - loss_c[pos] = 0 # filter out pos boxes for now loss_c = loss_c.view(num, -1) + loss_c[pos] = 0 # filter out pos boxes for now _, loss_idx = loss_c.sort(1, descending=True) _, idx_rank = loss_idx.sort(1) num_pos = pos.long().sum(1, keepdim=True) @@ -111,7 +111,9 @@ def forward(self, predictions, targets): # Sum of losses: L(x,c,l,g) = (Lconf(x, c) + αLloc(x,l,g)) / N - N = num_pos.data.sum() + N = num_pos.data.sum().double() + loss_l = loss_l.double() + loss_c = loss_c.double() loss_l /= N loss_c /= N return loss_l, loss_c diff --git a/train.py b/train.py index 427dd9244..889f143de 100644 --- a/train.py +++ b/train.py @@ -180,15 +180,15 @@ def train(): loss.backward() optimizer.step() t1 = time.time() - loc_loss += loss_l.data[0] - conf_loss += loss_c.data[0] + loc_loss += loss_l.data + conf_loss += loss_c.data if iteration % 10 == 0: print('timer: %.4f sec.' % (t1 - t0)) - print('iter ' + repr(iteration) + ' || Loss: %.4f ||' % (loss.data[0]), end=' ') + print('iter ' + repr(iteration) + ' || Loss: %.4f ||' % (loss.data), end=' ') if args.visdom: - update_vis_plot(iteration, loss_l.data[0], loss_c.data[0], + update_vis_plot(iteration, loss_l.data, loss_c.data, iter_plot, epoch_plot, 'append') if iteration != 0 and iteration % 5000 == 0: From bc14c46c391e08764f0eccbdfb3635d9dc1661dd Mon Sep 17 00:00:00 2001 From: baiyuxiu <1525645606@qq.cpm> Date: Sun, 5 May 2019 14:09:02 +0800 Subject: [PATCH 2/4] fixes some bugs --- .infer.py.swp | Bin 0 -> 12288 bytes .test.py.swp | Bin 0 -> 16384 bytes data/1 | 182 ++++++++++++++++++++++++++++++++++ data/1.jpg | Bin 0 -> 70995 bytes data/coco.py | 1 - data/config.py | 2 +- infer.py | 31 ++++++ layers/functions/detection.py | 2 +- train.py | 8 +- 9 files changed, 221 insertions(+), 5 deletions(-) create mode 100644 .infer.py.swp create mode 100644 .test.py.swp create mode 100644 data/1 create mode 100644 data/1.jpg create mode 100644 infer.py diff --git a/.infer.py.swp b/.infer.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..02578228198369f3a7fcd0aa5c7403917bf2339b GIT binary patch literal 12288 zcmeI2KX21O7{;%i+fu>81cx)kmQpuKfuc&8Dh7m5#oq1vl zOo*=l8*I!lvG4`T%)nzi5iLk%s2D1}Cp|ge`Mu}f_jg&M+-~>Ltvh_vzsk^78T*!f ze)6if$nITaEH0(q(=x4Ioz(WHYk^topA=HRdoed$HzxG+sm+QYUe{@)3XJ}_oC1gd z5jYirWwz1pbt{XObA?|x|L|09w3rAG0U|&IhyW2F0z`la5P`Erz~&3=B~o6TrOjvk z!XN!?NF5O%0z`la5CI}U1c(3;AOb{y2oM1xa0Us;kgSOAs|8Km>>Y5g-CYfCvx)B0vO)!2cuA;%IrHQ|qS6dblPzRF>OVag(b+M>^mm zIaLK8%TcLV6&=eo94Wt0Nj6rlSI-GP;8^eKL=IIm)r2+k{&+Zi+LTD#=U3+ix4QSs)EtybJyUMC+3NV~Top-amD}&|Zin}dhctUXP^rm^qvg&mf^i>Z z8V&P$s>9ulE^P3DB!REugiLlzJwj0?blX-L+pZ%zJS`IujHEHjcuYrJh*Ty@fbW2} zg-E1Mg=lZ#XDeEBZcYW!aHqqw(&nZ0LusWS7-CNP^Zd%z31=cL&sxBaDds39%E6FB^-9xEzb)3n=4y;t2IS-QWYdVY6x-(RY)9_`IC zU>UFsSOzQumI2FvWxz6E8L$jk1}p=Xf&W4VM9A33q1O-Sg&)8F*YE#-_yA+S1%3(q z6!;11|zE0DpUeu^$0G@Co3}_c8Wkpah-;9s_>zIAnn? zunPS1F~)uY{0#US@Ksoz*XRlM;ZGS z@ER}!M!*p00#5>e!ePdDfhjNq9N@#iU*5&o&w+0MBjA(3Ki%f z6_jC;cw?Ca)0xPR`GAk|QZikKk3<$I!lws8;dXRIG~psYRJv$Wm(X7@loq|eb8|}; zGN3_REp?Ixex9a9m+!gGMz43>>2ik}IGuwozmq1i%hBpalB9*!ZIp{dP11bkcFcGy zJWfT(Ls1AlT9!vi;X1dXBvMlu>e?td++WPR0q-qN!08n8bcy2pS%`a|UTkm#J9}(y0=z6D zFT)}~lr6$Ng>~chJ8&z#^xe z097O*=DYIZSaVO@PhQyFxp!xak9O~kUgWoScF7?@qaTG!UB4AyWVIn=_I;5@VjN5N z%qtW1N+~5gq*rasBuGMLHYa&Hqdf=<6T5g7KA=ShJ3zgu5UJ|TEHnksg@Q_@vQe|%NKvQ6iS#FF9LjuEN3OnCoE45{d4-4IOD}Z< zLxgJu8bWNjDh)htf)OwB68kebxI8O3^{nGWlAbn!i9ESA5bTi%_T-=4noE4CX9ZuU zxm446C`*+$I}W4V#Nbv(9R@c?QotdRiDK%>vj}O%gK`Lplp_CMUL#D%yxY?L#+Uv^ro5FmsjXS5v}i~rO0OPf9S`7<3E#YI`9hdEwjDs$@KwqPDS z5p;R;%@SL(YPL?bAnVaPgG@sG9+n_fEAuk9C}b*E0DAw&>#x3kjpuIx6F>ql0VJ~t*vm3t8L$jk1}p=X z0n318z%pPNunbrRECc^X4A7ZQ^V1%kcKZ4kGrVi#cNfR^XE@jKeWyC#oF4(1gQ@}E z-j%m}cGa9zYw?9c4i^Wr`e&9dcl*7kaT4CYj*pFNosK!!(#p_ruI{>ZMpd2Z>S8*Z M!wHo+B=53+0a2;ymjD0& literal 0 HcmV?d00001 diff --git a/data/1 b/data/1 new file mode 100644 index 000000000..fff298f94 --- /dev/null +++ b/data/1 @@ -0,0 +1,182 @@ +from .config import HOME +import os +import os.path as osp +import sys +import torch +import torch.utils.data as data +import torchvision.transforms as transforms +import cv2 +import numpy as np + +COCO_ROOT = osp.join(HOME, 'data/coco/') +IMAGES = 'images' +ANNOTATIONS = 'annotations' +COCO_API = 'PythonAPI' +INSTANCES_SET = 'instances_{}.json' +COCO_CLASSES = ('person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', + 'train', 'truck', 'boat', 'traffic light', 'fire', 'hydrant', + 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', + 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', + 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', + 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', + 'kite', 'baseball bat', 'baseball glove', 'skateboard', + 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', + 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', + 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', + 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', + 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', + 'keyboard', 'cell phone', 'microwave oven', 'toaster', 'sink', + 'refrigerator', 'book', 'clock', 'vase', 'scissors', + 'teddy bear', 'hair drier', 'toothbrush') + + +print("************" + str(len(COCO_CLASSES))) + +def get_label_map(label_file): + label_map = {} + labels = open(label_file, 'r') + for line in labels: + ids = line.split(',') + label_map[int(ids[0])] = int(ids[1]) + return label_map + + +class COCOAnnotationTransform(object): + """Transforms a COCO annotation into a Tensor of bbox coords and label index + Initilized with a dictionary lookup of classnames to indexes + """ + def __init__(self): + self.label_map = get_label_map(osp.join(COCO_ROOT, 'coco_labels.txt')) + + def __call__(self, target, width, height): + """ + Args: + target (dict): COCO target json annotation as a python dict + height (int): height + width (int): width + Returns: + a list containing lists of bounding boxes [bbox coords, class idx] + """ + scale = np.array([width, height, width, height]) + res = [] + for obj in target: + if 'bbox' in obj: + bbox = obj['bbox'] + bbox[2] += bbox[0] + bbox[3] += bbox[1] + label_idx = self.label_map[obj['category_id']] - 1 + final_box = list(np.array(bbox)/scale) + final_box.append(label_idx) + res += [final_box] # [xmin, ymin, xmax, ymax, label_idx] + else: + print("no bbox problem!") + + return res # [[xmin, ymin, xmax, ymax, label_idx], ... ] + + +class COCODetection(data.Dataset): + """`MS Coco Detection `_ Dataset. + Args: + root (string): Root directory where images are downloaded to. + set_name (string): Name of the specific set of COCO images. + transform (callable, optional): A function/transform that augments the + raw images` + target_transform (callable, optional): A function/transform that takes + in the target (bbox) and transforms it. + """ + + def __init__(self, root, image_set='train2014', transform=None, + target_transform=COCOAnnotationTransform(), dataset_name='MS COCO'): + sys.path.append(osp.join(root, COCO_API)) + from pycocotools.coco import COCO + self.root = osp.join(root, IMAGES, image_set) + self.coco = COCO(osp.join(root, ANNOTATIONS, + INSTANCES_SET.format(image_set))) + self.ids = list(self.coco.imgToAnns.keys()) + self.transform = transform + self.target_transform = target_transform + self.name = dataset_name + + def __getitem__(self, index): + """ + Args: + index (int): Index + Returns: + tuple: Tuple (image, target). + target is the object returned by ``coco.loadAnns``. + """ + im, gt, h, w = self.pull_item(index) + return im, gt + + def __len__(self): + return len(self.ids) + + def pull_item(self, index): + """ + Args: + index (int): Index + Returns: + tuple: Tuple (image, target, height, width). + target is the object returned by ``coco.loadAnns``. + """ + img_id = self.ids[index] + target = self.coco.imgToAnns[img_id] + ann_ids = self.coco.getAnnIds(imgIds=img_id) + + target = self.coco.loadAnns(ann_ids) + path = osp.join(self.root, self.coco.loadImgs(img_id)[0]['file_name']) + assert osp.exists(path), 'Image path does not exist: {}'.format(path) + img = cv2.imread(osp.join(self.root, path)) + height, width, _ = img.shape + if self.target_transform is not None: + target = self.target_transform(target, width, height) + if self.transform is not None: + target = np.array(target) + img, boxes, labels = self.transform(img, target[:, :4], + target[:, 4]) + # to rgb + img = img[:, :, (2, 1, 0)] + + target = np.hstack((boxes, np.expand_dims(labels, axis=1))) + return torch.from_numpy(img).permute(2, 0, 1), target, height, width + + def pull_image(self, index): + '''Returns the original image object at index in PIL form + + Note: not using self.__getitem__(), as any transformations passed in + could mess up this functionality. + + Argument: + index (int): index of img to show + Return: + cv2 img + ''' + img_id = self.ids[index] + path = self.coco.loadImgs(img_id)[0]['file_name'] + return cv2.imread(osp.join(self.root, path), cv2.IMREAD_COLOR) + + def pull_anno(self, index): + '''Returns the original annotation of image at index + + Note: not using self.__getitem__(), as any transformations passed in + could mess up this functionality. + + Argument: + index (int): index of img to get annotation of + Return: + list: [img_id, [(label, bbox coords),...]] + eg: ('001718', [('dog', (96, 13, 438, 332))]) + ''' + img_id = self.ids[index] + ann_ids = self.coco.getAnnIds(imgIds=img_id) + return self.coco.loadAnns(ann_ids) + + def __repr__(self): + fmt_str = 'Dataset ' + self.__class__.__name__ + '\n' + fmt_str += ' Number of datapoints: {}\n'.format(self.__len__()) + fmt_str += ' Root Location: {}\n'.format(self.root) + tmp = ' Transforms (if any): ' + fmt_str += '{0}{1}\n'.format(tmp, self.transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) + tmp = ' Target Transforms (if any): ' + fmt_str += '{0}{1}'.format(tmp, self.target_transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) + return fmt_str diff --git a/data/1.jpg b/data/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd3c47c5735a206e8c1a0a2b9d6b440014b9f74f GIT binary patch literal 70995 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 jYOzYm=A8p!k)HLCr#K�-y2L=K*W~0LVvd(vSbyBD&GJ literal 0 HcmV?d00001 diff --git a/data/coco.py b/data/coco.py index f6e7d0dc1..4b331c905 100644 --- a/data/coco.py +++ b/data/coco.py @@ -29,7 +29,6 @@ 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush') - def get_label_map(label_file): label_map = {} labels = open(label_file, 'r') diff --git a/data/config.py b/data/config.py index 8999622cc..e16659c7f 100644 --- a/data/config.py +++ b/data/config.py @@ -27,7 +27,7 @@ } coco = { - 'num_classes': 201, + 'num_classes': 81, 'lr_steps': (280000, 360000, 400000), 'max_iter': 400000, 'feature_maps': [38, 19, 10, 5, 3, 1], diff --git a/infer.py b/infer.py new file mode 100644 index 000000000..7af5911d6 --- /dev/null +++ b/infer.py @@ -0,0 +1,31 @@ +#do the infer + +import torch +import cv2 +from ssd import build_ssd + +num_classes = 201 +image = cv2.imread("data/1.jpg") +weights = "weights/ssd300_COCO_10000.pth" + +#cv2.imshow("fafda", image) +#cv2.waitKey() + +#def infer() +def get_features_hook(self, input, output): + print("hooks ", output.data.cpu().numpy().shape) + +if __name__ == '__main__': + net = build_ssd('test', 300, num_classes) + image = cv2.resize(image, (300, 300)) + image = torch.Tensor(image) + image = image.permute(2, 0, 1) + image = image.unsqueeze(0) + #load weights to the net + #print(net.load_state_dict(torch.load(weights))) + net.load_state_dict(torch.load(weights)) + #handle = net.ssd[0].register_forward_hook(get_features_hook) + _ = net(image) +# handle.remove() +#get the specific layer value +# print(net) diff --git a/layers/functions/detection.py b/layers/functions/detection.py index 0d1ef8d30..acdcef065 100644 --- a/layers/functions/detection.py +++ b/layers/functions/detection.py @@ -46,7 +46,7 @@ def forward(self, loc_data, conf_data, prior_data): for cl in range(1, self.num_classes): c_mask = conf_scores[cl].gt(self.conf_thresh) scores = conf_scores[cl][c_mask] - if scores.dim() == 0: + if scores.size(0) == 0: continue l_mask = c_mask.unsqueeze(1).expand_as(decoded_boxes) boxes = decoded_boxes[l_mask].view(-1, 4) diff --git a/train.py b/train.py index 889f143de..15dee06f6 100644 --- a/train.py +++ b/train.py @@ -150,19 +150,23 @@ def train(): batch_iterator = iter(data_loader) for iteration in range(args.start_iter, cfg['max_iter']): if args.visdom and iteration != 0 and (iteration % epoch_size == 0): + epoch += 1 update_vis_plot(epoch, loc_loss, conf_loss, epoch_plot, None, 'append', epoch_size) # reset epoch loss counters loc_loss = 0 conf_loss = 0 - epoch += 1 if iteration in cfg['lr_steps']: step_index += 1 adjust_learning_rate(optimizer, args.gamma, step_index) # load train data - images, targets = next(batch_iterator) + try: + images, targets = next(batch_iterator) + except StopIteration: + batch_iterator = iter(data_loader) + images, targets = next(batch_iterator) if args.cuda: images = Variable(images.cuda()) From d66cb7ef4531e3b73eb1ef16770325abdc7a0860 Mon Sep 17 00:00:00 2001 From: baiyuxiu <1525645606@qq.cpm> Date: Sun, 5 May 2019 18:29:14 +0800 Subject: [PATCH 3/4] fixed some bugs --- .test.py.swp | Bin 16384 -> 0 bytes data/1 | 182 -------------------------------- data/2.jpg | Bin 0 -> 60963 bytes debug.sh | 1 + infer.py | 12 +-- layers/box_utils.py | 130 +++++++++++------------ layers/functions/1 | 4 + layers/functions/detection.py | 79 ++++++++++---- layers/functions/nms.py | 7 ++ "layers/functions/\357\274\201" | 7 ++ 10 files changed, 146 insertions(+), 276 deletions(-) delete mode 100644 .test.py.swp delete mode 100644 data/1 create mode 100644 data/2.jpg create mode 100644 debug.sh create mode 100644 layers/functions/1 create mode 100644 layers/functions/nms.py create mode 100644 "layers/functions/\357\274\201" diff --git a/.test.py.swp b/.test.py.swp deleted file mode 100644 index e4bf1727317e87d006c4077647a00f54977e3105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHN&yVCr6|O8l0ttZ#goKcQ%8roTOpm8~He#g-9ci=4y;t2IS-QWYdVY6x-(RY)9_`IC zU>UFsSOzQumI2FvWxz6E8L$jk1}p=Xf&W4VM9A33q1O-Sg&)8F*YE#-_yA+S1%3(q z6!;11|zE0DpUeu^$0G@Co3}_c8Wkpah-;9s_>zIAnn? zunPS1F~)uY{0#US@Ksoz*XRlM;ZGS z@ER}!M!*p00#5>e!ePdDfhjNq9N@#iU*5&o&w+0MBjA(3Ki%f z6_jC;cw?Ca)0xPR`GAk|QZikKk3<$I!lws8;dXRIG~psYRJv$Wm(X7@loq|eb8|}; zGN3_REp?Ixex9a9m+!gGMz43>>2ik}IGuwozmq1i%hBpalB9*!ZIp{dP11bkcFcGy zJWfT(Ls1AlT9!vi;X1dXBvMlu>e?td++WPR0q-qN!08n8bcy2pS%`a|UTkm#J9}(y0=z6D zFT)}~lr6$Ng>~chJ8&z#^xe z097O*=DYIZSaVO@PhQyFxp!xak9O~kUgWoScF7?@qaTG!UB4AyWVIn=_I;5@VjN5N z%qtW1N+~5gq*rasBuGMLHYa&Hqdf=<6T5g7KA=ShJ3zgu5UJ|TEHnksg@Q_@vQe|%NKvQ6iS#FF9LjuEN3OnCoE45{d4-4IOD}Z< zLxgJu8bWNjDh)htf)OwB68kebxI8O3^{nGWlAbn!i9ESA5bTi%_T-=4noE4CX9ZuU zxm446C`*+$I}W4V#Nbv(9R@c?QotdRiDK%>vj}O%gK`Lplp_CMUL#D%yxY?L#+Uv^ro5FmsjXS5v}i~rO0OPf9S`7<3E#YI`9hdEwjDs$@KwqPDS z5p;R;%@SL(YPL?bAnVaPgG@sG9+n_fEAuk9C}b*E0DAw&>#x3kjpuIx6F>ql0VJ~t*vm3t8L$jk1}p=X z0n318z%pPNunbrRECc^X4A7ZQ^V1%kcKZ4kGrVi#cNfR^XE@jKeWyC#oF4(1gQ@}E z-j%m}cGa9zYw?9c4i^Wr`e&9dcl*7kaT4CYj*pFNosK!!(#p_ruI{>ZMpd2Z>S8*Z M!wHo+B=53+0a2;ymjD0& diff --git a/data/1 b/data/1 deleted file mode 100644 index fff298f94..000000000 --- a/data/1 +++ /dev/null @@ -1,182 +0,0 @@ -from .config import HOME -import os -import os.path as osp -import sys -import torch -import torch.utils.data as data -import torchvision.transforms as transforms -import cv2 -import numpy as np - -COCO_ROOT = osp.join(HOME, 'data/coco/') -IMAGES = 'images' -ANNOTATIONS = 'annotations' -COCO_API = 'PythonAPI' -INSTANCES_SET = 'instances_{}.json' -COCO_CLASSES = ('person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', - 'train', 'truck', 'boat', 'traffic light', 'fire', 'hydrant', - 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', - 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', - 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', - 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', - 'kite', 'baseball bat', 'baseball glove', 'skateboard', - 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', - 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', - 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', - 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', - 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', - 'keyboard', 'cell phone', 'microwave oven', 'toaster', 'sink', - 'refrigerator', 'book', 'clock', 'vase', 'scissors', - 'teddy bear', 'hair drier', 'toothbrush') - - -print("************" + str(len(COCO_CLASSES))) - -def get_label_map(label_file): - label_map = {} - labels = open(label_file, 'r') - for line in labels: - ids = line.split(',') - label_map[int(ids[0])] = int(ids[1]) - return label_map - - -class COCOAnnotationTransform(object): - """Transforms a COCO annotation into a Tensor of bbox coords and label index - Initilized with a dictionary lookup of classnames to indexes - """ - def __init__(self): - self.label_map = get_label_map(osp.join(COCO_ROOT, 'coco_labels.txt')) - - def __call__(self, target, width, height): - """ - Args: - target (dict): COCO target json annotation as a python dict - height (int): height - width (int): width - Returns: - a list containing lists of bounding boxes [bbox coords, class idx] - """ - scale = np.array([width, height, width, height]) - res = [] - for obj in target: - if 'bbox' in obj: - bbox = obj['bbox'] - bbox[2] += bbox[0] - bbox[3] += bbox[1] - label_idx = self.label_map[obj['category_id']] - 1 - final_box = list(np.array(bbox)/scale) - final_box.append(label_idx) - res += [final_box] # [xmin, ymin, xmax, ymax, label_idx] - else: - print("no bbox problem!") - - return res # [[xmin, ymin, xmax, ymax, label_idx], ... ] - - -class COCODetection(data.Dataset): - """`MS Coco Detection `_ Dataset. - Args: - root (string): Root directory where images are downloaded to. - set_name (string): Name of the specific set of COCO images. - transform (callable, optional): A function/transform that augments the - raw images` - target_transform (callable, optional): A function/transform that takes - in the target (bbox) and transforms it. - """ - - def __init__(self, root, image_set='train2014', transform=None, - target_transform=COCOAnnotationTransform(), dataset_name='MS COCO'): - sys.path.append(osp.join(root, COCO_API)) - from pycocotools.coco import COCO - self.root = osp.join(root, IMAGES, image_set) - self.coco = COCO(osp.join(root, ANNOTATIONS, - INSTANCES_SET.format(image_set))) - self.ids = list(self.coco.imgToAnns.keys()) - self.transform = transform - self.target_transform = target_transform - self.name = dataset_name - - def __getitem__(self, index): - """ - Args: - index (int): Index - Returns: - tuple: Tuple (image, target). - target is the object returned by ``coco.loadAnns``. - """ - im, gt, h, w = self.pull_item(index) - return im, gt - - def __len__(self): - return len(self.ids) - - def pull_item(self, index): - """ - Args: - index (int): Index - Returns: - tuple: Tuple (image, target, height, width). - target is the object returned by ``coco.loadAnns``. - """ - img_id = self.ids[index] - target = self.coco.imgToAnns[img_id] - ann_ids = self.coco.getAnnIds(imgIds=img_id) - - target = self.coco.loadAnns(ann_ids) - path = osp.join(self.root, self.coco.loadImgs(img_id)[0]['file_name']) - assert osp.exists(path), 'Image path does not exist: {}'.format(path) - img = cv2.imread(osp.join(self.root, path)) - height, width, _ = img.shape - if self.target_transform is not None: - target = self.target_transform(target, width, height) - if self.transform is not None: - target = np.array(target) - img, boxes, labels = self.transform(img, target[:, :4], - target[:, 4]) - # to rgb - img = img[:, :, (2, 1, 0)] - - target = np.hstack((boxes, np.expand_dims(labels, axis=1))) - return torch.from_numpy(img).permute(2, 0, 1), target, height, width - - def pull_image(self, index): - '''Returns the original image object at index in PIL form - - Note: not using self.__getitem__(), as any transformations passed in - could mess up this functionality. - - Argument: - index (int): index of img to show - Return: - cv2 img - ''' - img_id = self.ids[index] - path = self.coco.loadImgs(img_id)[0]['file_name'] - return cv2.imread(osp.join(self.root, path), cv2.IMREAD_COLOR) - - def pull_anno(self, index): - '''Returns the original annotation of image at index - - Note: not using self.__getitem__(), as any transformations passed in - could mess up this functionality. - - Argument: - index (int): index of img to get annotation of - Return: - list: [img_id, [(label, bbox coords),...]] - eg: ('001718', [('dog', (96, 13, 438, 332))]) - ''' - img_id = self.ids[index] - ann_ids = self.coco.getAnnIds(imgIds=img_id) - return self.coco.loadAnns(ann_ids) - - def __repr__(self): - fmt_str = 'Dataset ' + self.__class__.__name__ + '\n' - fmt_str += ' Number of datapoints: {}\n'.format(self.__len__()) - fmt_str += ' Root Location: {}\n'.format(self.root) - tmp = ' Transforms (if any): ' - fmt_str += '{0}{1}\n'.format(tmp, self.transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) - tmp = ' Target Transforms (if any): ' - fmt_str += '{0}{1}'.format(tmp, self.target_transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) - return fmt_str diff --git a/data/2.jpg b/data/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cace078d8aa33b68f0c3ee03caceb24997a71443 GIT binary patch literal 60963 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 0.01] - idx = idx[-top_k:] # indices of the top-k largest vals - xx1 = boxes.new() - yy1 = boxes.new() - xx2 = boxes.new() - yy2 = boxes.new() - w = boxes.new() - h = boxes.new() - - # keep = torch.Tensor() - count = 0 - while idx.numel() > 0: - i = idx[-1] # index of current largest val - # keep.append(i) - keep[count] = i - count += 1 - if idx.size(0) == 1: - break - idx = idx[:-1] # remove kept element from view - # load bboxes of next highest vals - torch.index_select(x1, 0, idx, out=xx1) - torch.index_select(y1, 0, idx, out=yy1) - torch.index_select(x2, 0, idx, out=xx2) - torch.index_select(y2, 0, idx, out=yy2) - # store element-wise max with next highest score - xx1 = torch.clamp(xx1, min=x1[i]) - yy1 = torch.clamp(yy1, min=y1[i]) - xx2 = torch.clamp(xx2, max=x2[i]) - yy2 = torch.clamp(yy2, max=y2[i]) - w.resize_as_(xx2) - h.resize_as_(yy2) - w = xx2 - xx1 - h = yy2 - yy1 - # check sizes of xx1 and xx2.. after each iteration - w = torch.clamp(w, min=0.0) - h = torch.clamp(h, min=0.0) - inter = w*h - # IoU = i / (area(a) + area(b) - i) - rem_areas = torch.index_select(area, 0, idx) # load remaining areas) - union = (rem_areas - inter) + area[i] - IoU = inter/union # store result in iou - # keep only elements with an IoU <= overlap - idx = idx[IoU.le(overlap)] - return keep, count +#def nms(boxes, scores, overlap=0.5, top_k=200): +# """Apply non-maximum suppression at test time to avoid detecting too many +# overlapping bounding boxes for a given object. +# Args: +# boxes: (tensor) The location preds for the img, Shape: [num_priors,4]. +# scores: (tensor) The class predscores for the img, Shape:[num_priors]. +# overlap: (float) The overlap thresh for suppressing unnecessary boxes. +# top_k: (int) The Maximum number of box preds to consider. +# Return: +# The indices of the kept boxes with respect to num_priors. +# """ +# +# keep = scores.new(scores.size(0)).zero_().long() +# if boxes.numel() == 0: +# return keep +# x1 = boxes[:, 0] +# y1 = boxes[:, 1] +# x2 = boxes[:, 2] +# y2 = boxes[:, 3] +# area = torch.mul(x2 - x1, y2 - y1) +# v, idx = scores.sort(0) # sort in ascending order +# # I = I[v >= 0.01] +# idx = idx[-top_k:] # indices of the top-k largest vals +# xx1 = boxes.new() +# yy1 = boxes.new() +# xx2 = boxes.new() +# yy2 = boxes.new() +# w = boxes.new() +# h = boxes.new() +# +# # keep = torch.Tensor() +# count = 0 +# while idx.numel() > 0: +# i = idx[-1] # index of current largest val +# # keep.append(i) +# keep[count] = i +# count += 1 +# if idx.size(0) == 1: +# break +# idx = idx[:-1] # remove kept element from view +# # load bboxes of next highest vals +# torch.index_select(x1, 0, idx, out=xx1) +# torch.index_select(y1, 0, idx, out=yy1) +# torch.index_select(x2, 0, idx, out=xx2) +# torch.index_select(y2, 0, idx, out=yy2) +# # store element-wise max with next highest score +# xx1 = torch.clamp(xx1, min=x1[i]) +# yy1 = torch.clamp(yy1, min=y1[i]) +# xx2 = torch.clamp(xx2, max=x2[i]) +# yy2 = torch.clamp(yy2, max=y2[i]) +# w.resize_as_(xx2) +# h.resize_as_(yy2) +# w = xx2 - xx1 +# h = yy2 - yy1 +# # check sizes of xx1 and xx2.. after each iteration +# w = torch.clamp(w, min=0.0) +# h = torch.clamp(h, min=0.0) +# inter = w*h +# # IoU = i / (area(a) + area(b) - i) +# rem_areas = torch.index_select(area, 0, idx) # load remaining areas) +# union = (rem_areas - inter) + area[i] +# IoU = inter/union # store result in iou +# # keep only elements with an IoU <= overlap +# idx = idx[IoU.le(overlap)] +# return keep, count diff --git a/layers/functions/1 b/layers/functions/1 new file mode 100644 index 000000000..553c2ae9b --- /dev/null +++ b/layers/functions/1 @@ -0,0 +1,4 @@ +#to do + + + diff --git a/layers/functions/detection.py b/layers/functions/detection.py index acdcef065..50421a844 100644 --- a/layers/functions/detection.py +++ b/layers/functions/detection.py @@ -1,8 +1,25 @@ import torch from torch.autograd import Function -from ..box_utils import decode, nms +from ..box_utils import decode from data import voc as cfg +class paper_box(object): + def __init__(self, index, x, y, box): + self.index = index + self.x = x + self.y = y + self.box = box +def box_iou(a, b): + if a.box[2] < b.box[0] or a.box[0] > b.box[2]: + return 0 + if a.box[1] > b.box[3] or a.box[3] < b.box[1]: + return 0 + width = min(a.box[2], b.box[2]) - max(a.box[0], b.box[0]) + height = min(a.box[3], b.box[3]) - max(a.box[1], a.box[1]) + iou = width * height + a_area = (a.box[2] - a.box[0]) * (a.box[3] - a.box[1]) + b_area = (b.box[2] - b.box[0]) * (b.box[3] - b.box[1]) + return (iou / (a_area + b_area - iou)) class Detect(Function): """At test time, Detect is the final layer of SSD. Decode location preds, @@ -36,27 +53,43 @@ def forward(self, loc_data, conf_data, prior_data): output = torch.zeros(num, self.num_classes, self.top_k, 5) conf_preds = conf_data.view(num, num_priors, self.num_classes).transpose(2, 1) + #next we will specific the exact layer and its output + #we get the all predicted boxes and its confidence + decoded_boxes = decode(loc_data[0], prior_data, self.variance) + conf_data = conf_data[0] + loc_data = loc_data[0] + all_boxes = torch.cat((decoded_boxes, conf_data), 1) +# for i in range(self.num_classes): +# index = [] +# for j in range(len(loc_data)): +# index.append(j) +# #in the specific class, we will do something specifical +# for j in range(len(loc_data)): +# for k in range(len(loc_data) - j): +# if conf_data[j][i] < conf_data[k][i]: +# index[j] = + return all_boxes # Decode predictions into bboxes. - for i in range(num): - decoded_boxes = decode(loc_data[i], prior_data, self.variance) - # For each class, perform nms - conf_scores = conf_preds[i].clone() - - for cl in range(1, self.num_classes): - c_mask = conf_scores[cl].gt(self.conf_thresh) - scores = conf_scores[cl][c_mask] - if scores.size(0) == 0: - continue - l_mask = c_mask.unsqueeze(1).expand_as(decoded_boxes) - boxes = decoded_boxes[l_mask].view(-1, 4) - # idx of highest scoring and non-overlapping boxes per class - ids, count = nms(boxes, scores, self.nms_thresh, self.top_k) - output[i, cl, :count] = \ - torch.cat((scores[ids[:count]].unsqueeze(1), - boxes[ids[:count]]), 1) - flt = output.contiguous().view(num, -1, 5) - _, idx = flt[:, :, 0].sort(1, descending=True) - _, rank = idx.sort(1) - flt[(rank < self.top_k).unsqueeze(-1).expand_as(flt)].fill_(0) - return output +# for i in range(num): +# decoded_boxes = decode(loc_data[i], prior_data, self.variance) +# # For each class, perform nms +# conf_scores = conf_preds[i].clone() +# +# for cl in range(1, self.num_classes): +# c_mask = conf_scores[cl].gt(self.conf_thresh) +# scores = conf_scores[cl][c_mask] +# if scores.size(0) == 0: +# continue +# l_mask = c_mask.unsqueeze(1).expand_as(decoded_boxes) +# boxes = decoded_boxes[l_mask].view(-1, 4) +# # idx of highest scoring and non-overlapping boxes per class +# ids, count = nms(boxes, scores, self.nms_thresh, self.top_k) +# output[i, cl, :count] = \ +# torch.cat((scores[ids[:count]].unsqueeze(1), +# boxes[ids[:count]]), 1) +# flt = output.contiguous().view(num, -1, 5) +# _, idx = flt[:, :, 0].sort(1, descending=True) +# _, rank = idx.sort(1) +# flt[(rank < self.top_k).unsqueeze(-1).expand_as(flt)].fill_(0) +# return output diff --git a/layers/functions/nms.py b/layers/functions/nms.py new file mode 100644 index 000000000..057602440 --- /dev/null +++ b/layers/functions/nms.py @@ -0,0 +1,7 @@ +#to do + +def nms(all_boxes): + return all_boxes + + + diff --git "a/layers/functions/\357\274\201" "b/layers/functions/\357\274\201" new file mode 100644 index 000000000..6ee5bf89e --- /dev/null +++ "b/layers/functions/\357\274\201" @@ -0,0 +1,7 @@ +#to do + +def nms: + return 0 + + + From 1fa24ce43a96f05187fd52e048df560d2732ce73 Mon Sep 17 00:00:00 2001 From: baiyuxiu <1525645606@qq.cpm> Date: Sun, 5 May 2019 18:33:00 +0800 Subject: [PATCH 4/4] paper branch --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 0256fac99..dd2d2fc5a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ A [PyTorch](http://pytorch.org/) implementation of [Single Shot MultiBox Detecto +### OK!!!! + this is my own branch + ### Table of Contents - Installation - Datasets