annotation.md 3.8 KB
Newer Older
J
jiangjiajun 已提交
1 2 3 4 5 6
# 数据标注工具

PaddleX支持图像分类、目标检测、实例分割和语义分割四大视觉领域常见的任务,对于每类视觉任务,都支持了特定的数据格式。PaddleX目前支持了图像分类的ImageNet格式,目标检测的PascalVOC格式,实例分割的MSCOCO格式(MSCOCO也可以用于目标检测)以及语义分割数据格式。

## 常见标注工具

F
FlyingQianMM 已提交
7
 图像分类无需标注工具,用户只需以txt文件记录每张图片的类别标签即可。对于目标检测、实例分割和语义分割,PaddleX已经与主流的标注工具进行了适配,用户可根据自己的需求,选择以下标注工具进行数据标注。
J
jiangjiajun 已提交
8 9 10 11 12 13 14 15 16

| 标注工具    | 图像分类 | 目标检测 | 实例分割 | 语义分割 | 安装                                             |
| :---------  | :------- | :------ | :------  | :------- | :----------------------------------------------- |
| Labelme     | -        | √        | √        | √        | pip install labelme (本地数据标注)                              |
| 精灵标注    | √        | √*        | √        | √        | [官网下载](http://www.jinglingbiaozhu.com/) (本地数据标注)     |
| EasyData    | √        | √        | √        | √        | [Web页面标注](https://ai.baidu.com/easydata/) (需上传数据进行标注)   |

数据标注完成后,参照如下流程,将标注数据转为可用PaddleX模型训练的数据组织格式。

F
FlyingQianMM 已提交
17
***注意**:精灵标注的目标检测数据可以在工具内部导出为PascalVOC格式,因此paddlex未提供精灵标注数据到PascalVOC格式的转换
J
jiangjiajun 已提交
18 19 20 21


## 标注数据格式转换

F
FlyingQianMM 已提交
22
目前所有标注工具生成的标注文件,均为与原图同名的json格式文件,如`1.jpg`在标注完成后,则会在标注文件保存的目录中生成`1.json`文件。转换时参照以下步骤:
J
jiangjiajun 已提交
23

F
FlyingQianMM 已提交
24 25 26
1. 将所有的原图文件放在同一个目录下,如`pics`目录  
2. 将所有的标注json文件放在同一个目录下,如`annotations`目录  
3. 使用如下命令进行转换:
J
jiangjiajun 已提交
27 28 29 30

```
paddlex --data_conversion --source labelme --to PascalVOC --pics ./pics --annotations ./annotations --save_dir ./converted_dataset_dir
```
F
FlyingQianMM 已提交
31 32 33 34 35 36 37 38

| 参数 | 说明 |
| ---- | ---- |
| --source | 表示数据标注来源,支持`labelme``jingling``easydata`(分别表示数据来源于LabelMe,精灵标注助手和EasyData)|
| --to | 表示数据需要转换成为的格式,支持`ImageNet`(图像分类)、`PascalVOC`(目标检测),`MSCOCO`(实例分割,也可用于目标检测)和`SEG`(语义分割)  |
| --pics | 指定原图所在的目录路径  |
| --annotations | 指定标注文件所在的目录路径 |

S
sunyanfang01 已提交
39 40 41
**注意**
1. 精灵标注的目标检测数据可以在工具内部导出为PascalVOC格式,因此paddlex未提供精灵标注数据到PascalVOC格式的转换  
2. 在将LabelMe数据集转换为COCO数据集时,LabelMe的图像文件名和json文件名需要一一对应,才可正确转换
J
jiangjiajun 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

## 手机拍照标注说明

当您收集的样本图像来源于手机拍照时,请注意由于手机拍照信息内附带水平垂直方向信息,这可能会使得在标注和训练时出现问题,因此在拍完照后注意去除照片中的方向信息,使用如下函数即可解决
```
from PIL import Image, ExifTags
def rotate(im):
    try:
        for orientation in ExifTags.TAGS.keys():
            if ExifTags.TAGS[orientation] == 'Orientation':
                break
        exif = dict(im._getexif().items())
        if exif[orientation] == 3:
            im = im.rotate(180, expand=True)
        if exif[orientation] == 6:
            im = im.rotate(270, expand=True)
        if exif[orientation] == 8:
            im = im.rotate(90, expand=True)
    except:
        pass

img_file = '1.jpeg'
im = Image.open(img_file)
rotate(im)
im.save('new_1.jpeg')
```