来源:投稿 作者:lsc 
编辑:学姐

理论部分

01细粒度图片分类问题

1.1细粒度图片分类特点

可判别区域往往只是在图像中很小的一块区域内。

1.2细粒度图像分类数据集

1.3细粒度图像分类竞赛

1.4细粒度图像分类模型分类:

(1)强监督模型: 需要类别以外的标签进行监督

(2)弱监督模型: 不需要类别以外的标签

02强监督模型

Part-based R-CNN标签,引入bounding box和key point等额外的标注信息

Part-based R-CNN的基本流程:

(1)基于R-CNN算法和空间的分布约束条件对局部区域进行检测,得到整体、头部和躯干部件。

(2)对不同区域使用对应的分类器提取卷积特征。

(3)将3个分类网络的全连接层特征进行连接,得到最后的特征表示。

(4)通过SVM分类器进行分类训练,该算法在CUB-200数据集上取得了73.9%的精度。

Part-based RCNN的缺陷:

(1)需要多个检测模型和多个分类网络,就算量大

(2)对不同数据集需要不同的部件划分,甚至难以划分(如植物),很难通用

03弱监督模型

3.1MA-CNN模型,不需要额外的标签

不显式地定义各个部件,不需要引入目标检测模型,而是对通道进行聚类(相加),得到不同部件的注意力图,将其看作 ’虚拟的部件’。

第2步: 聚类初始化,使用K-means等聚类方法对特征进行聚类,得到N个部件。

第3步: 得到初始的N个部件,为每一个部件引入全连接层,预测c维向量,对应每一个通道有多大的概率属于该部件,初始化标签为第1步聚类结果。

第4步: 得到N个c维向量,对特征图进行加权求和,得到N个部件的注意力。

MA-CNN模型特点:

(1)不需要多个网络,通过通道实现了注意力机制

(2)模型学习流程比较复杂

3.2双线性模型

3.2.1双线性卷积神经网络结构(Bilinear CNN)

B-CNN根据大脑工作时同认知类别和关注显著特征的方式,构建了两个线性网络,协调完成局部特征提取和分类的任务,该算法在CUB-200数据集上取得了84.1%的精度,不过该方法在合并阶段会产生较高的维度,使得整个计算开销非常大。

3.2.2双线性卷积神经网络结构(Bilinear CNN)特征外积计算

3.2.3双线性卷积神经网络结构(Bilinear CNN)

3.2.4 3钟双线性模型

(a)无共享

(b)部分共享

(c)完全共享(参数量最少,且没有明显的精度损失)

3.2.5双线性模型的输出维度太大

3.2.6 紧凑的双线性模型,通过使用低维的kernel近似来实现紧凑的双线性方法

近似方法: Random Maclaurin(RM), Tensor Sketch(TS)

compact bilinear feature,维度可以指定,如将512 * 512 = 262144降维到2048

3.2.7投影降维

sketch表示单个空间位置的内积。

RM与TS投影方法与完整双线性模型对比

随着投影维度增加,逐步逼近完整双线性模型的性能

CUB鸟类识别数据集,VGG基准模型: 2000到800维度比较合适

3.2.8双线性模型的特点:

(1)模型结构比较简单,不需要特殊设计

(2)学习特征之间的注意力,有一定训练难度

代码部分

1、细粒度分类实战简介

数据集: CUB-200,共200种不同种类的鸟

使用网络: bilinear cnn

2、数据集读取

使用torch.utils.data里的data函数实现编写过程,分为__init__、__len__、__getitem__三个模块,

init: 完成某些参数的初始定义

len: 获取数据集的总数

getitem: 读取每幅图像和标签

class cub_dataset(Dataset):def __init__(self, txt_path = "lists/lists/train.txt", file_path = "images/images/",transforms = None):self.txt_path = txt_pathself.file_path = file_pathfh = open(txt_path, 'r')imgs = []lals = []for line in fh:line = line.strip('\n')line = line.strip()words = line.split('.')imgs.append(line)lbls.append(int(words[0]) - 1)self.imgs = imgsself.lbls = lblsself.transform = transformdef __getitem__(self, index):img = self.imgs[index]lbl = self.lbls[index]img = cv.imread(self.file_path + img)img = cv.cvtColor(img, cv.COLOR_BGR2RGB)if self.transform is not None:img = self.transform(img)return torch.Tensor(img).float(), int(lbl)def __len__(self):return len(self.imgs)

3.模型搭建

(1)理解网络的设计思想

(2)利用torch.nn指令完成模型的基本搭建

(3)主要包括nn.Conv2d、nn.BatchNorm2d、nn.AvgPool2d等

class BCNN(nn.Module):def __init__(self):nn.Module.__init__(self)self.features = torchvision.models.vgg16(pretrained = True).featuresself.features = nn.Sequential(*list(self.features.children())[:-1])self.fc = nn.Linear(512 ** 2, 200)for param in self.feature.parameters():param.requires_grad = Truenn.init.kaiming_normal_(self.fc.weight.data)if self.fc.bias is not None:nn.init.constant_(self.fc.bias.data, val = 0)def forward(self, x):N = x.size()[0]assert x.size() == (N, 3, 448, 448)x = self.features(x)assert x.size() == (N, 512, 28, 28)x = x.view(N, 512, 28 ** 2)x = torch.bmm(x, torch.transpose(x, 1, 2)) / (28 ** 2)assert x.size() ==(N, 512, 512)x = x.view(N, 512 ** 2)x = torch.sqrt(x + 1e-5)x = nn.functional.normalize(x)x = self.fc(x)assert x.size() == (N, 200)return x

图像分类论文已整理

细粒度图像分类模型(含实战代码)相关推荐

  1. 深度学习图像处理:双线性CNN (Bilinear cnn)- 细粒度图像分类模型

    定义: 双线性CNN  包括两个特征提取器,其输出 经过外积 相乘,池化后获得图像描述子 优点: 以平移不变的方式,对局部的对级(pairwise) 特征交互建模: 能够泛化多种顺序无关的特征 描述子 ...

  2. 【神经网络与深度学习】CIFAR10数据集介绍,并使用卷积神经网络训练图像分类模型——[附完整训练代码]

    [神经网络与深度学习]CIFAR-10数据集介绍,并使用卷积神经网络训练模型--[附完整代码] 一.CIFAR-10数据集介绍 1.1 CIFAR-10数据集的内容 1.2 CIFAR-10数据集的结 ...

  3. 细粒度图像分类(FGVC)--- 综述

    原文链接:https://www.its404.com/article/xys430381_1/89640699 目录 一.概述 什么是细粒度图像分类 意义 细粒度图像分类的挑战 细粒度分类常用方法 ...

  4. 细粒度图像分类(FGVC)---综述

    目录 一.概述 资源 什么是细粒度图像分类 意义 细粒度图像分类的挑战 细粒度分类常用方法 二.基于定位-识别的方法 2.1 强监督 2.1.1 Part-based R-CNN 2.1.2Pose ...

  5. 深度学习: 细粒度图像分类 (fine-grained image recognition)

    细粒度图像识别 (fine-grained image recognition),即 精细化分类. 细粒度图像分类(Fine-Grained Categorization), 又被称作子类别图像分类( ...

  6. 【项目实战课】人人免费可学,基于Pytorch的BCNN鸟类细粒度图像分类实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的BCNN鸟类细粒度图像分类实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实 ...

  7. 【图像分类】 基于Pytorch的细粒度图像分类实战

    欢迎大家来到<图像分类>专栏,今天讲述基于pytorch的细粒度图像分类实战! 作者&编辑 | 郭冰洋 1 简介 针对传统的多类别图像分类任务,经典的CNN网络已经取得了非常优异的 ...

  8. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  9. 【知识星球】ElementAI提出超复杂多尺度细粒度图像分类Attention模型

    欢迎大家来到<知识星球>专栏,这里是网络结构1000变小专题. 作者&编辑 | 言有三 1 Attention模型 Attention机制已经被证明在很多的任务中都能提升其性能,我 ...

最新文章

  1. linux存储--inode详解(五)
  2. 边工作边刷题:70天一遍leetcode: day 11-2
  3. Qt Creator将UI项目转换为应用程序
  4. 深度学习模型大合集:GitHub 趋势榜第一,已斩获 8000+ 星
  5. 移动web开发DRP问题
  6. linux container 原理,容器概念与Linux Container原理
  7. Linux本地yum源配置以及使用yum源安装各种应用程序
  8. [bzoj1500 维修数列](NOI2005) (splay)
  9. 基于Matlab的跨孔CT胖射线追踪算法(四)
  10. Mysql 存储类型范围
  11. win10设置无盘服务器,win10系统无盘安装系统的操作方法
  12. premiere软件的使用(快速入门,迅速了解常用功能、常用快捷键、常用插件)——wsdchong
  13. 【多线程进阶】如何保证唱跳rap打篮球的顺序
  14. 网盘目录搜索系统源码+搭建教程
  15. 如何打开阿里云安全组
  16. 重拾Java基础知识:运算符操作
  17. C#winform中OpenFileDialog的用法
  18. 教你一起来做一下SpringBoot蓝天幼儿园管理系统
  19. 故障诊断专家系统研究-----内容摘要
  20. SONiC+P4实践——P4Runtime下发ACL表项

热门文章

  1. 《Wireshark网络分析从入门到实践》整理和总结
  2. 浅谈智能问答系统发展及在高校中需求现状
  3. ios客户端学习笔记(八):iOS客户端的推送通知
  4. 导电滑环检测方法检测导电滑环时要注意什么
  5. PID/LQR/MPC自行总结使用
  6. Qt扫盲-Qt Designer 设计师使用总结
  7. 2.4G无线收发模块的应用
  8. 管理员发布小程序,却显示自己不是项目成员
  9. 中国计算机发展的历史和现状
  10. Python、C、Matlab续行符(连行符)