帮人做网站要怎么赚钱,哪个网站做二手车买卖,网站建设案例知名 乐云践新,微网站建设的三个步骤目标检测一直是计算机视觉中比较热门的研究领域#xff0c;有一些常用且成熟的算法得到业内公认水平#xff0c;比如RCNN系列算法、SSD以及YOLO等。如果你是从事这一行业的话#xff0c;你会使用哪种算法进行目标检测任务呢#xff1f;在我寻求在最短的时间内构建最精确的模…目标检测一直是计算机视觉中比较热门的研究领域有一些常用且成熟的算法得到业内公认水平比如RCNN系列算法、SSD以及YOLO等。如果你是从事这一行业的话你会使用哪种算法进行目标检测任务呢在我寻求在最短的时间内构建最精确的模型时我尝试了其中的R-CNN系列算法如果读者们对这方面的算法还不太了解的话建议阅读《目标检测算法图解一文看懂RCNN系列算法》。在掌握基本原理后下面进入实战部分。 本文将使用一个非常酷且有用的数据集来实现faster R-CNN这些数据集具有潜在的真实应用场景。 问题陈述 数据来源于医疗相关数据集目的是解决血细胞检测问题。任务是通过显微图像读数来检测每张图像中的所有红细胞RBC、白细胞WBC以及血小板。最终预测效果应如下所示 选择该数据集的原因是我们血液中RBC、WBC和血小板的密度提供了大量关于免疫系统和血红蛋白的信息这些信息可以帮助我们初步地识别一个人是否健康如果在其血液中发现了任何差异我们就可以迅速采取行动来进行下一步的诊断。 通过显微镜手动查看样品是一个繁琐的过程这也是深度学习模式能够发挥重要作用的地方一些算法可以从显微图像中分类和检测血细胞并且达到很高的精确度。 本文采用的血细胞检测数据集可以从这里下载本文稍微修改了一些数据
边界框已从给定的.xml格式转换为.csv格式随机划分数据集得到训练集和测试集
这里使用流行的Keras框架构建本文模型。
系统设置 在真正进入模型构建阶段之前需要确保系统已安装正确的库和相应的框架。运行此项目需要以下库
pandasmatplotlibtensorflowkeras – 2.0.3numpyopencv-pythonsklearnh5py对于已经安装了Anaconda和Jupyter的电脑而言上述这些库大多数已经安装好了。建议从此链接下载requirements.txt文件并使用它来安装剩余的库。在终端中键入以下命令来执行此操作
pip install -r requirement.txt 系统设置好后下一步是进行数据处理。
数据探索 首先探索所拥有的数据总是一个好开始坦率地说这是一个强制性的步骤。对数据熟悉有助于挖掘隐藏的模式还可以获得对整体的洞察力。本文从整个数据集中创建了三个文件分别是
train_images用于训练模型的图像包含每个图像的类别和实际边界框test_images用于模型预测的图像该集合缺少对应的标签train.csv包含每个图像的名称、类别和边界框坐标。一张图像可以有多行数据因为单张图像可能包含多个对象读取.csv文件并打印出前几行
# importing required libraries
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib import patches# read the csv file using read_csv function of pandas
train pd.read_csv(‘train.csv’)
train.head() 训练文件中总共有6列其中每列代表的内容如下
image_names图像的名称cell_type表示单元的类型xmin图像左下角的x坐标xmax图像右上角的x坐标ymin图像左下角的y坐标ymax图像右上角的y坐标下面打印出一张图片来展示正在处理的图像
# reading single image using imread function of matplotlib
image plt.imread(images/1.jpg)
plt.imshow(image) 上图就是血细胞图像的样子其中蓝色部分代表WBC略带红色的部分代表RBC。下面看看整个训练集中总共有多少张图像和不同类型的数量。
# Number of classes
train[cell_type].value_counts() 结果显示训练集有254张图像。
# Number of classes
train[cell_type].value_counts() 结果显示有三种不同类型的细胞即RBCWBC和血小板。最后看一下检测到的对象的图像是怎样的
fig plt.figure()#add axes to the image
ax fig.add_axes([0,0,1,1])# read and plot the image
image plt.imread(images/1.jpg)
plt.imshow(image)# iterating over the image for different objects
for _,row in train[train.image_names 1.jpg].iterrows():xmin row.xminxmax row.xmaxymin row.yminymax row.ymaxwidth xmax - xminheight ymax - ymin# assign different color to different classes of objectsif row.cell_type RBC:edgecolor rax.annotate(RBC, xy(xmax-40,ymin20))elif row.cell_type WBC:edgecolor bax.annotate(WBC, xy(xmax-40,ymin20))elif row.cell_type Platelets:edgecolor gax.annotate(Platelets, xy(xmax-40,ymin20))# add bounding boxes to the imagerect patches.Rectangle((xmin,ymin), width, height, edgecolor edgecolor, facecolor none)ax.add_patch(rect) 上图就是训练样本示例从中可以看到细胞有不同的类及其相应的边界框。下面进行模型训练本文使用keras_frcnn库来训练搭建的模型以及对测试图像进行预测。
faster R-CNN实现 为了实现 faster R-CNN算法本文遵循此Github存储库中提到的步骤。因此首先请确保克隆好此存储库。打开一个新的终端窗口并键入以下内容以执行此操作
git clone https://github.com/kbardool/keras-frcnn.git 并将train_images和test_images文件夹以及train.csv文件移动到该存储库目录下。为了在新数据集上训练模型输入的格式应为
filepath,x1,y1,x2,y2,class_name
其中
filepath是训练图像的路径x1是边界框的xmin坐标y1是边界框的ymin坐标x2是边界框的xmax坐标y2是边界框的ymax坐标class_name是该边界框中类的名称这里需要将.csv格式转换为.txt文件该文件具有与上述相同的格式。创建一个新的数据帧按照格式将所有值填入该数据帧然后将其另存为.txt文件。
data pd.DataFrame()
data[format] train[image_names]# as the images are in train_images folder, add train_images before the image name
for i in range(data.shape[0]):data[format][i] train_images/ data[format][i]# add xmin, ymin, xmax, ymax and class as per the format required
for i in range(data.shape[0]):data[format][i] data[format][i] , str(train[xmin][i]) , str(train[ymin][i]) , str(train[xmax][i]) , str(train[ymax][i]) , train[cell_type][i]data.to_csv(annotate.txt, headerNone, indexNone, sep ) 下一步进行模型训练使用train_frcnn.py文件来训练模型。
cd keras-frcnn
python train_frcnn.py -o simple -p annotate.txt 由于数据集较大需要一段时间来训练模型。如果条件满足的话可以使用GPU来加快训练过程。同样也可以尝试减少num_epochs参数来加快训练过程。 模型每训练好一次有改进时该特定时刻的权重将保存在与“model_frcnn.hdf5”相同的目录中。当对测试集进行预测时将使用到这些权重。 根据机器的配置可能需要花费大量时间来训练模型并获得权重。建议使用本文训练大约500个时期的权重作为初始化。可以从这里下载这些权重并设置好相应的路径。 因此当模型训练好并保存好权重后下面进行预测。Keras_frcnn对新图像进行预测并将其保存在新文件夹中这里只需在test_frcnn.py文件中进行两处更改即可保存图像 从该文件的最后一行删除注释 cv2.imwrite./ results_imgs / {}。png.formatidximg 在此文件的倒数第二行和第三行添加注释 cv2.imshowimgimg cv2.waitKey0使用下面的代码进行图像预测
python test_frcnn.py -p test_images 最后检测到对象的图像将保存在“results_imgs”文件夹中。以下是本文实现faster R-CNN后预测几个样本获得的结果 总结 R-CNN算法确实是用于对象检测任务的变革者改变了传统的做法并开创了深度学习算法。近年来计算机视觉应用的数量突然出现飙升而R-CNN系列算法仍然是其中大多数应用的核心。 Keras_frcnn也被证明是一个很好的对象检测工具库在本系列的下一篇文章中将专注于更先进的技术如YOLOSSD等。 原文链接 本文为云栖社区原创内容未经允许不得转载。