README.md 3.75 KB
Newer Older
yongshk's avatar
add new  
yongshk committed
1
2
3
4
5
6
7
8
# UNET_pytorch
## 论文
`U-Net: Convolutional Networks for Biomedical Image Segmentation`

- https://arxiv.org/abs/1505.04597
## 模型结构
 UNet(全名 U-Net)是一种用于图像分割的卷积神经网络(CNN)架构,UNet 的结构具有 U 形状,因此得名。 

yongshk's avatar
add new  
yongshk committed
9
![img](https://developer.hpccube.com/codes/modelzoo/unet-pytorch/-/raw/main/doc/unet.png)
yongshk's avatar
add new  
yongshk committed
10
11
12
13
14
15
16
## 算法原理
U-Net 的核心原理如下:

1. **编码器(Contracting Path)**:U-Net 的编码器由卷积层和池化层组成,用于捕捉图像的特征信息并逐渐减小分辨率。这一部分的任务是将输入图像缩小到一个低分辨率的特征图,同时保留有关图像内容的关键特征。
2. **中间层(Bottleneck)**:在编码器和解码器之间,U-Net 包括一个中间层,通常由卷积层组成,用于进一步提取特征信息。
3. **解码器(Expansive Path)**:U-Net 的解码器包括上采样层和卷积层,用于将特征图恢复到原始输入图像的分辨率。解码器的任务是将高级特征与低级特征相结合,以便生成分割结果。这一部分的结构与编码器相对称。

yongshk's avatar
add new  
yongshk committed
17
![img](https://developer.hpccube.com/codes/modelzoo/unet-pytorch/-/raw/main/doc/原理.png)
yongshk's avatar
add new  
yongshk committed
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
68
69
70
71
72
73
## 环境配置
### Docker(方法一)
此处提供[光源](https://www.sourcefind.cn/#/service-details)拉取docker镜像的地址与使用步骤
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-23.04-py37-latest

docker run -it --network=host --name=unet --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=32G  --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1 -v /root/unet:/home image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-23.04-py37-latest
```
### Anaconda(方法二)
此处提供本地配置、编译的详细步骤,例如:

关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
```
DTK驱动:dtk23.04
python:python3.7
```
`Tips:以上dtk驱动、python等DCU相关工具版本需要严格一一对应`

其它非深度学习库参照requirements.txt安装:
```
pip install -r requirements.txt
```
## 数据集
`Carvana`

- https://www.kaggle.com/c/carvana-image-masking-challenge/data

此处提供数据预处理脚本的使用方法
```
bash scripts/download_data.sh
```
项目中已提供用于试验训练的迷你数据集,训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备:
```
 ── data
    │   ├── imgs
    │   ├──────fff9b3a5373f_01.jpg
    │   ├──────fff9b3a5373f_02.jpg
    │   └── masks
    │   ├────── fff9b3a5373f_01.gif
    │   ├────── fff9b3a5373f_02.gif
```
## 训练
### 单机多卡
```
python -m torch.distributed.launch --nproc_per_node 4 train_ddp.py
```

### 单机单卡
```
python train.py
```
## 推理
```
python predict.py -i image.jpg -o output.jpg
```
## result
yongshk's avatar
add new  
yongshk committed
74
![rusult](https://developer.hpccube.com/codes/modelzoo/unet-pytorch/-/raw/main/doc/结果.png)
yongshk's avatar
add new  
yongshk committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

### 精度
测试数据:[test data](https://www.kaggle.com/c/carvana-image-masking-challenge/data),使用的加速卡:Z100L。(采用iou系数)

根据测试结果情况填写表格:
| Unet | 精度 | 速度 |
| :------: | :------: | :------: |
| Carvana | 0.976 | 25.96 |
## 应用场景
### 算法类别

`视觉、图像分割`

### 热点应用行业
`医学图像分析``卫星图像分析``自然图像分割``工业检测`

## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/unet-pytorch
## 参考资料
- https://github.com/milesial/Pytorch-Unet