CIFAR是一个用于普通物体识别的数据集。CIFAR数据集分为两种:CIFAR-10和CIFAR-100。The CIFAR-10 and CIFAR-100 are labeled subsets of the 80 million tiny images dataset. They were collected by Alex Krizhevsky, Vinod Nair, and Geoffrey Hinton.

CIFAR-10由60000张大小为32*32的三通道彩色图像组成,被分为10类,分别为airplane、automobile、bird、cat、deer、dog、frog、horse、ship、truck。每类由6000张图像。其中50000张图像用来训练,10000张图像用来测试。数据集分为5个训练块和1个测试块,每个块包含10000张图像.训练集每类包含5000张图像,测试集每类包含1000张图像.

CIFAR-100由60000张大小为32*32的三通道彩色图像组成,分为20个大类,每个大类又包含5个小类,总共100个小类。每个小类包含600张图像,其中500张用于训练,100张用于测试。

从https://www.cs.toronto.edu/~kriz/cifar.html 下载CIFAR C版本的二进制数据:

(1)、CIFAR-10:下载cifar-10-binary.tar.gz,解压缩,共8个文件,batches.meta.txt中存放10个种类名,data_batch_1.bin… data_batch_5.bin、test_batch.bin共6个文件,每个文件中存放10000张图像数据。

(2)、CIFAR-100:下载cifar-100-binary.tar.gz,解压缩,共5个文件,coarse_label_names.txt中存放20个大类名,fine_label_names.txt中存放100个小类名,train.bin中存放50000张训练图像,test.bin中存放10000张测试图像。

CIFAR数据集到图像转换实现的代码如下:

static void write_image_cifar(const cv::Mat& bgr, const std::string& image_save_path, const std::vector<int>& label_count, int label_class)
{std::string str = std::to_string(label_count[label_class]);if (label_count[label_class] < 10) {str = "0000" + str;} else if (label_count[label_class] < 100) {str = "000" + str;} else if (label_count[label_class] < 1000) {str = "00" + str;} else if (label_count[label_class] < 10000) {str = "0" + str;} else {fprintf(stderr, "save image name fail\n");return;}str = std::to_string(label_class) + "_" + str + ".png";str = image_save_path + str;cv::imwrite(str, bgr);
}static void read_cifar_10(const std::string& bin_name, const std::string& image_save_path, int image_count, std::vector<int>& label_count)
{int image_width = 32;int image_height = 32;std::ifstream file(bin_name, std::ios::binary);if (file.is_open()) {for (int i = 0; i < image_count; ++i) {cv::Mat red = cv::Mat::zeros(image_height, image_width, CV_8UC1);cv::Mat green = cv::Mat::zeros(image_height, image_width, CV_8UC1);cv::Mat blue = cv::Mat::zeros(image_height, image_width, CV_8UC1);int label_class = 0;file.read((char*)&label_class, 1);label_count[label_class]++;file.read((char*)red.data, 1024);file.read((char*)green.data, 1024);file.read((char*)blue.data, 1024);std::vector<cv::Mat> tmp{ blue, green, red };cv::Mat bgr;cv::merge(tmp, bgr);write_image_cifar(bgr, image_save_path, label_count, label_class);}file.close();}
}int CIFAR10toImage()
{std::string images_path = "E:/GitCode/NN_Test/data/database/CIFAR/CIFAR-10/";// train imagestd::vector<int> label_count(10, 0);for (int i = 1; i <= 5; i++) {std::string bin_name = images_path + "data_batch_" + std::to_string(i) + ".bin";std::string image_save_path = "E:/GitCode/NN_Test/data/tmp/cifar-10_train/";int image_count = 10000;read_cifar_10(bin_name, image_save_path, image_count, label_count);}// test imagestd::fill(&label_count[0], &label_count[0] + 10, 0);std::string bin_name = images_path + "test_batch.bin";std::string image_save_path = "E:/GitCode/NN_Test/data/tmp/cifar-10_test/";int image_count = 10000;read_cifar_10(bin_name, image_save_path, image_count, label_count);// save big imagsimages_path = "E:/GitCode/NN_Test/data/tmp/cifar-10_train/";int width = 32 * 20;int height = 32 * 10;cv::Mat dst(height, width, CV_8UC3);for (int i = 0; i < 10; i++) {for (int j = 1; j <= 20; j++) {int x = (j - 1) * 32;int y = i * 32;cv::Mat part = dst(cv::Rect(x, y, 32, 32));std::string str = std::to_string(j);if (j < 10)str = "0000" + str;elsestr = "000" + str;str = std::to_string(i) + "_" + str + ".png";std::string input_image = images_path + str;cv::Mat src = cv::imread(input_image, 1);if (src.empty()) {fprintf(stderr, "read image error: %s\n", input_image.c_str());return -1;}src.copyTo(part);}}std::string output_image = images_path + "result.png";cv::imwrite(output_image, dst);return 0;
}static void write_image_cifar(const cv::Mat& bgr, const std::string& image_save_path,const std::vector<std::vector<int>>& label_count, int label_class_coarse, int label_class_fine)
{std::string str = std::to_string(label_count[label_class_coarse][label_class_fine]);if (label_count[label_class_coarse][label_class_fine] < 10) {str = "0000" + str;} else if (label_count[label_class_coarse][label_class_fine] < 100) {str = "000" + str;} else if (label_count[label_class_coarse][label_class_fine] < 1000) {str = "00" + str;} else if (label_count[label_class_coarse][label_class_fine] < 10000) {str = "0" + str;} else {fprintf(stderr, "save image name fail\n");return;}str = std::to_string(label_class_coarse) + "_" + std::to_string(label_class_fine) + "_" + str + ".png";str = image_save_path + str;cv::imwrite(str, bgr);
}static void read_cifar_100(const std::string& bin_name, const std::string& image_save_path, int image_count, std::vector<std::vector<int>>& label_count)
{int image_width = 32;int image_height = 32;std::ifstream file(bin_name, std::ios::binary);if (file.is_open()) {for (int i = 0; i < image_count; ++i) {cv::Mat red = cv::Mat::zeros(image_height, image_width, CV_8UC1);cv::Mat green = cv::Mat::zeros(image_height, image_width, CV_8UC1);cv::Mat blue = cv::Mat::zeros(image_height, image_width, CV_8UC1);int label_class_coarse = 0;file.read((char*)&label_class_coarse, 1);int label_class_fine = 0;file.read((char*)&label_class_fine, 1);label_count[label_class_coarse][label_class_fine]++;file.read((char*)red.data, 1024);file.read((char*)green.data, 1024);file.read((char*)blue.data, 1024);std::vector<cv::Mat> tmp{ blue, green, red };cv::Mat bgr;cv::merge(tmp, bgr);write_image_cifar(bgr, image_save_path, label_count, label_class_coarse, label_class_fine);}file.close();}
}int CIFAR100toImage()
{std::string images_path = "E:/GitCode/NN_Test/data/database/CIFAR/CIFAR-100/";// train imagestd::vector<std::vector<int>> label_count;label_count.resize(20);for (int i = 0; i < 20; i++) {label_count[i].resize(100);std::fill(&label_count[i][0], &label_count[i][0] + 100, 0);}std::string bin_name = images_path + "train.bin";std::string image_save_path = "E:/GitCode/NN_Test/data/tmp/cifar-100_train/";int image_count = 50000;read_cifar_100(bin_name, image_save_path, image_count, label_count);// test imagefor (int i = 0; i < 20; i++) {label_count[i].resize(100);std::fill(&label_count[i][0], &label_count[i][0] + 100, 0);}bin_name = images_path + "test.bin";image_save_path = "E:/GitCode/NN_Test/data/tmp/cifar-100_test/";image_count = 10000;read_cifar_100(bin_name, image_save_path, image_count, label_count);// save big imagsimages_path = "E:/GitCode/NN_Test/data/tmp/cifar-100_train/";int width = 32 * 20;int height = 32 * 100;cv::Mat dst(height, width, CV_8UC3);std::vector<std::string> image_names;for (int j = 0; j < 20; j++) {for (int i = 0; i < 100; i++) {std::string str1 = std::to_string(j);std::string str2 = std::to_string(i);std::string str = images_path + str1 + "_" + str2 + "_00001.png";cv::Mat src = cv::imread(str, 1);if (src.data) {for (int t = 1; t < 21; t++) {if (t < 10)str = "0000" + std::to_string(t);elsestr = "000" + std::to_string(t);str = images_path + str1 + "_" + str2 + "_" + str + ".png";image_names.push_back(str);}}}}for (int i = 0; i < 100; i++) {for (int j = 0; j < 20; j++) {int x = j * 32;int y = i * 32;cv::Mat part = dst(cv::Rect(x, y, 32, 32));cv::Mat src = cv::imread(image_names[i * 20 + j], 1);if (src.empty()) {fprintf(stderr, "read image fail: %s\n", image_names[i * 20 + j].c_str());return -1;}src.copyTo(part);}}std::string output_image = images_path + "result.png";cv::imwrite(output_image, dst);cv::Mat src = cv::imread(output_image, 1);if (src.empty()) {fprintf(stderr, "read result image fail: %s\n", output_image.c_str());return -1;}for (int i = 0; i < 4; i++) {cv::Mat dst = src(cv::Rect(0, i * 800, 640, 800));std::string str = images_path + "result_" + std::to_string(i + 1) + ".png";cv::imwrite(str, dst);}return 0;
}

cifar-10转换的结果如下:

cifar-100转换的结果如下:


GitHub:https://github.com/fengbingchun/NN_Test

cifar数据集介绍及到图像转换的实现相关推荐

  1. FFmpeg源码分析:sws_scale图像缩放与图像转换

    FFmpeg在libswscale模块提供图像缩放与图像转换功能,比如1080P图像缩放为720P,或者YUV422P转换为YUV420P.图像缩放函数有个SwsContext结构体作为上下文,上一篇 ...

  2. DL之CycleGAN:基于TF利用CycleGAN模型对apple2orange数据集实现图像转换—训练测试过程全记录

    DL之CycleGAN:基于TF利用CycleGAN模型对apple2orange数据集实现图像转换-训练&测试过程全记录 目录 apple2orange数据集 输出结果 训练&测试过 ...

  3. camvid数据集介绍_深度学习图像数据集介绍(MSCOCO)

    深度学习图像数据集介绍(MSCOCO) MSCOCO数据集是微软开发维护的大型图像数据集,次数聚集的任务包括识别(recognition),分割(segementation),及检测(detectio ...

  4. 小白菜病害检测图像数据集介绍

    小白菜病害检测图像数据集介绍 小白菜病害情况介绍 小白菜病害主要有病毒病.软腐病.霜霉病.黑斑病等,虫害主要有蚜虫.白粉虱.烟粉虱.菜青虫.甜菜夜蛾.小菜蛾.黄曲条跳甲等. 1 农业措施 ①合理轮作. ...

  5. 深度学习常用的训练数据集介绍以及下载

    前言:数据是深度学习的血液,本文介绍一下当前非常常见的一些数据集. 1 ImageNet ImageNet是一个计算机视觉系统识别项目,是目前世界上图像识别最大的数据库.是美国斯坦福的计算机科学家李飞 ...

  6. 深度学习常用数据集介绍

    数据集大全 数据集大全 介绍 目前接触到的数据集 1. [MNIST](http://yann.lecun.com/exdb/mnist/) 2. [CIFAR-10 / CIFAR-100](htt ...

  7. Github大热论文 | U-GAT-IT:基于GAN的新型无监督图像转换

    作者丨武广 学校丨合肥工业大学硕士生 研究方向丨图像生成 生成对抗网络(GAN)在这几年的发展下已经渐渐沉淀下来,在网络的架构.训练的稳定性控制.模型参数设计上都有了指导性的研究成果.我们可以看出 1 ...

  8. (一)带有图像到图像转换的移动风格迁移

    目录 介绍 图像到图像的转换 生成对抗学习 我们系列中的CycleGAN 下一步 下载项目代码 - 7.2 MB 介绍 在本系列文章中,我们将展示一个基于循环一致对抗网络(CycleGAN)的移动图像 ...

  9. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了. 在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简 ...

最新文章

  1. 《R in Action》读书笔记(1)
  2. 如何根据灰度直方图计算标准差_如何根据电器功率计算电线的粗细?
  3. php atlas,apache atlas是什么
  4. openmv探索_1_helloworld
  5. linux软盘镜像下载,Linux系统各发行版镜像下载(持续更新)
  6. 叫号系统服务器,排队叫号系统设置方法
  7. 计算机四级网络工程师需要看哪些书,计算机四级网络工程师考试教材
  8. 矩阵键盘焊接_如何更换和重新焊接机械键盘开关
  9. 2019年下半年软件设计师上午真题及答案解析
  10. (转)文通慧视的用法
  11. grep查找文件内容
  12. 《亲密关系》笔记(1)
  13. word文档找不到smartart_Word2016文档中插入SmartArt图形并添加文本的方法
  14. WEB前端--Day9(动画)
  15. java枚举ordinal()接口怎么用,java.lang.Enum.ordinal()方法实例
  16. MATLAB中的偏最小二乘回归(PLSR)和主成分回归(PCR)
  17. tsp matlab,TSP matlab
  18. .假设一个简单的ATM机的取款过程是这样的:首先提示用户输入密码(password),最多只能输入三次,超过三次则提示用户“密码错误,请取卡”结束交易。
  19. JUnit和mockito
  20. Interpretability Beyond Feature Attribution: Quantitative Testing with Concept Activation Vectors

热门文章

  1. 随笔:计算机编程中的一些术语
  2. 基于pytorch的卷积神经网络量化实现
  3. 基于自适应逆透视变换的车道线SLAM
  4. 一个精简的开源点云库
  5. AR设备单目视觉惯导SLAM算法综述与评价
  6. C++中的 istringstream
  7. [转]ASP.NET1.0升级ASP.NET2.0问题总结
  8. dedecms部分文章出现读取附加信息出错的解决办法
  9. 吴裕雄--天生自然 JAVASCRIPT开发学习:(String) 对象
  10. 多线程共享全局变量以及锁机制