【pytorch-ssd目标检测】训练自己的模型(三)-测试模型的精度

该博客介绍了如何修改SSD模型的eval.py文件以适应自定义的数据集,包括调整模型路径、数据路径、结果文件路径等。在PyTorch 1.3以上版本中,由于Detect类的forward方法需要改为静态方法,避免了运行时的报错。最终,模型在测试集上对orange类别的识别精度达到了0.827,显示出良好的训练效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

训练数据集

https://blog.youkuaiyun.com/abysswatcher1/article/details/113463551

修改部分

首先对eval.py中的代码进行修改:

1.导入部分注释掉VOC和COCO,改为自己的数据集。
2.第一个在parser.add_argumen中,将路径改为之前训练好的模型的路径。

parser.add_argument('--trained_model',
                    default='C:/Users/25345/Desktop/pytorch_ssd-20200327T152054Z-001/weights/ssd300_COCO_5000.pth', type=str,
                    help='Trained state_dict file path to open')

3.annopath,imgpath,imgsetpath,devkit_path的内容也要进行相应的修改:

#annopath = os.path.join(args.voc_root, 'VOC2007', 'Annotations', '%s.xml')
#imgpath = os.path.join(args.voc_root, 'VOC2007', 'JPEGImages', '%s.jpg')
#imgsetpath = os.path.join(args.voc_root, 'VOC2007', 'ImageSets',
#                          'Main', '{:s}.txt')
#YEAR = '2007'
#devkit_path = args.voc_root + 'VOC' + YEAR
mask_root = "C:/Users/25345/Desktop/pytorch_ssd-20200327T152054Z-001/pytorch_ssd/data/maskornot"
annopath = os.path.join(mask_root, 'Annotations', '%s.xml')
imgpath = os.path.join(mask_root, 'JPEGImages', '%s.jpg')
#imgsetpath = os.path.join(mask_root, 'ImageSets',
#                          'Main', '{:s}.txt')
imgsetpath = os.path.join(mask_root, 'ImageSets','Main')+ os.sep + 'test.txt'
devkit_path = mask_root

在之后添加

set_type = 'test'

4.部分函数的修改:

def get_voc_results_file_template(image_set, cls):
    # VOCdevkit/VOC2007/results/det_test_aeroplane.txt
    filename = 'det_' + image_set + '_%s.txt' % (cls)
    filedir = os.path.join(devkit_path, 'results')
    #print(filedir)
    if not os.path.exists(filedir):
        os.mkdir(filedir)
    path = os.path.join(filedir, filename)
    return path
def write_voc_results_file(all_boxes, dataset):
    for cls_ind, cls in enumerate(labelmap):
        print('Writing {:s} MASK results file'.format(cls))
        filename = get_voc_results_file_template(set_type, cls)
        with open(filename, 'wt') as f:
            for im_ind, index in enumerate(dataset.ids):
                dets = all_boxes[cls_ind+1][im_ind]
                if dets == []:
                    continue
                # the VOCdevkit expects 1-based indices
                for k in range(dets.shape[0]):
                    f.write('{:s} {:.3f} {:.1f} {:.1f} {:.1f} {:.1f}\n'.
                            format(index[1], dets[k, -1],
                                   dets[k, 0] + 1, dets[k, 1] + 1,
                                   dets[k, 2] + 1, dets[k, 3] + 1))

修改完成之后,即可运行eval.py进行测试,下面是我遇到的一个报错。

改错部分

RuntimeError: Legacy autograd function with non-static forward method is deprecated

原因

detection.py文件中,因为Detect类继承自Function类,在pytorch1.3及以后的版本需要规定forward方法为静态方法,所以在pytorch1.3以上的版本执行出错。

解决方法

1.可以将pytorch的版本降为1.2以下,即可解决,但是我的CUDA版本是11.0如果降低的话,CUDA也要重新装低版本的,这个方法不行。
2.代码修改
ssd.py中,
在这里插入图片描述
box_utils.py中,
第一个添加的部分:
在这里插入图片描述第二个部分:
在这里插入图片描述接下来就可以显示模型的效果了,
在这里插入图片描述
orange类的识别表现在测试集中的精确程度约为0.827,训练的效果还不错。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值