基于图像gist特征的NWPU-RESISC45数据分类实战
gist特征也是我第一次听说,之前在使用机器学习模型来进行图像分类的时候,要么是使用LBP、HOG之类的特征提取算法来计算对应的特征数据,要么是直接将深度学习和机器学习做集成,深度学习扮演特征提取计算的角色,机器学习扮演最终的分类器。
什么是gist特征呢?这是最近需要用到了就来简单学习了下:
GIST概念最初源自1979年Friedman A的论文,后于2001年被Oliva等人借用来代指空间包络特征,随后就是2003年由Torralba等人的继续研究。GIST的概念起源:Framing pictures: the role of knowledge in automatized encoding and memory for gist空间包络特征(GIST特征的子集,基于谱特征计算的全局特征):Modeling the Shape of the Scene: A Holistic Representation of the Spatial Envelope目前GIST使用的算法(基于局部特征计算的全局特征):Context-based vision system for place and object recognition
下面是一个比较全的概况:
这里的学习资料来源于参考的一些博客,这里给出链接,谢谢各位作者的付出。
图像GIST特征和LMGIST包的python实现
GIST 空间包络特征
这里我也是偷懒直接采用的链接1的博主实现的算法了,毕竟不要重复造轮子呀。
图像数据集向量化代码实现如下所示:
def singleImg2Vec(pic='a.jpg'):'''计算单张图像的gist向量'''one_img = cv2.imread(pic, -1)gist_vec = myGIST.get_gist_vec(one_img, mode="bgr")print('single gist_vec shape: ', gist_vec.shape)return gist_vec.tolist()[0]def img2Feature(dataDir='data/',save_path='feature.json'):'''图像向量化'''label_map={}class_list = [one.strip() for one in os.listdir(dataDir)]for i in range(len(class_list)):label_map[class_list[i]] = iprint('label_map: ', label_map)feature=[]for one_class in os.listdir(dataDir):oneDir=dataDir+one_class+'/'for one_pic in os.listdir(oneDir):one_path=oneDir+one_picone_vec=singleImg2Vec(pic=one_path)one_vec.append(label_map[one_class])feature.append(one_vec)print('feature_length: ', len(feature))with open(save_path,'w') as f:f.write(json.dumps(feature))
原始数据集截图如下所示:
简单看下数据样例:
。。。。。。。。。。。。。。。。。
执行输出如下所示:
可以看到:总共45个类别共得到了31500个样本数据可以供训练模型。
在模型层面,我使用了决策树模型、随机森林模型和支持向量机模型,如下所示:
print("============================Loading classifyModel============================"
)data = "feature.json"
dict1 = DTModel(data=data, rationum=0.25, model_path="DT.pkl")
dict2 = RFModel(data=data, rationum=0.25, model_path="RF.pkl")
dict3 = SVMModel(data=data, rationum=0.25, model_path="SVM.pkl")
res_dict = {}
res_dict["DT"], res_dict["RF"], res_dict["SVM"] = dict1, dict2, dict3
with open("res_dict.json", "w") as f:f.write(json.dumps(res_dict))
comparePloter(dict1, dict2, dict3, save_path="comparePloter.jpg")
结果如下所示:
{"DT": {"precision": 0.12134649431073967,"recall": 0.12074357798534727,"F1": 0.12054211961967169,"accuracy": 0.12054211961967169},"RF": {"precision": 0.40067574178843826,"recall": 0.38960461237993079,"F1": 0.3681866125405618,"accuracy": 0.3681866125405618},"SVM": {"precision": 0.6744252562500216,"recall": 0.6783639304000668,"F1": 0.6713253329956568,"accuracy": 0.6713253329956568}
}
对比可视化如下所示:
可能是由于类别比较多的缘故吧,感觉各个模型的效果都不怎么好。
接下来就想尝试一下深度学习模型,这里也是直接选择了主流的CNN模型来完成这项任务,模型搭建实现如下所示:
def defineModel():'''定义模型''' model=Sequential()model.add(Conv2D(32,(3,3), padding='same', kernel_initializer='he_normal',input_shape=(128,128,3),activation='sigmoid'))model.add(BatchNormalization())model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.5))model.add(Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal',activation='sigmoid'))model.add(BatchNormalization())model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Conv2D(128, (3, 3),padding='same', kernel_initializer='he_normal', activation='sigmoid'))model.add(BatchNormalization())model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Conv2D(128, (3, 3), padding='same', kernel_initializer='he_normal',activation='sigmoid'))model.add(BatchNormalization())model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(units=128,activation='sigmoid',kernel_initializer='he_normal', kernel_regularizer=l1(0.1), input_shape=(128*128,)))model.add(Dense(units=2,activation='sigmoid', kernel_initializer='he_normal'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])return model
这里我设定了3000次的迭代计算,训练过程loss曲线和准确度曲线如下所示:
虽然整体来看已经是loss在波动下降,accuracy在波动上升了,但是感觉模型已经过拟合了,这里先到这里吧,后面找时间继续调试吧。
基于图像gist特征的NWPU-RESISC45数据分类实战相关推荐
- 基于图像点特征的多视图三维重建
基于图像点特征的多视图三维重建大致分成四步:一.图像特征点描述 :二.图像特征点匹配: 三.基于图像的稀疏三维重建:四.多视图稠密匹配与三维重建 一.图像特征点描述: 为描述所检测到的图像特征点,通常 ...
- matlab gist,图像GIST特征和LMGIST包的python实现(有github)
1什么是Gist特征 (1) 一种宏观意义的场景特征描述 (2) 只识别"大街上有一些行人"这个场景,无需知道图像中在那些位置有多少人,或者有其他什么对象. ...
- 基于图像特征点匹配的三维立体重建
一.图像特征点检测与匹配 以下内容参考科学出版社康莱老师的<基于图像点特征的多视图三维重建>和华中科技大学王跃嵩的硕士论文<多视图立体匹配三维重建方法> 1.图像特征点检测 确 ...
- SLAM综述阅读笔记六:基于图像语义的SLAM调研:移动机器人自主导航面向应用的解决方案 2020
转自[[论文阅读]A survey of image semantics-based visual simultaneous localization and mapping 语义视觉SLAM综述 - ...
- 基于梯度方向、极化变换和聚类算法的图像主特征直线检测
基于梯度方向.极化变换和聚类算法的图像主特征直线检测 基于机器学习和图像处理的直线检测 代码主要思路: 1)借助类LSD直线检测,提取图像各个方向梯度:2)对像素中的各个梯度方向做极化变换:3)对计划 ...
- Ubuntu16.04下基于opencv--实现图像SIFT特征与全景图片的生成
Ubuntu16.04下基于opencv--实现图像SIFT特征与全景图片的生成 一. 理解和实践SIFT特征提取与匹配 二. 全景图片的生成 三.循环依次读取一个序列图片,进行匹配连线 一. 理解和 ...
- 互信息配准matlab,基于图像特征和互信息的图像配准方法
基于图像特征和互信息的图像配准方法 [专利摘要]本发明公开一种基于图像特征和互信息的图像配准方法,主要用于提高现有基于互信息配准方法的精确度.其实现步骤为:(1)输入两幅图像,一幅为参考图像r,另一幅 ...
- python提取人物特征_基于图像人物面部表情识别的特征提取优化方法与流程
本发明涉及一种基于图像人物面部表情识别的特征提取优化方法,主要利用基于统计特征提取的二维主成分分析法和改进的粒子群算法优化图像矩阵的解,属于图像处理.模式识别和计算机视觉交叉技术应用领域. 背景技术: ...
- 控件获取图像可从几方面取得?_基于图像特征与布局刻画的移动测试脚本跨平台录制回放...
一. 引言 移动应用在全球范围内有着越发举足轻重的地位,因此移动应用的快速迭代和频繁的需求变更的特点引发了对应用质量保障的要求不断提高.在大型设备集群上迁移测试脚本是移动应用质量保障的关键技术之一,因 ...
- 基于图像的三维建模——特征点检测与匹配
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:梦寐mayshine 链接:https://zhuanlan.zhihu.com/p/12893 ...
最新文章
- 项目Alpha冲刺--5/10
- 系统学习机器学习之算法评估
- php joomla,基于MySQL / PHP和Joomla的因特网管理信息系统设计
- 美学评价_卡美学的真正美
- js 获取某年的某天是第几周
- C++编写简单的俄罗斯方块游戏
- maven项目在pom.xml中设置JDK编译版本
- jdbc链接mysql按照id查询_使用jdbc连接并操作Oracle数据库(增删改查IDUS)
- 今日头条再次宣战腾讯!
- Oracle Alert sid log 位置问题
- Java后端开发需要学什么?为什么选择后端开发
- 回归、自回归、循环神经网络(RNN)、LSTM
- php获取客户端IP和php获取服务器端IP
- DSP与FPGA的SRIO通信实现
- confirm的意思中文翻译_confirmation是什么意思中文翻译
- C语言学习笔记之初识
- lt;#37;= %、lt;#37; %、lt;#37;@ %、lt;#37;:%和lt;#37;# %的区别
- python爬虫登录12306失败_Python网络爬虫(selenium模拟登录12306网站)
- linux查找php文件是否存在,linux文件是否存在
- 解决ie打开本该下载的文件问题