YGXY简答题:
- 确认标注的目标:如车辆、来往行人、交通标志、信号灯等
- 选择标注工具:如使用开源工具labeling
- 绘制边框:使用标注工具在标注对象周围绘制出紧密贴合的矩形框,边框需准确覆盖目标范围
- 添加标签:为当前绘制的边框添加相应的标签
- 保持标注结果:当前图片和标注信息使用相同命名
存在的问题:
- 采集数据未获得相关部门审批
- 数据采集的方法太过单一,效率较低
优化方案:
- 确认采集的目标
- 自行采集,问卷调查
- 通过互联网(爬虫技术)进行采集
- 向相关机构申请已经采集的数据
- 数据存储:存储到指定硬盘或网络存储
- 删除重复数据:如删除XXX
- 去除模糊/缺陷图片:如删除XXX
- 处理异常图片:如删除XXX
- 数据格式错误:如删除XXX
- 重命名不一致名称:如删除XXX
- 降低模型的复杂度
- 增加训练数据
- 进行数据清洗:数据量过大,尽量不安排全样检测;不要安排原有标注员进行检测
3 模型导入
model=tf.keras.models.load_model('znxl002.h5')
4 算法测试(评估)
model.evaluate(test_image, test_label)
3 模型导入[ ]:
model=tf.keras.models.load_model('znxlsj003.h5')
4 设计预测predict_fun()函数[ ]:
def predict_fun(img):
img=tf.expand_dims(img,0)
return model.predict(img)
5 用predict_fun()函数预测指定的图片[ ]:
print(class_label[np.argmax(y1)])
print(class_label[np.argmax(y2)])
print(class_label[np.argmax(y3)])
获取图像文件名并打乱
## 获取图片文件名并打乱
image_path = './data_force/'
# 获取data目录下所有文件名,filename_list用于存放目录下的文件名称
filename_list = os.listdir(image_path)
# 将后缀为'.jpg'的文件名放入filename_list列表中
filename_list = [file for file in filename_list if (file.split('.')[-1] == 'png')]
# 图片文件数量
num = len(filename_list)
# 打乱文件名称顺序
random.shuffle(filename_list)
# 输出乱序后的图片文件名列表
print('共{}图片,文件名列表:'.format(num))
print(filename_list)
## 图像处理
# 随机将源数据的50%的图片进行水平翻转
flip_num = int(num * 0.5) # 定义翻转图片数量
flipped_img_list = [] # 翻转后图片存储的列表
for n in range(flip_num):
# 水平翻转img_list中的图像
flipped_img = cv2.filp(img_list[n], 1)
# 翻转后存入flipped_img列表中
flipped_img_list.append(flipped_img)
print('图像翻转成功!!!')
# 随机将源数据的40%的图片旋转15度
random.shuffle(img_list) # 打乱列表中图像的顺序
rotate_num = int(num * 0.4) # 定义旋转图片数量
rotated_img_list = [] # 旋转后图片存储的列表
for n in range(rotate_num):
# 获取图像高度、宽度
height, width = img_list[n].shape[0:2]
# 将图像中心设为旋转中心
center = (width / 2, height / 2)
angle = 15 # 旋转角度
scale = 1.0 # 缩放比例
# 生成旋转举证
M = cv2.getRotationMatrix2D(center, angle, scale)
# 使用旋转矩阵旋转图片(仿射变换)
rotated_img = cv2.warpAffine(img_list[n], M, (width, height))
# 旋转后存入rotated_img列表中
rotated_img_list.append(rotated_img)
print('图像旋转成功!!!')
图像保存
# 定义图像保存路径
img_save_path = './123/'
# 如果路径不存在则创建文件夹
if not os.path.exists(img_save_path):
os.makedirs(img_save_path)
# 保存翻转后的图像
for n in range(flip_num):
cv2.imwrite((img_save_path + 'flipped_{}.jpg').format(n), flipped_img_list[n]) # 图像保存
print('翻转后的图像保存成功!!!')
# 保存旋转后的图像
for n in range(rotate_num):
cv2.imwrite((img_save_path + 'rotated_{}.jpg').format(n), rotated_img_list[n]) # 图像保存
print('旋转后的图像保存成功!!!')
记事本打开另一个
import cv2 #打开文件的库opencv
import os #读取文件的库
# 配置路径
image_path = "./data_force/" # 原始图片路径
# 读取所有图片文件名
filename_list = [f for f in os.listdir(image_path) if f.endswith(('.jpg', '.jpeg', '.png'))]
num = len(filename_list) #获取长度
img_list = [] #定义空列表(装新路径的地址+名称)
print(filename_list)
# 读取图片并存入列表
for filename in filename_list:
img = cv2.imread(image_path + filename) # <1> 读取图片
img_list.append(img)
if(len(img_list) == num):
print("读取图像成功!!!")
print(img_list)
# 翻转15%的图片(垂直翻转,参数0表示垂直翻转)
flip_num = int(num * 0.15)
for n in range(flip_num):
img_list[n] = cv2.filp(img_list[n], 0) # <2> 垂直翻转图片
print("图像翻转成功!!!")
# 将人脸图片放大至2倍
for n in range(num):
height, width = img_list[n].shape[0:2] #取图片属性中的前面两个属性;
img_list[n] = cv2.resize(img_list[n], (width*2, height*2)) # <3> 放大图片
print("图像放大成功!!!")
img_save_path = "../abc/"
if not os.path.exists(img_save_path):
os.makedirs(img_save_path)
# 保存处理后的图片
for n in range(num):
cv2.imwrite(img_save_path + filename_list[n], img_list[n]) # <4> 保存图片
print(f"{filename_list[n]} 保存成功")
保存-mts python data_force.py-运行
# 1.导入comment.csv
comment_df = pd.read_csv('comment_csv')
# 查看数据集信息
comment_df
# 2.找到导入表格中的“节目评分”一列,将列中的空值用平均数填充
comment_df['节目评分'] = comment_df['节目评分'].fillna(comment_df
['节目评分'].mean())
# 查看数据集信息
comment_df
# 3.找到导入表格中的“评论”一列,将其中为空值的行整行删除
comment_cleaned_df = comment_df.dropna(subset=['评论'])
#查看数据集信息
comment_cleaned_df
# 4.找到导入表格中的“用户”一列,将列中的空值用中位数填充
comment_df['用户'] =comment_df['用户'].fillna(comment_df['用户'].median())
# 查看数据集信息
comment_df
# 5.保存新表格命名为“2.1-comment_cleaned.csv”
comment_cleaned_df.to_csv('./2.1-comment_cleaned.csv',index = False)
# 1.导入comment.csv
comment_df = pd.read_csv('comment.csv')
# 查看数据集信息
comment_df
# 2.将“节目评分”列中的空值用数字“3”填充
comment_df['节目评分'] = comment_df['节目评分'].fillna('3')
# 查看数据集信息
comment_df
# 3.将表格中的字符‘&’删除
comment_df['评论'] = comment_df['评论'].str.replace('&', '')
comment_df['评论时间'] = comment_df['评论时间'].str.replace('&', '')
# 查看数据集信息
comment_df
# 4.保存新表格命名为“2.1-comment_cleaned.csv”
comment_df.to_csv('./2.1-comment_cleaned.csv', index = False)