使用espnetv2 训练分割任务

EdegNets这个项目中有很多值得我们学习的亮点:

例如训练逻辑:先小分辨率,然后大分辨率
transform等
学习率控制策略:Hybird等
网络架构比较轻便

现在我们需要使用EdgeNets 訓練二分类分割任务:

原项目:https://github.com/sacmehta/EdgeNets/blob/master/README_Segmentation.md

根据原git项目,需要作如下修改,才能跑通:

一: 数据集准备:
只需要将标注好的数据:图片和标注图片分别放入到VOC风格文件下的
JPEGImages/ SegmentationClassAug/中即可,
然后仿照voc数据分别生成train_aug.txt 和val.txt
参考脚本:

    # coding:utf-8
	from imutils import paths
		jpgPath= ""
		maskPath=""
		jpgs=sorted(list(paths.list_images(jpgPath)))
		masks=sorted(list(paths.list_images(maskPath)))
		with open("train_aug.txt", 'a') as f:
		    for idx in range(len(masks)):
		        w= jpgs[idx]+"  " + masks[idx]+"\n"
		        f.write(w)

然后将生成的文件train_aug.txt 和val.txt中路径分别替换成 /JPEGImages/
/SegmentationClassAug/ 即可。

sed -i s"|jpgPath|/JPEGImages/ |g" -i  train_aug.txt
sed -i s"|maskPath|/SegmentationClassAug/|g" -i  train_aug.txt

sed -i s"|jpgPath|/JPEGImages/ |g" -i  val.txt
sed -i s"|maskPath|/SegmentationClassAug/|g" -i  val.txt

由于训练没有使用coco 数据集扩充,所以训练脚本中不加–coco-path

二:训练代码修改:

.修改步驟:

		1. train_segmentation 中的workers  =0 
		2.  dataloader/segmentation/voc.py 中的VOC_CLASS_LIST=['backgroud','textboxes'] # 改成自己的
		3.  loss_fns/segmentation_loss.py 中:
			 linenum 21   from   self.loss_fn = nn.BCEWithLogitsLoss(weight=self.class_wts)  to self.loss_fn = nn.BCEWithLogitsLoss()
			 linenum 33   from           x_one_hot = x_one_hot.scatter_(1, x, 1)         to  # x_one_hot = x_one_hot.scatter_(1, x, 1)
		4. 訓練時只當BCE loss  --loss-type bce

最终执行脚本:

CUDA_VISIBLE_DEVICES=0,1   python train_segmentation.py --model espnetv2 --s 2.0 --dataset pascal --data-path vision_datasets/pascal_voc/VOCdevkit   --batch-size 40 --crop-size 256 256 --lr 0.009 --scheduler hybrid --clr-max 61 --epochs 100   --loss-type bce

在这里插入图片描述

你可能感兴趣的:(图像分割,object,detection,DL,espnetv2,imagenet,AI,pytorch,图像分割)