在机器学习和神经网络中,关于猫狗的识别就像各语言的hello world一样,我也不例外,神经网络是一种监督学习方法,预想取之必先与之,所以首先是数据标注,通过labelme进行数据标注,将图片和标签进行关联,再通过神经网络对图片和标签进行训练也就是学习的过程,最后通过测试集进行模型预测也就是验证的过程。
题外话,数据标注现在已经成了一门产业,无论是图像识别,还是自然语言处理,还是语音文字互转,
猫狗数据集的下载链接如下:https://pan.baidu.com/s/1tJQIY0ob2EyQn3cDipPkow?pwd=7gch
提取码:7gch
猫狗数据集包含两个目录,一个是训练集目录一个测试集目录。
训练集目录有25000张照片, 文件名格式为cat/dog+序号的方式,混合放置在同一目录
测试集目录有12500 张照片,文件名均为序号,猫狗照片混合放置。
照片太多了,而且我们只是进行数据标注测试,确保最小的数据集即可,按照标注的要求,至少50张照片起,因此在训练集中找各25张猫狗照片。
数据标注目录的设定,我是参考了一下网上的要求:首先设定catdog作为根目录,下面依此建如下目录:
img_data: 存放你要标注的所有图片
data_annotated: 存放后续标注好的所有json文件
label.txt: 所有类别
关于labelme的运行目录很有讲究,建议在catdog目录下运行labelme命令,并指定labels选项,这样可以将label.txx的label指定到labelme的label list中。
(venv) PS D:\JetBrains\PycharmProjects\pytorch38\yolov5\catdog> labelme --labels label.txt
labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发的图像标注工具,人们可以使用该工具创建定制化标注任务或执行图像标注。
菜单栏功能部分:
Open : 打开图片文件,通过点击命令或者快捷键即可运行。打开文件后,右侧文件列表会显示在同一目录下的所有文件,点击文件列表中的文件即可进行切换。图片格式支持jpg、png、gif、bmp、jpeg等
Next Image:切换至下一张图片,若无下一张图片,会弹出窗口提醒用户,通过点击命令或者快捷键即可运行。3d状态下会切换当前聚焦视角的图片,可通过鼠标点击切换聚焦视角。
Prev Image :切换至上一张图片,若无上一张图片,会弹出窗口提醒用户,通过点击命令或者快捷键即可运行。3d状态下会切换当前聚焦视角的图片,可通过鼠标点击切换聚焦视角。
Open Dir:打开文件夹,通过点击或者快捷键即可运行。打开文件夹默认会显示文件夹中的第一张图片,同时右侧文件列表也会显示文件夹里的所有图片,点击文件列表中的文件可以进行文件切换。
Import:导入标注文件,通过点击即可运行。标注文件的样例文件请参考此处。
Save : 保存文件,通过点击或者快捷键即可运行。会将对标注的更改进行保存,写入默认标注文件中。
Close : 关闭当前文件,通过点击或者快捷键即可运行。
Quit : 退出程序,通过点击或者快捷键即可运行
Create Brush :
2d状态下:创建画刷形状,通过点击或者快捷键即可运行。创建画刷形状用于进行分割标注,在想要进行标注的区域,点击鼠标即可进行绘制,绘制完毕后按下回车键即可键入标注文字,添加标注。
3d状态下:创建画刷形状,在任意视角任意图片直接点击鼠标进行绘制即可,绘制完毕后按下回车键,键入标注文字即可添加标注。
Edit Brush :编辑画刷大小,通过点击或者快捷键即可运行。默认为圆形画刷,可以改变画刷大小(注,画刷大小是以当前图片的宽度为比例)
Create Rectangle :
2d状态下:创建矩形,通过点击或者快捷键即可运行。在想要进行标注的区域,点击鼠标开始绘制,在移动鼠标的过程中,会同步显示矩形边框,绘制完毕时,再点击鼠标即可。
3d状态下:创建长方体,通过在任意视角的图片点击即可开始该视角下的矩形框的绘制,再次点击鼠标该视角下矩形框即绘制完毕,这时在其他视角,可以通过右键聚焦视角,并进行图片的切换,当其他视角下有最开始创建的矩形框时,移动鼠标即可进行其他视角下的矩形框的绘制,绘制完毕时再次点击鼠标即可,长方体绘制完毕后,按下回车键,键入标注文字,即可添加标注。
Create Circle:创建圆形,操作与创建矩形类似,请参考创建矩形。
Create Polygons:创建多边形,通过点击或者快捷键即可运行。在想要标注的区域,点击鼠标开始绘制,在想要绘制的多边形顶点处再次点击鼠标,继续绘制,绘制完毕后,按下回车键。(即文档中要求的绘制闭合折线)
Create Curve:创建平滑曲线,通过点击或者快捷键即可运行。在想要标注的区域,点击鼠标开始绘制,接着自由移动鼠标即可,绘制完毕后按下回车键。
Edit Color:编辑标注颜色,通过点击或者快捷键即可运行。会弹出颜色对话框,任意选颜色即可。
Edit Polygons:进入编辑状态,通过点击或者快捷键即可运行。点击后会进入编辑状态,在该状态下,可以对标注进行拖动,选中,撤销,重做,放大缩小等一系列操作。
Delete Polygons:删除标注,通过点击或者快捷键即可运行。该动作只有在编辑状态下且有标注被选中才能进行操作。
Edit Label:编辑标注文字,通过点击或者快捷键即可运行。该动作只有在编辑状态且有标注被选中才能进行操作。
Undo:撤销动作,通过点击或者快捷键即可运行。可以撤销任意步数的动作。
Redo:重做动作,通过点击或者快捷键即可运行。可以重做任意步数的动作。
Undo last point:撤销当前正在创建的标注形状,通过点击或者快捷键即可运行。会移除当前正在创建的标注形状。
Polygon Labels:是否显示标签列表组件,点击即可进行切换。
File List:是否显示文件列表,点击即可进行切换。
3D:是否进入3D模式,点击即可进行2d及3d状态的转换。
Hide Polygons:隐藏所有标注,点击即可运行。
Show Polygons:显示所有标注,点击即可运行。
Magnifier:是否显示放大镜,点击即可运行。默认会捕捉鼠标附近2020的区域,放大至100100,显示在图片右下角(需注意图片的大小,因为会在图片右下角显示100100)
Zoom In:放大图片,点击或者快捷键即可运行。默认会放大图片至1.2倍。
Zoom Out:缩小图片,点击或者快捷键即可运行。默认会缩小图片至0.8倍。
Original Size:图片恢复至原始图片大小,点击或者快捷键即可运行。会使图片按照原始大小显示。
Fit Window:图片宽度适应中心窗口,点击或者快捷键即可运行。会使图片按照中心窗口宽度显示
右侧工具栏从上到下依次是:
1、Flags列表,当前图片的类别标签选择,具体操作可以参考这篇博客;
2、Label List,记录使用过的所有标签;
3、Polygon Labels,当前图片中包含的掩码标签;
4、File List,打开的所有文件,有对应的.json文件时,该文件前打了√。
执行完毕刚才的命令后,可以看到label list中出现了dog 和 cat。
通过open dir选择要标注的图片目录,默认为第一张开始
通过create Polygons开始标注,标注完成后选择label
设定change output dir目录,即标注后的json文件存储的路径,默认和图片名称是一致的,打开json文件可以看到版本号,flags,shapes是个数组,包括了label和points,以及图片的大小、文件路径以及二进制数据。
{
"version": "5.0.2",
"flags": {},
"shapes": [
{
"label": "cat",
"points": [
[
133.00733496332518,
110.71393643031786
],
[
145.23227383863082,
141.2762836185819
],
[
141.320293398533,
162.5476772616137
],
[
155.99022004889977,
185.04156479217605
],
[
148.65525672371638,
206.0684596577017
],
[
131.05134474327627,
207.04645476772617
],
[
118.09290953545232,
224.89486552567237
],
[
119.559902200489,
232.47432762836186
],
[
151.34474327628362,
233.69682151589242
],
[
186.79706601466992,
204.84596577017115
],
[
193.8875305623472,
214.38141809290954
],
[
176.52811735941322,
223.42787286063572
],
[
172.6161369193154,
234.6748166259169
],
[
196.0880195599022,
247.38875305623472
],
[
198.0440097799511,
247.14425427872862
],
[
226.89486552567237,
227.82885085574574
],
[
294.37652811735944,
211.93643031784842
],
[
287.7750611246944,
227.3398533007335
],
[
317.6039119804401,
231.74083129584352
],
[
349.38875305623475,
219.2713936430318
],
[
356.7237163814181,
200.20048899755503
],
[
351.3447432762836,
188.95354523227385
],
[
345.96577017114913,
149.83374083129584
],
[
349.38875305623475,
112.18092909535453
],
[
352.8117359413203,
77.21760391198045
],
[
357.70171149144255,
47.877750611246945
],
[
362.1026894865526,
26.850855745721272
],
[
342.0537897310514,
15.114914425427873
],
[
328.8508557457213,
44.210268948655255
],
[
314.42542787286067,
97.51100244498778
],
[
315.158924205379,
128.07334963325184
],
[
258.679706601467,
129.54034229828852
],
[
219.80440097799513,
109.49144254278728
],
[
194.3765281173594,
122.93887530562348
],
[
179.95110024449878,
118.53789731051346
],
[
173.83863080684597,
120.00488997555013
]
],
"group_id": null,
"shape_type": "polygon",
"flags": {}
}
],
"imagePath": "..\\img_data\\cat.0.jpg",
"imageData": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA。。。。。。/9k=",
"imageHeight": 374,
"imageWidth": 500
}
继续标注猫,可以看到图片中有五只猫,打了5个猫的label
接下来标注狗,依此类推。
花了将近一个小时,标注完成了25只猫和25只狗。
后续将对labelme中flags和label list的差异进行详细解读和说明。
欢迎关注python与大数据分析