图像多分类——卷积神经网络
例子参考:https://www.jiqizhixin.com/articles/2019-05-15-2
数据集:https://www.cs.ccu.edu.tw/~wtchu/projects/MoviePoster/index.html
将获取到原始数据集,其中,有三个文件, Movie Poster Dataset是1980-2015年部分影片海报图片, Movie Poster Metadata是1980-2015年部分影片的数据详情,example:
Readme则是对 Movie Poster Metadata文件里边的字段解释,在训练过程中只用到IMPId和 Genre(影片类型)。
步骤:
- 数据处理
获取到影片的类型对影片类型实现one-hot编码,如果是属于哪个类型,用1表示,其他为0,得到如下文件,
考虑到特征的相关性,删除影片比较少的类型列(将数量小于50的类型列进行删除),最终留下22个电影类型,如下:
将电影类型作为最终的结果值,然后加载图片:
for i in tqdm(range(train.shape[0])): img = image.load_img('D:/aayu/实例/图像多分类/data/Images/'+train['ID'][i]+'.jpg',target_size=(400,400,3)) img = image.img_to_array(img) img = img/255 train_image.append(img)
X = np.array(train_image)
- 模型构建
模型是由4层卷积和3层全连接层构成,具体参数如下:
训练结果为:
- 模型预测
新增一个复仇者联盟的海报对数据进行预测(此处可更换为任意海报数据),加载数据:
img = image.load_img('F:/aayu/图像/data/GOT.jpg',target_size=(400,400,3))
img = image.img_to_array(img)
img = img/255
预测结果:
完整代码:
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.utils import to_categorical
from keras.preprocessing import image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from tqdm import tqdm
#%matplotlib inline train = pd.read_csv('F:/aayu/图像/data/multi-data.csv')print(train.head())train_image = [] for i in tqdm(range(train.shape[0])): img = image.load_img('F:/aayu/图像/data/Images/'+train['ID'][i]+'.jpg',target_size=(400,400,3)) img = image.img_to_array(img) img = img/255 train_image.append(img) X = np.array(train_image) y = np.array(train.drop(['ID', 'Genre','News','Reality-TV','Italian','Polish','Adult','Talk-Show','Spanish','Russian','Cantonese','R','PG','German','English','Japanese','Filipino','French','G','Game-Show','Hungarian'],axis=1)) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.1) #model
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(5, 5), activation="relu", input_shape=(400,400,3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=32, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5, 5), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(22, activation='sigmoid')) model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test), batch_size=64) #precise
#加入新数据,进行测试
img = image.load_img('F:/aayu/图像/data/GOT.jpg',target_size=(400,400,3))
img = image.img_to_array(img)
img = img/255 classes = np.array(train.columns[:22])
proba = model.predict(img.reshape(1,400,400,3))
top_3 = np.argsort(proba[0])[:-4:-1]
for i in range(3): print("{}".format(classes[top_3[i]])+" ({:.3})".format(proba[0][top_3[i]]))
plt.imshow(img)
总结:与minist数据集相比,该数据集的分类中存在一张图片多个类的情况,而minist数据集当中一张图片代表一个数字,也就是一个分类,所以图像分类和图像多分类在本质上的区别在于数据集,算法实现基本都是一样的。
(数据集正在处理中,github网址为:https://github.com/YUXUEPENG/ImageMulti-Classification.git)
图像多分类——卷积神经网络相关推荐
- 毕业设计 - 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]
文章目录 0 简介 1 VGG网络 2 风格迁移 3 内容损失 4 风格损失 5 主代码实现 6 迁移模型实现 7 效果展示 8 最后 0 简介 今天学长向大家介绍一个机器视觉项目 基于深度学习卷积神 ...
- 在MNIST图像上训练卷积神经网络
摘要:这是第一次接触卷积神经网络,非常顺利地运行了代码,基本了解了卷积神经网络是怎么训练的. 1.代码(有空格的是一个单元格) from keras import layers from keras ...
- cnn图像二分类 python_人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)...
上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from kera ...
- 【神经网络】(4) 卷积神经网络(CNN),自定义网络,案例:彩色图像10分类
各位同学大家好,今天和大家分享一下TensorFlow2.0中如何使用函数方法自定义卷积神经网络. 1. 导入数据 获取系统自带的10分类图像数据,50k张用于训练,10k张用于测试. # 10分类卷 ...
- 卷积神经网络必读的100篇经典论文,包含检测/识别/分类/分割多个领域
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 参考|学术头条 编辑|极市平台 作为深度学习的代表算法之一,卷积神经 ...
- 论文大盘点|卷积神经网络必读的100篇经典论文,包含检测/识别/分类/分割多个领域...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 转载自:极市平台 作为深度学习的代表算法之一,卷积神经网络(Convolution ...
- 大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领域
关注极市平台公众号(ID:extrememart),获取计算机视觉前沿资讯/技术干货/招聘面经等 原文链接:大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领 ...
- python神经网络构建图_如何用卷积神经网络构建图像?
原标题:如何用卷积神经网络构建图像? 原标题 |Everything you need to know to master Convolutional Neural Networks 作者 | Tir ...
- 论文笔记(二):基于卷积神经网络的高分辨率遥感图像上的水体识别技术
基于卷积神经网络的高分辨率遥感图像上的水体识别技术 作者:徐文健 作者单位:浙江大学 日期:2017.01 (硕士学位论文) https://kns.cnki.net/KCMS/detail/deta ...
最新文章
- 你需要学好知识图谱——用AI技术连接世界
- linux 命令详解 二十二
- python如何导入txt数据集-终于找到python入门到实践数据集
- C++ Primer 5th笔记(chap 19 特殊工具与技术)局部类
- VS扩展开发 一 导航
- c# AseConnection的类型初始值设定项引发异常 无法加载 DLL sybdrvado11.dll 解决办法...
- sudo: /usr/lib/sudo/sudoers.so must be owned by uid 0
- 【转】wpf和winform的区别
- iOS 测试三方 KIF 的那些事
- html 模板 引用,模板引用说明
- 微信小程序支付有云闪付支付选项,如何关闭或开通
- mitmproxy+python
- 周伟焜:杨元庆一定会带领联想成功
- 联想服务器无限重启,联想台式机无限重启的解决方法
- 30ea什么意思_ea阶段是什么?你未必全知道!
- Java final与static
- wangEditor - 支持word上传的富文本编辑器
- 【论文学习】《Generalized End-to-End Loss for Speaker Verification》
- 人力资源数据分析师前景_人力资源数据分析师——大数据下的精英岗位
- Github pages + Hexo 博客 yilia 主题使用畅言评论系统
热门文章
- 参加 CSDN 2009 英雄大会有感(一)
- quantaxis中使用docker安装,出现的问题
- 如何迁移整个git仓库
- Java原子操作类AtomicInteger应用场景
- ride上点击用例不能显示edit信息_接口测试平台代码实现61: 多接口用例1
- attention机制_简析Attention机制—优缺点,实现,应用
- webgl获取鼠标形状_三模无线搭配对称手型设计,游戏致胜利器,ROG烈刃2无线鼠标...
- Django之templates模板
- Nginx【学习笔记】
- html 二级试题,计算机二级考试WEB试题及答案