网站建设及维护服务技术指标,兰州seo公司,wordpress 去掉页头,本地化网站建设1.数据准备#xff1a;VOC2012数据集#xff0c;initmodel文件夹#xff08;预训练模型#xff09;#xff0c;SegmentationClassAug数据2.训练部分#xff1a;训练部分没什么需要改动的#xff0c;也就改一下选择的配置文件。在config文件夹里有关于coco和voc数据的配置…1.数据准备VOC2012数据集initmodel文件夹预训练模型SegmentationClassAug数据2.训练部分训练部分没什么需要改动的也就改一下选择的配置文件。在config文件夹里有关于coco和voc数据的配置参数可以根据自己的实际情况来修改。训练前要把数据集的路径修改成自己数据集所在的位置路径最好不要有中文路径否则的话训练的时候会发现loss一直是0.这是因为在读数据集的时候代码使用的是cv2.imread,使用这种方法来读图路径错误或者有中文的时候不会 报错但独到的图片是None如果路径有中文可以修改下面的代码将utils文件夹里面的dataset.py里面的cv2.imread改成cv2.imdecode(注释的代码到这里训练部分就结束了正常训练就可以了3.测试部分训练完之后会生成一个final.pth的模型文件在如下位置测试之前要修改一下配置文件将weight对应的路径改成模型所在的路径然后运行test.py文件当batch_size_val为1时代码不会报错。当batch_size_val1时运行代码就会报错RuntimeError: stack expects each tensor to be equal size, but got [366, 500] at entry 0 and [333, 500] at entry 1这个报错原因就是在测试的时候modeval,而当modeval的时候dataset.py里面返回的数据有6个多了一个raw_label。这个raw_label就是原始的mask图由于原图大小是不一致的所以在使用Dataload的时候Dataload内部在返回前会对一个batch的数据进行stack操作而由于大小不一致故报错。解决方法在使用DataLoader的时候后面加上collate_fndetect_collate.detect_collate是自己编写的一个函数前面已经说了当modeval的时候dataset返回6个数据所以自己写的函数也是返回6个。通过看代码可以看到返回结果的时候只有ori_label没有进行stack操作这就是前面说的大小不一致不能 进行stack操作。主要是在test.py里面这个ori_label并没有太大的用处所以就不对它进行其他操作了如果需要ori_label的话也可以在函数里面对它进行处理然后再进行stack操作然后再返回结果。这时候返回的ori_label是一个列表。由于返回的ori_label是一个列表所以还需要对test.py进行一些小修改才能正常运行注释掉如下代码就ok了