1.本人安装的环境为python3.7,pacharm1.1,windows系统
详细代码见这里
2.预处理
- 导入train data里面的图片
- 异常数据清理:训练集中大约包含了一些非猫或狗的图像,这些图片属于离群数据,可能会影响模型精度,需要移除。可以利用ImageNet预训练模型可以找出非猫或狗的图片以确定要清理哪些图片。鉴于时间原因且数据量不是太大,采用了人工挑选异常图片,这种方法并不推荐用于大数据集上,这些异常图片文件名如下:
cat.4688.jpg,cat.5418.jpg,cat.7377.jpg,cat.7564.jpg,cat.8100.jpg,cat.8456.jpg,cat.10029.jpg,cat.12272.jpg,dog.1259.jpg,dog.1895.jpg,dog.4367.jpg,dog.8736.jpg,dog.9517.jpg,dog.10190.jpg,dog.11299.jpg。 - .将第一步处理好的图片解码成为三维数组,然后将图片裁剪和补充进行标准化处理,转化为tensorflow能够识别的格式,分批次返回.
- pre_process.py
def get_files(file_dir):
cats = []
dogs = []
cats_label = []
dogs_label = []
img_dirs = os.listdir(file_dir)#读取文件名下所有!目录名(列表形式)
for img_name in img_dirs:# cat.0.jpg
name = img_name.split(".")# ['cat', '0', 'jpg']
if name[0] == "cat":
cats.append(file_dir + img_name)#此处不可以省为img_name,下个函数tf.train.slice_input_producer读取的是地址!!
cats_label.append(0)
else:
if name[0] == "dog":
dogs.append(file_dir + img_name)
dogs_label.append(1)
img_list = np.hstack((cats, dogs))#列表(字符串形式)
label_list = np.hstack((cats_label, dogs_label))#列表(整数形式)
return img_list, label_list
#############################################
def get_batch(image, label, image_w, image_h, batch_size, capacity):#capacity: 队列中 最多容纳图片的个数
input_queue = tf.train.slice_input_producer([image, label])#tf.train.slice_input_producer是一个tensor生成器,作用是
# 按照设定,每次从一个tensor列表中按顺序或者随机抽取出一个tensor放入文件名队列。
label = input_queue[1]
img_contents = tf.read_file(input_queue[0])#一维
image = tf.image.decode_jpeg(img_contents, channels=3)#解码成三维矩阵
image = tf.image.resize_image_with_crop_or_pad(image, image_w, image_h)
image = tf.cast(image, tf.float32)
image = tf.image.per_image_standardization(image)
# 生成批次 num_threads 有多少个线程根据电脑配置设置
image_batch, label_batch = tf.train.batch([image, label], batch_size=batch_size, num_threads=64, capacity=capacity)
return image_batch, label_batch
- 训练集划分验证集:通常模型训练时需要在验证集上观察评估指标是否达到要求,而本项目只提供了训练集和测试集,所以需要从训练集中划分一部分数据作为验证集,使用4:1的比例从训练集中随机挑选出一部分图片作为验证集。(可选)
- build_valiation_data.py
def build_valiation_data(src_dir, target_dir, validation_ratio):
if not os.path.exists(target_dir):
os.makedirs(target_dir)
files = os

该博客介绍了在Windows系统下,使用Python3.7和PyCharm进行猫狗识别项目的过程。首先,作者提到预处理阶段,包括利用ImageNet预训练模型筛选并移除异常数据,对图像进行解码、裁剪、标准化处理。接着,详细阐述了如何从训练集中划分验证集,并提供了相关脚本。最后,项目包含了model.py、train.py和test.py三个关键步骤的实现。
最低0.47元/天 解锁文章
1857

被折叠的 条评论
为什么被折叠?



