YOLO如何训练分类网络???

部署运行你感兴趣的模型镜像

一般YOLO的工程应用直接上检测,源自作者提供了分类的预训练模型,但是如果自己改网络训练怎么办?预训练网络没有怎么办?

不怕,两种方法可以解决!

第一种:比较笨的方法,就是下载imagenet数据训练分类网络!

第二种:一层一层的改网路,每改一层,在原有预训练的条件下训练网络,生成新的模型时作为下一次修改网络的预训练模型!说的好像不是很清楚额,这个问题以后讨论!

 

今天讨论如何用yolo训练自己的分类模型!可见我们一般的分类工程都是通过caffe来做的,YOLO其实可以替代的,而且yolo是纯c,有着不可替代的优点!加上OpenBlas,效果不要太好了!

 

第一步:yolo配置

这个在本博文不提了,可参考我的系列博客http://blog.youkuaiyun.com/samylee/article/details/53414108

 

第二步:数据制作

没啥特殊要求,如下图所示,train保存训练图片,test保存测试图片,labels.txt为分类的标签,例如猫狗大战则为cat和dog!

注意一点就行,即图片名称为labels.txt中的一种,例如cat_1.jpg,cat为labels中的一种,后面_1随便写,只要没有dog就行!(WHY?全局搜索strstr函数即可豁然开朗)

同时要分别生成train.list和test.list保存图片train和test的绝对路径,这个程序可以自己写一下啦,很简单!

 

第三步:数据配置文件制作

例如猫狗大战数据,cat_dog.data怎么写?如下:

 

classes=2
train  = data/cat_dog/train.list
valid  = data/cat_dog/test.list
labels = data/cat_dog/labels.txt
backup = cat_dog/backup/
top=2

很明显,classes表示几类,labels表示标签路径,backup表示要把模型存放在哪里,top表示准确率输出前几,类似caffe

 

 

第四步:网络文件制作

cat_dog.cfg怎么写?如下:

 

[net]
batch=128
subdivisions=1
height=416
width=416
channels=3
max_crop=428
min_crop=428

hue=.1
saturation=.75
exposure=.75

learning_rate=0.1
policy=poly
power=4
max_batches = 5000
momentum=0.9
decay=0.0005

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[convolutional]
filters=2
size=1
stride=1
pad=1
activation=leaky

[avgpool]

[softmax]
groups=1

[cost]
type=sse

很明显,max_crop表示原始图像大小,heights和weights表示剪切图像大小,最后一层conv输出为几类,这里比如猫狗为2

 

 

第五步:训练

到了这一步,很舒服!终端写入如下命令即可:

 

./darknet classifier train cfg/cat_dog.data cfg/cat_dog.cfg

训练过程看啥呢?看loss,loss应该越来越小,最后趋于平稳

 

 

第六步:测试

训练完毕过后,拿出训练结果的模型来测试,真皮!终端输入如下命令即可:

 

./darknet classifier predict cfg/cat_dog.data cfg/cat_dog.cfg cat_dog_final.weights data/dog.jpg

结束啦,终端可以看到输出两个结果(top=2),第一个即为判断的结果啦

 

 

任何问题请加唯一QQ2258205918(名称samylee)  !!! 

唯一VX:samylee_csdn

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

YOLO(You Only Look Once)目标检测模型本质上是一种用于检测图像中多个对象的位置并进行分类的框架。尽管其主要设计目标是实现高效且准确的目标检测,但YOLO模型同样具备执行图像分类任务的能力,尤其是在单类别或多类别分类场景中[^2]。 ### YOLO模型的分类能力 YOLO通过单次推理即可完成对象的定位和分类,其核心网络结构可以提取图像中的高层次特征,这些特征不仅适用于检测任务,也适用于分类任务。例如,YOLOv5和YOLOv8等较新的版本支持自定义数据集的训练,用户可以通过调整输出层并移除检测头,将YOLO模型转换为图像分类模型。这种灵活性使得YOLO在需要同时处理分类与检测任务的场景中具有显著优势[^1]。 ### YOLO与其他分类模型的比较 与传统的图像分类模型(如ResNet、EfficientNet等)相比,YOLO并非专为分类任务设计,因此在单纯分类任务的精度上可能略逊一筹。然而,YOLO的优势在于其轻量级结构和高效的特征提取能力,这使得它在资源受限的设备上表现尤为出色。例如,在边缘计算设备或嵌入式系统中,YOLO可以在保持较高分类精度的同时,提供更低的延迟和更快的推理速度[^1]。 ### YOLO分类实现方法 在实际应用中,YOLO可以通过以下方式实现图像分类功能: 1. **移除检测头**:YOLO的检测头用于预测边界框和类别概率。在分类任务中,可以移除检测头,并在特征提取网络的末端添加全连接层作为分类头。 2. **调整损失函数**:YOLO的原始损失函数包含定位损失和分类损失。在分类任务中,只需保留分类损失,忽略定位损失。 3. **训练与优化**:YOLO模型可以通过端到端的方式进行训练,以适应特定的分类任务。此外,YOLO的预训练权重可以作为迁移学习的基础,加速模型收敛并提高分类精度。 以下是一个简化版的代码示例,展示如何将YOLO模型转换为图像分类模型: ```python import torch import torchvision.models as models # 加载YOLO的特征提取部分 class YOLOClassifier(torch.nn.Module): def __init__(self, num_classes): super(YOLOClassifier, self).__init__() # 假设YOLO的特征提取网络为Darknet self.feature_extractor = models.resnet18(pretrained=True) # 替换为YOLO的特征提取网络 self.classifier = torch.nn.Linear(512, num_classes) # 添加分类头 def forward(self, x): x = self.feature_extractor(x) x = self.classifier(x) return x # 初始化模型 model = YOLOClassifier(num_classes=10) ``` ### 总结 YOLO目标检测模型能够用于图像分类任务,尤其是在需要兼顾检测与分类的场景中表现出色。虽然其分类精度可能略逊于专为分类任务设计的模型,但YOLO的轻量级结构和高效的特征提取能力使其在资源受限的环境中具有显著优势[^1]。 ---
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值