Ultra-Light-Fast-Generic-Face-Detector-1MB的自定义数据集训练 | 多分类修改指南 (1)

系列博客:

Ultra-Light-Fast-Generic-Face-Detector-1MB的自定义数据集训练 | 多分类修改指南_Andrwin的博客-CSDN博客1、项目地址:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB/blob/master/README_CN.md2、虚拟环境按照requirements.txt安装就可以,我的硬件是RTX2080(8G),i7-9700K,32GRAM,Ubuntu18.043、数据集准备可以使用labelimg去标注,文件结构组织形式:\data|------\my_dataset ...https://blog.csdn.net/Andrwin/article/details/120408801

Ultra-Light-Fast-Generic-Face-Detector-1MB的自定义数据集训练 | 多分类推理修改 (2)_Andrwin的博客-CSDN博客上一篇帖子我们介绍了如何修改源代码适应我们自己定义的数据集做一个多分类的目标检测任务。Ultra-Light-Fast-Generic-Face-Detector-1MB的自定义数据集训练 | 多分类修改指南_Andrwin的博客-CSDN博客训练好的权重会被保存在 项目根目录/models/train-version-RFB 这个文件夹里面,你可以根据训练日志选择损失最小的一个权重。第一件事是新建一个分类标签列表,看过上一篇博客的朋友可能不理解为什么又要新建一个列表,因为原始代码对于列表读取的https://blog.csdn.net/Andrwin/article/details/120413366

Ultra-Light-Fast-Generic-Face-Detector-1MB的自定义数据集训练 | PTH权重转为ONNX格式 (3)_Andrwin的博客-CSDN博客在PTH格式不方便端侧部署,考虑转为ONNX或者MNN格式。1、修改源代码首先需要修改一下源代码:(1)vision/ssd/ssd.py这个文件里面if self.is_test: confidences = F.softmax(confidences, dim=2) boxes = locations # this line should be added. #boxes = box_utils.convert_locations_to_boxes( #https://blog.csdn.net/Andrwin/article/details/120415012

1、项目地址:

https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB/blob/master/README_CN.mdhttps://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB/blob/master/README_CN.md

2、虚拟环境

按照requirements.txt安装就可以,我的硬件是RTX2080(8G),i7-9700K,32GRAM,Ubuntu18.04

3、数据集准备

可以使用labelimg去标注,文件结构组织形式:

\data

|------\my_dataset

          |------\Annotations

                  |------00001.xml

                  |------00002.xml

                  |------00003.xml

          |------\ImageSet

                  |------\Main

                            |------test.txt

                            |------trainval.txt

          |------|JPEGImages

                  |------00001.jpg

                  |------00002.jpg

xml为标注文件,txt为组织文件,里面是纯文件名字,不包含路径个后缀,如果弄个YOLO系列的算法应该很熟悉这个。

数据文件夹放在:项目根目录\data\数据集文件夹

4、修改代码为多分类训练

(1)第一件事是在项目根目录新建一个标签列表文件,每行一个,行末位添加英文逗号,最后一行除外,例如把这个文件命名为user_labels.txt

classA,
classB,
classC,
classD

(2)复制一份项目根目录的train.py,强烈建议不要在源文件上面做任何改动。

在参数配置的最后一行加入(train.py的第99行)

parser.add_argument('--label_file', default=None, type=str, help='labels path')

源文件很独特,函数里面存在这个参数,但是并未由args指定。

第221行和第222行的:

 dataset = VOCDataset(dataset_path, transform=train_transform,
                                 target_transform=target_transform)

改为:

dataset = VOCDataset(dataset_path, args.label_file, transform=train_transform,
          target_transform=target_transform)

把label_file加入进去

把第223行和第224行的:

label_file = os.path.join(args.checkpoint_folder, "voc-model-labels.txt")
store_labels(label_file, dataset.class_names)

注释掉或者直接删掉。

(3)在项目根目录\vision\ssd\mb_tiny_RFB_fd.py里面

约21行:

base_net = Mb_Tiny_RFB(2)

其中的2是分类数+1,例如上文我们设置额4个类,那么这里就改成5

base_net = Mb_Tiny_RFB(5)

(4)在项目根目录\vision\nn\mb_tiny_RFB.py里面

约74行:

    def __init__(self, num_classes=2):

改成和上面的分类一样,如果是4类就写5

(5)在项目根目录\vision\datasets\voc_dataset.py里面:

第12行:

def __init__(self, root, transform=None, target_transform=None, is_test=False, keep_difficult=False, label_file=None):

改为:

def __init__(self, root, label_file, transform=None, target_transform=None, is_test=False, keep_difficult=False):

第29行:

label_file_name = self.root / "labels.txt"

改为:

label_file_name = label_file

这样就可以从函数值传入参数

(6)复制一份项目根目录的train-version-RFB.sh

第9、11行:

./data/wider_face_add_lm_10_10 \

改为你自己定义的数据集名字

./data/my_dataset \

第11行后面:

  --label_file \
  user_labels.txt \

加入这两行,传入标签列表文件

5、开始训练

./my_zf_train-verson-RFB.sh

如果显存利用率不高,可以修改sh文件中的batch size。

英文的看着不得劲 我自己汉化了一下~

 训练的很快,3万多张图片,200个Epoch,约6个小时就跑完了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值