第一次跑模型的代码,就需要首先跑通作者原来的代码,再修改成自己的数据集进行训练。
所以!第一步!根据作者的Readme跑代码的时候,就遇到了下面的报错。查了百度也没有找到问题!
报错:
torch.jit.frontend.NotSupportedError: slicing multiple dimensions at the same time isn't supported yet
proposals (Tensor): boxes to be encoded
# perform some unpacking to make it JIT-fusion friendly
wx = weights[0]
wy = weights[1]
ww = weights[2]
wh = weights[3]
proposals_x1 = proposals[:, 0].unsqueeze(1)
~~~~~~~~~ <--- HERE
proposals_y1 = proposals[:, 1].unsqueeze(1)
proposals_x2 = proposals[:, 2].unsqueeze(1)
proposals_y2 = proposals[:, 3].unsqueeze(1)
reference_boxes_x1 = reference_boxes[:, 0].unsqueeze(1)
reference_boxes_y1 = reference_boxes[:, 1].unsqueeze(1)
reference_boxes_x2 = reference_boxes[:, 2].unsqueeze(1)
reference_boxes_y2 = reference_boxes[:, 3].unsqueeze(1)
终于在git的issues中找到了答案!
解决方案就是:在终端中输入 pip install torchvision==0.2.2
就解决了!
这个解决了之后又遇到了另一个报错::
cannot connect to X server localhost:10.0
(“X Server没有连接”)
这是由于linux终端没有图形界面,demo调用了cv2.imwrite(),因此需要修改 src/lib/detectors/cdet.py
。
def show_results(self, debugger, image, results):
debugger.add_img(image, img_id='ctdet')
for j in range(1, self.num_classes + 1):
for bbox in results[j]:
if bbox[4] > self.opt.vis_thresh:
debugger.add_coco_bbox(bbox[:4], j - 1, bbox[4], img_id='ctdet')
# debugger.show_all_imgs(pause=self.pause)
debugger.save_all_imgs(path='/home/jhsu/sujh/ljj/CenterNet/output', genID=True)
将debugger.show_all_imgs(pause=self.pause)
注释掉,
换成debugger.save_all_imgs(path='/home/jhsu/sujh/ljj/CenterNet/output', genID=True)
就可以了!可以多跑几张图试一试!
首先试着跑一张图,终端输入:
python demo.py ctdet --demo ../images/24274813513_0cfd2ce6d0_k.jpg --load_model ../models/ctdet_coco_dla_2x.pth
终端显示结果如下面所示:
(此处参考博客)
然后想试着跑所有demo中的images,在终端输入:
python demo.py ctdet --demo ../images/24274813513_0cfd2ce6d0_k.jpg --load_model ../models/ctdet_coco_dla_2x.pth
运行结果就如下所示: