GLCIC:全局和局部一致的图像补全
- 前言
- 相关介绍
- GLCIC 的工作原理
- 核心思想
- 主要组件
- 训练目标
- 优点
- 缺点
- 总结
- 实验环境
- 项目地址
- Linux
- Windows
- 项目结构
- 具体用法
- 准备数据集
- 进行训练
- 进行测试
- 参考文献
前言
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
相关介绍
- [1] GLCIC 源代码地址:https://github.com/otenim/GLCIC-PyTorch.git
- [2] GLCIC 论文地址:http://hi.cs.waseda.ac.jp/~iizuka/projects/completion/data/completion_sig2017.pdf
GLCIC (Globally and Locally Consistent Image Completion) 是一种图像补全技术,主要用于恢复图像中缺失的部分。这项技术结合了全局一致性和局部一致性两个概念来提高图像补全的质量。下面是对 GLCIC 的详细介绍及其优缺点。
GLCIC 的工作原理
核心思想
GLCIC 的主要目标是填充图像中缺失或损坏的部分,使之看起来自然并与周围环境协调一致。该方法通过使用卷积神经网络 (CNN) 结构来完成这一任务。
主要组件
- 编码器:用于提取图像的特征。
- 解码器:基于编码器提取的特征重建图像。
- 注意力机制:帮助模型关注于图像中需要补全的部分。
训练目标
- 像素损失:确保生成的图像像素值接近真实图像。
- 感知损失:通过预训练的深度网络(例如 VGG 网络)来评估生成图像与真实图像之间的视觉相似性。
- 对抗损失:使用生成对抗网络 (GAN) 的结构来使生成的图像更加逼真。
优点
- 高质量的补全效果:GLCIC 能够生成高质量的图像补全结果,使补全区域与周围环境协调一致。
- 全局一致性:通过全局一致性保证了补全区域在整个图像中的合理性。
- 局部一致性:确保补全区域的细节与相邻区域匹配,增强了补全的真实感。
- 端到端训练:模型可以端到端地进行训练,简化了模型设计和训练流程。
- 适应性强:可以应用于多种类型的图像补全任务,包括人脸补全、物体移除等场景。
缺点
- 训练时间和资源:GLCIC 需要大量的计算资源和较长时间来进行训练。
- 数据依赖性:模型的性能很大程度上依赖于训练数据集的质量和多样性。
- 过拟合风险:在没有足够数据的情况下,模型可能会出现过拟合现象。
- 边界问题:在某些情况下,补全区域的边缘可能会出现明显的边界痕迹,影响整体视觉效果。
- 细节缺失:虽然能较好地处理局部一致性,但在某些情况下可能无法完全恢复复杂的纹理和细节。
总结
GLCIC 是一种高效的图像补全方法,能够有效地填补图像中的空洞或缺失部分,同时保持图像的整体和局部一致性。这种技术在计算机视觉领域有着广泛的应用前景,特别是在图像修复、视频编辑等领域。然而,像大多数深度学习模型一样,GLCIC 也有其局限性,尤其是在计算资源的需求和对高质量训练数据的依赖方面。
实验环境
python=3.8.19
torch=1.9.0
torchaudio=0.9.0
torchvision=0.10.0
opencv-python==4.1.2.30
scikit-image==0.16.2
pillow==7.0.0
scipy==1.2.1
tqdm==4.43.0
项目地址
- GLCIC 源代码地址:https://github.com/otenim/GLCIC-PyTorch.git
Linux
git clone https://github.com/otenim/GLCIC-PyTorch.git
cd GLCIC-PyTorch-master
Windows
请到
https://github.com/otenim/GLCIC-PyTorch.git
网站下载源代码zip压缩包。
cd GLCIC-PyTorch-master
项目结构
GLCIC-PyTorch-master
├─datasets
│ └─img_align_celeba
│ ├─test
│ └─train
├─images
├─results
│ └─demo
│ ├─phase_1
│ ├─phase_2
│ └─phase_3
└─__pycache__
具体用法
准备数据集
- 使用 CelebA 数据集作为示例训练 glcic 模型
- GLCIC 源代码地址也提供了训练、测试所需数据集的下载地址。
- 数据集格式如下:
|____train/ # used for training | |____XXXX.jpg # .png format is also acceptable. | |____OOOO.jpg | |____.... |____test/ # used for test |____oooo.jpg |____xxxx.jpg |____.... ```
进行训练
python train.py datasets/dataset/ results/result/ [--data_parallel (store true)] [--cn_input_size (int)] [--ld_input_size (int)] [--init_model_cn (str)] [--init_model_cd (str)] [--steps_1 (int)] [--steps_2 (int)] [--steps_3 (int)] [--snaperiod_1 (int)] [--snaperiod_2 (int)] [--snaperiod_3 (int)] [--bsize (int)] [--bdivs (int)]
optional arguments:
<dataset> (required): path to the dataset directory.
<result> (required): path to the result directory.
[--data_parallel (store true)]: when this flag is enabled, models are trained in data-parallel way. If N gpus are available, N gpus are used during training (default: disabled).
[--cn_input_size (int)]: input size of generator (completion network). All input images are rescalled so that the minimum side is equal to cn_input_size then randomly cropped into cn_input_size x cn_input_size (default: 160).
[--ld_input_size (int)]: input size of local discriminator (default: 96). Input size of global discriminator is the same as [--cn_input_size].
[--init_model_cn (str)]: path to a pretrained generator, used as its initial weights (default: None).
[--init_model_cd (str)]: path to a pretrained discriminator, used as its initial weights (default: None).
[--steps_1 (int)]: training steps during phase 1 (default: 90,000).
[--steps_2 (int)]: training steps during phase 2 (default: 10,000).
[--steps_3 (int)]: training steps during phase 3 (default: 400,000).
[--snaperiod_1 (int)]: snapshot period during phase 1 (default: 10,000).
[--snaperiod_2 (int)]: snapshot period during phase 2 (default: 2,000).
[--snaperiod_3 (int)]: snapshot period during phase 3 (default: 10,000).
[--max_holes (int)]: maximum number of holes randomly generated and applied to each input image (default: 1).
[--hole_min_w (int)]: minimum width of a hole (default: 48).
[--hole_max_w (int)]: maximum width of a hole (default: 96).
[--hole_min_h (int)]: minimum height of a hole (default: 48).
[--hole_max_h (int)]: maximum height of a hole (default: 96).
[--bsize (int)]: batch size (default: 16). bsize >= 96 is strongly recommended.
[--bdivs (int)]: divide a single training step of batch size = bsize into bdivs steps of batch size = bsize/bdivs, which produces the same training results as when bdivs = 1 but uses smaller gpu memory space at the cost of speed. This option can be used together with data_parallel (default: 1).
# 示例:如果您使用 data_parallel 选项训练批量大小为 24 的模型并将其他设置保留为默认值,可以运行以下命令。
python train.py datasets/dataset results/result --data_parallel --bsize 24
python train.py datasets/img_align_celeba results/demo/
训练结果(模型和测试修复输出)将保存在
results/demo/
中。训练过程包括以下三个阶段。
- Phase 1: trains only generator.
- Phase 2: trains only discriminator, while generator is frozen.
- Phase 3: both generator and discriminator are jointly trained.
train.py 的默认设置除批量大小外,均基于原始论文。如果需要重现论文结果,请在训练时添加
--data_parallel --bsize 96
。
进行测试
python predict.py results/result/phase_3/model_cn_step<step-number> results/result/config.json <input_img> <output_img> [--max_holes (int)] [--img_size (int)] [--hole_min_w (int)] [--hole_max_w (int)] [--hole_min_h (int)] [--hole_max_h (int)]
optional arguments:
<input_img> (required): path to an input image.
<output_img> (required): path to an output image.
[--img_size (int)]: input size of generator. Input images are rescalled so that the minimum side = img_size then randomly cropped into img_size x img_size (default: 160).
[--max_holes (int)]: maximum number of holes to be randomly generated (default: 5).
[--hole_min_w (int)]: minimum width of a hole (default: 24).
[--hole_max_w (int)]: maximum width of a hole (default: 48).
[--hole_min_h (int)]: minimum height of a hole (default: 24).
[--hole_max_h (int)]: maximum height of a hole (default: 48).
# 示例:如果您使用输入图像 <path-to-this-repo>/input.jpg 进行推理并将输出图像保存为 <path-to-this-repo>/output.jpg,可以运行以下命令
python predict.py results/result/phase_3/model_cn_step{step_number} results/result/config.json input.jpg output.jpg
python predict.py results/demo/phase_3/model_cn_step400000 results/demo/config.json images/test.jpg test_res.jpg
参考文献
[1] GLCIC 源代码地址:https://github.com/otenim/GLCIC-PyTorch.git
[2] GLCIC 论文地址:http://hi.cs.waseda.ac.jp/~iizuka/projects/completion/data/completion_sig2017.pdf
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目