目录
基于 ResNet 的不良图片识别模型 1
摘要 1
介绍 1
研究背景 1
相关研究 2
实验方案 3
数据预处理 3
分类模型 – ResNet 4
网页展示 12
实验 12
训练情况 13
模型结果分析 18
前端展示 20
总结 26
对项目的理解 26
承担的工作 27
体会 28
参考文献 28
实验方案
数据获取及标注
由于目前网络上缺少一个公开的、具有一定标准的不良图片数据集,故本次实验采用自行获取数据并构建数据集并进行标注的方式。数据获取将结合python opencv库,将收集到的不良视频运用分帧的形式剪切为图片数据集。为保证数据的差异性,选图的决策为每个视频间隔固定时间选取 1 张的方式获取50张图片,即用总帧数除以 50作为选取图片的时间间隔。将得到的图片数据保存到本地,然后以打分的形式人工对所有图片进行标注,所选分值为 0、1、2、3。其中 0代表正常图片,1、2、3代表色情图片,并根据图片色情程度确定图片最终分值,程度越重分值越高。
数据预处理
根据我们的设计,模型有 2分类检测模型和 4分类评级模型,其中 2分类检测模型用于检测输入图片是否含有不良信息,4分类评级模型将用于对图片内容的不良程度进行评估。
根据检测模型与评级模型的区别设计了两种数据集:2 分类检测数据集和 4分类评级数据集。本文转载自http://www.biyezuopin.vip/onews.asp?id=16708其中 2分类检测数据集有两个标签:0表示图像不是不良图像,1表示图像可能含有不良内容;4分类评级数据集有 4个标签,其中 0表示不是不良图像,从 1开始,数字越高表示不良内容越严重。因此,针对 2分类检测数据集的数据标注比较好标,但是针对 4分类评级数据集的数据标注会不可避免地受到人工判断的影响导致标注界限较为模糊,进而影响模型性能,这点我们会在结果分析中进行详细说明。

import torchvision.transforms as transforms
from torchvision.datasets import ImageFolder
from torch.utils.data import DataLoader
import os
import pickledef prepare_data(in_dir='./data', out_dir='./dataset', batch_size=128):labels = os.listdir(in_dir)splited = ['train', 'test', 'dev']filenums = 0s1 = 0s2 = 0if not os.path.exists(out_dir):os.mkdir(out_dir)for kind in splited:dir_name = os.path.join(out_dir, kind)if not os.path.exists(dir_name):os.mkdir(dir_name)for label in labels:path = os.path.join(in_dir, label)files = os.listdir(path)filenums += len(files)s1_ = round(0.8 * len(files))s1 += s1_s2_ = round(0.1 * len(files))s2 += s2_s2_ += s1_#  训练集 : 测试集 : 验证集 = 8 : 1 : 1tar = os.path.join(out_dir, splited[0])tar = os.path.join(tar, label)tar = os.path.abspath(tar)os.mkdir(tar)for file in files[:s1_]:  # 训练集ori = os.path.join(path, file)ori = os.path.abspath(ori)tmp = os.popen('copy {0} {1}'.format(ori, tar))tar = os.path.join(out_dir, splited[1])tar = os.path.join(tar, label)tar = os.path.abspath(tar)os.mkdir(tar)for file in files[s1_:s2_]:  # 测试集ori = os.path.join(path, file)ori = os.path.abspath(ori)tmp = os.popen('copy {0} {1}'.format(ori, tar))tar = os.path.join(out_dir, splited[2])tar = os.path.join(tar, label)tar = os.path.abspath(tar)os.mkdir(tar)for file in files[s2_:]:  # 验证集ori = os.path.join(path, file)ori = os.path.abspath(ori)tmp = os.popen('copy {0} {1}'.format(ori, tar))print('Make data sets successfully!')print('kinds: {0}\ndata nums: {4}\ntrain nums: {1}\ntest nums: {2}\ndev nums: {3}'.format(len(labels), s1, s2, filenums-s1 - s2, filenums))make_data_loader(root_dir=out_dir, batch_size=batch_size)# for item in splited:#     to_del = os.path.join(out_dir, item)#     to_del = os.path.abspath(to_del)#     tmp = os.popen('rd /s/q {0}'.format(to_del))print('Make dataloader successfully!')def make_data_loader(root_dir='./dataset', batch_size=128):mode = ['train', 'test', 'dev']h = 56w = 56# 设置训练集train_transform = transforms.Compose([transforms.RandomResizedCrop([h, w]),  # 重置分辨率为w * h大小transforms.RandomHorizontalFlip(),  # 随机水平翻转transforms.RandomRotation(degrees=15),  # 随机旋转transforms.ToTensor(),  # 转化成Tensortransforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 正则化])train_dataset = ImageFolder(os.path.join(root_dir, mode[0]), transform=train_transform)  # 训练集数据train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True, num_workers=0)  # 加载数据to_save = os.path.join(root_dir, 'train_loader.pkl')with open(to_save, 'wb') as f:pickle.dump(train_loader, f)# 设置测试集test_transform = transforms.Compose([transforms.Resize([h, w]),  # resize到w * h大小transforms.ToTensor(),  # 转化成Tensortransforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 正则化])test_dataset = ImageFolder(os.path.join(root_dir, mode[1]), transform=test_transform)  # 测试集数据test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False, num_workers=0)to_save = os.path.join(root_dir, 'test_loader.pkl')with open(to_save, 'wb') as f:pickle.dump(test_loader, f)# 设置验证集dev_transform = transforms.Compose([transforms.Resize([h, w]),  # resize到w * h大小transforms.ToTensor(),  # 转化成Tensortransforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 正则化])dev_dataset = ImageFolder(os.path.join(root_dir, mode[2]), transform=dev_transform)  # 验证集数据dev_loader = DataLoader(dataset=dev_dataset, batch_size=batch_size, shuffle=False, num_workers=0)to_save = os.path.join(root_dir, 'dev_loader.pkl')with open(to_save, 'wb') as f:pickle.dump(dev_loader, f)def get_data_loader(in_dir='./data', out_dir='./dataset', batch_size=128):if not os.path.exists('./dataset/train_loader.pkl'):prepare_data(in_dir=in_dir, out_dir=out_dir, batch_size=batch_size)to_load = os.path.join(out_dir, 'train_loader.pkl')with open(to_load, 'rb') as f:train_loader = pickle.load(f)to_load = os.path.join(out_dir, 'test_loader.pkl')with open(to_load, 'rb') as f:test_loader = pickle.load(f)to_load = os.path.join(out_dir, 'dev_loader.pkl')with open(to_load, 'rb') as f:dev_loader = pickle.load(f)return train_loader, test_loader, dev_loaderif __name__ == '__main__':prepare_data(in_dir='./data', out_dir='./dataset', batch_size=4)



















基于Python+ResNet实现的不良图片识别模型相关推荐

  1. 用Python做了个不良图片识别系统(附源码)

    项目介绍 本项目将使用python3去识别图片是否为色情图片,会使用到PIL这个图像处理库,并且编写算法来划分图像的皮肤区域 介绍一下PIL: PIL(Python Image Library)是一种 ...

  2. TF之LiR:基于tensorflow实现手写数字图片识别准确率

    TF之LiR:基于tensorflow实现手写数字图片识别准确率 目录 输出结果 代码设计 输出结果 Extracting MNIST_data\train-images-idx3-ubyte.gz ...

  3. 《Python与硬件项目案例》— 基于Python的口罩检测与指纹识别签到系统设计

    <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 目录 <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 1 ...

  4. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  5. 基于Python通过OpenCV实现的口罩识别系统理论篇

    基于Python通过OpenCV实现的口罩识别系统理论设计篇 一.项目实现环境 基于Python 3.8.1版本 opencv-python 4.2.0.34版本 需要自己下载OpenCV的库文件,添 ...

  6. 基于Python tensorflow2.3实现的水果识别系统源码+模型+数据集,卷积神经网络的入门案例

    水果识别-基于tensorflow2.3实现 水果识别是卷积神经网络的入门案例,这里我将模型的训练.测试.保存以及使用整合在了一起,至于原理部分,大家可以参考知乎或者B站上的回答,在这里我就不赘述了 ...

  7. DL之RBM:基于RBM实现手写数字图片识别提高准确率

    DL之RBM:基于RBM实现手写数字图片识别提高准确率 目录 输出结果 设计代码 输出结果 设计代码 import numpy as np import matplotlib.pyplot as pl ...

  8. 小福利,通过python利用百度ai实现图片识别

    大家好,我是天空之城,今天给大家带来小福利,通过python利用百度ai实现图片识别.有兴趣加qq群,纯学习,1098016198. 至于api接口的APP_ID ,API_KEY ,SECRECT_ ...

  9. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)

    目录 <Python与硬件项目案例>- 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇) 概述 参考代码 <Python与硬件项目案例>- 基于Python与 ...

  10. ML之K-means:基于(完整的)手写数字图片识别数据集利用K-means算法实现图片聚类

    ML之K-means:基于(完整的)手写数字图片识别数据集利用K-means算法实现图片聚类 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 metrics.adjusted_ran ...

最新文章

  1. DTD – XML 构建模块概述
  2. 浙江大学首次跻身全球50强,上海交大论文发表量全球第四 | QS最新世界大学排名...
  3. confusion_matrix函数的使用
  4. 汇编语言--单步中断
  5. QoS策略及通过BGP传播—Vecloud微云
  6. 构建LAMP平台(一)(软件版本:httpd-2.4.16,php-5.6.12,mysql-5.6.26)
  7. Python爬虫-代理ip池建立
  8. 了解如何通过Python使用SQLite数据库
  9. 敏捷开发系列学习总结(17)——团队需要Scrum Master做这六件事
  10. 谷歌地图的离线地图下载
  11. ios微信小程序下拉刷新怎么配_浅谈微信小程序中的下拉刷新和上拉加载
  12. 开端-从c语言入门到不放弃
  13. 按键精灵-自动化脚本
  14. 集群搭建——SGE与PBS
  15. 在Docker容器中使用iptables时的最小权限的开启方法
  16. android拷机获取内存使用的脚本
  17. Java 扫描识别条形码图片
  18. python足球数据可视化_欧洲足球,5大联赛!Python爬虫数据可视化带你解析经典赛事...
  19. 自增,自减(java为例)
  20. 故障树算法JAVA实现

热门文章

  1. Android 仿微博客户端 ViewPaper
  2. 计算机平均成绩等级公式,全国高校计算机等级考4.doc
  3. 数学建模-多元线性回归
  4. 为什么要学习Go语言?
  5. 开发你的第一个BLE应用程序—Blinky
  6. 更改文字颜色为红色HTMl语言,怎样用css将文字改为红色?
  7. Activiti工作流表结构详解
  8. 软考网络工程师备考建议【经验教训】
  9. linux误删除文件恢复
  10. 在Linux上恢复误删除的文件或目录