# AI开源课程项目 **Repository Path**: dsaxc/ai-open-source-course-project ## Basic Information - **Project Name**: AI开源课程项目 - **Description**: AI开源课程期末大作业 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2022-06-30 - **Last Updated**: 2025-12-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于MindSpore的漫画脸实现 从PyTorch和PaddlePaddle将模型迁移到MindSpore,基本全部基于MindSpore算子实现。 手动完成了全部预训练参数的转换。 ## 作业要求: 使用MindSpore实现基于GAN网络模型的漫画脸,输入一张图片,输出一张漫画脸,可用作手机变装、二次元风格等应用场景。 ## 算法与数据集: 算法参考AdaLIN,并使用归一化方法,在反规范化时将编码器的均值方差(照片特征)与解码器的均值方差(卡通特征)相融合。在其基础上,于编码器之前和解码器之后各增加了2个hourglass模块,渐进地提升模型特征抽象和重建能力。首先检测图像中的人脸及关键点,根据人脸关键点旋转校正图像,并按统一标准裁剪,再将裁剪后的头像输入人像分割模型去除背景。 ## 项目文件结构: ``` ├── dataset └─── cartoon_face └─── nini.png └─── img └─── nini.png ├── model ├─── fcn_ms.py └─── photo2cartoon_ms.py ├── save_model ├─── cartoon.ckpt └─── fcn.ckpt ├── utils ├─── face_detect.py ├─── face_seg.py ├─── hrnet_ms.py └─── layers_ms.py ├── README.md └── main.py ``` dataset/img用于存放原始图片,dataset/cartoon_face用于存放基于原始图片的漫画脸结果。 ## 环境配置: 相关的系统与硬件配置如下: - Windows 10(本地)/ Ubuntu 18.04(远程) - CUDA 11.4 项目所需的主要依赖库如下: - python 3.7.8 - mindspore-cpu 1.7.0 - dlib 19.20.4 - face-alignment 1.3.5 - opencv-python 4.6.0.66 ## 实验流程: ### 图片预处理: 1. 人脸关键点检测,获得人脸的68个关键点坐标。 2. 人脸校正,通过68个人脸关键点的第37、46两个点(即眼角的两个点)的坐标结合仿射变换,将倾斜的人脸转正。 3. 人脸截取,根据68个关键点中最左边,最右边,最上边,最下边的四个点的坐标位置按一定比例框出一个正方形来截取出人脸。 4. 人脸分割,使用FCN或U2net语义分割模型将人脸截取出来。然后用原图与截取后的图像相乘就能去除掉背景。
### 漫画风格转化: 1. 将去除背景后的人像送入卡通风格迁移模型进行风格迁移。 ## 演示案例: 需要将输入的图像放在`dataset/img`中,最终结果会保存在`dataset/cartoon_face`。 可以使用以下命令运行代码,需要手动传入输入的图片名称: ```python python main.py ``` 例如: ```python python main.py --nini.png ``` 模型输入:
模型输出:
## 参考资料: 1. Junho Kim, Minjae Kim, Hyeonwoo Kang, and Kwang Hee Lee. "U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation." In International Conference on Learning Representations. 2019. 2. Long J, Shelhamer E, Darrell T. Fully convolutional networks for semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 3431-3440. 3. Qin X, Zhang Z, Huang C, et al. U2-Net: Going deeper with nested U-structure for salient object detection[J]. Pattern recognition, 2020, 106: 107404. 4. https://github.com/minivision-ai/photo2cartoon 5. https://github.com/hahahappyboy/GANForCartoon ### 附: * 在Mindspore中并未找到`paddle.nn.functional.interpolate`对应的算子,后发现可能是`upsample`算子,但因为时间原因仍使用了PaddlePaddle的算子。 * 经过反复尝试,__尽管官方文档的描述完全相同,MindSpore.nn.BatchNorm2D算子与torch.nn.BatchNorm2D运算结果不一致__,会导致模型失效。因此不得已使用了 `torch.nn.BatchNorm2D`算子。