文章标题 faster rcnn-pytorch版训练自己的数据
来源:互联网 发布:长春java公司 编辑:程序博客网 时间:2024/06/01 07:22
pytorch框架比起tenserflow和caffe等框架相对简单很多,代码短小精悍,这里记录一下用pytorch版的faster rcnn训练自己的数据并测试的过程,以及途中遇到的一些问题。
一、github上下载faster rcnn pytorch的代码链接:https://github.com/longcw/faster_rcnn_pytorch
按照此工程下面的readme配置相应库,测试或对VOC2007数据集进行训练等。
二、对于自己的数据集,首先需要标记数据生成相应的xml文件,标记工具链接:https://github.com/DuinoDu/BBox-Label-Tool ,执行python tools/createDS.py,这里会提示标记的类别名、标记图片的导入路径、标记结果的保存路径,以及询问图像中是否只含一个目标,注意不是一个类别,是一个目标!!!这里的默认路径是家目录下bbox_label.txt中的路径,可根据实际情况修改:vim .bbox_label.txt。
完成后运行 python main_voc.py,然后画框标记,左下角有标记坐标的显示,可随时查看标记是否成功;
完成标记后进入BBOX_Label_Tool/tools里面运行checkAnno.py ,检查一下你的xml是否有问题,有问题的话将其和其对应的图片删除,然后重命名,然后在执行createSplit.py,运行后会自动生成Imagesets文件夹,里面包含数据划分的txt,这里要注意一个问题,就是你标记时候定义的classes_name要和你的xml中object的名字一样,否则执行createSplit.py后tranval.txt等一系列txt中都不会有内容!!!!!并且你还发现不了这个问题,所以一定要注意注意,贴图说明:
重命名脚本:
import xml.etree.ElementTree as ETimport osimport cPickleimport numpy as npimport cv2import randomannopath="/home/lsj/project/faster_rcnn_pytorch/data/VOCdevkit2007/VOC2007/Annotations"imgpath="/home/lsj/project/faster_rcnn_pytorch/data/VOCdevkit2007/VOC2007/JPEGImages"new_xml_dir="/home/lsj/project/faster_rcnn_pytorch/data/VOCdevkit2007/VOC2007/cache/Annotations"new_img_dir="/home/lsj/project/faster_rcnn_pytorch/data/VOCdevkit2007/VOC2007/cache/JPEGImages"def updatexml(ann_path,new): updatetree=ET.parse(ann_path) root=updatetree.getroot() filename=root.find('filename') filename.text=str(new) updatetree.write(os.path.join(new_xml_dir,new+'.xml'))def preprocess(): filelist=os.listdir(annopath) num = 1 #从1开始命名,避免0、1造成的程序问题 number = 0 for file in filelist: print('number = ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',number) number += 1 ann_path = os.path.join(annopath,file) name = os.path.splitext(file)[0] jpg = name + '.jpg' jpg_path = os.path.join(imgpath,jpg) img=cv2.imread(jpg_path) new_name = (6 - len(str(num)))*'0' + str(num) num+=1 cv2.imwrite(os.path.join(new_img_dir,new_name+'.jpg'), img) updatexml(ann_path,new_name) if __name__ == '__main__': preprocess()
二、修改pytorch faster rcnn代码数据传送接口
1.找到faster_rcnn_pytorch/experiments/cfgs/faster_rcnn_end2end.yml文件,修改这里面的参数,一般只需要修改下类别,调试过程中如果需要可修改batchsize的数值或学习率等。
2.找到faster_rcnn_pytorch/faster_rcnn/faster_rcnn.py文件,在 FasterRCNN类中修改类别数量和类别名称,类别名称就是你的xml中object的名字,例如我这里是上面途中红色标注的suspension_point,这个类中还可以改变输入图像的resize结果,原py文件中是将短边固定为600,按原图的长宽比放缩长边,并限制最大size不超过1000,这些参数可根据具体情况修改。
3.找到faster_rcnn_pytorch/faster_rcnn/datasets/pascal_voc.py文件修改类别数和类别名,和2差不多
4.如果你用faster_rcnn_pytorch自己训练过VOC2007数据集,那么在faster_rcnn_pytorch中会有三个文件夹:cache、pretrained_model、 VOCdevkit2007,cache是存的从你数据集中load 进来的数据缓存,训练前将里面的内容删除运行程序时会自动生成, pretrained_model 里面存的是预训练模型,比如你要用VGG16作为你的basenet,那么你要去github上下载一个VGG_imagenet.npy文件,放进这个文件夹中,最后一个VOCdevkit2007里面就是你的数据,为了少修改代码,我们可以将自己的数据变为和VOC2007一样的格式,具体来说需要在VOCdevkit2007中建立一个VOC2007文件夹,然后把你之前数据准备检测并重命名后的数据放在这个文件夹中,最后的效果是VOCdevkit2007/VOC2007这个文件夹中含有三个子文件:Annotations、JPEGImages、ImageSets。
5.训练吧,见证奇迹的一刻,在faster_rcnn_pytorch目录下运行python train.py。
三、感想
pytorch真的是一个很棒的框架,简单易懂,官网的docs里面也有很多例子,大家都可以抽空去看看,你们一定也会爱上它的!数据准备真的很重要啊,中间某个过程出错就会导致训练不成功,所以一定要养成check的好习惯,未雨绸缪,防患于未然,之后的过程就会很顺畅了!实践过程中需要注意的问题博客中基本都涵盖了,希望能帮到不知道从何入手的你~(^▽^)
- 文章标题 faster rcnn-pytorch版训练自己的数据
- 用自己的数据训练Faster-RCNN
- faster-rcnn安装,训练自己的数据
- Faster RCNN 训练自己的数据集
- Faster-RCNN训练自己的数据集
- Faster-RCNN训练自己的数据集
- py-faster-rcnn训练自己的数据
- faster rcnn 训练自己的数据
- faster Rcnn训练自己的数据集
- 使用自己的数据训练Faster-RCNN
- Faster-Rcnn训练自己的数据集
- 使用faster rcnn训练自己的数据-制作数据集
- faster-rcnn 中训练自己的数据出现的错误
- 【faster-rcnn】训练自己的数据集时的坑
- 【faster-rcnn】训练自己的数据集时的坑
- 【faster-rcnn】训练自己的数据集时的坑
- 使用py-faster-rcnn训练自己的数据
- py-faster-rcnn用自己的数据训练模型
- HDU-4664 Triangulation(博弈SG打表+类似凸包性质)
- Jmeter压测接口
- 使用ARouter遇到的坑
- NodeMCU--学习笔记(一)入门知识
- Kotlin基础语法
- 文章标题 faster rcnn-pytorch版训练自己的数据
- 懒加载、self.a和_a
- vue-router浏览器跳转
- SpringBoot使用FeignClient进行服务间的调用,传递headers信息
- Qt云盘项目
- 视频编码部分定义
- 单点登录实现
- Log4J日志管理类使用详解
- 马云:今天的中国是最佳经商时代 全世界无可比