ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STYLE2PAINTS V1 入门指南:基于 Keras + Chainer 的线稿自动上色服务器部署与原理解析

STYLE2PAINTS V1 入门指南:基于 Keras + Chainer 的线稿自动上色服务器部署与原理解析 人工智能计算机视觉媒体生成深度学习【免费下载链接】style2paintssketch style paints :art: (TOG2018/SIGGRAPH2018ASIA)项目地址https://gitcode.com/gh_mirrors/st/style2paints点击查看免费下载本指南以 V1/README.md 为主线完整梳理 STYLE2PAINTS 第一版V1的部署方式、模型构成与训练数据来源并结合作业仓库中 V1/server/server.py 的源码深入解析其草图 指定色风格 → 成品插画的服务端工作流与核心参数。读完你将掌握如何用 CPU 或 GPU 搭建一个可交互的线稿上色服务、version/denoise等参数对渲染质量的实际影响以及 KerasTensorFlow与 Chainer 两套框架在推理管线中各自承担的角色。项目定位与核心能力STYLE2PAINTS 是sketch style paints理念的开源实现对应仓库 README.md 的项目描述。根据 V1/README.md 的定义V1 版本具备两项核心能力按给定色彩风格为线稿上色paint on a sketch用户提交一张线稿sketch和一张参考图referenceAI 依据参考图的色彩风格与局部提示hint完成上色插画风格迁移transfer illustrations style在线稿上色的基础上将参考插画的风格迁移到内容之上。仓库另附 V1/AnimeStyleTransfer.md 专门讲解风格迁移的使用手法详见本文第五节。从目录结构看V1 由三部分构成images/测试样例、page/演示与截图素材、server/可运行的完整 Web 服务。其中server/是一个 Cocos2d-JS 构建的 Canvas 前端V1/server/game/index.html Python 推理后端V1/server/server.py的组合前端负责交互绘制后端负责模型推理。环境准备与依赖安装V1/README.md 将部署分为两类场景均以pip方式安装依赖。以下命令按原文档原样整理并标注各依赖在源码中的实际用途。CPU 服务器适合入门体验原文档明确要求python 3 环境依次执行pip install tensorflow pip install keras pip install chainer pip install bottle pip install gevent pip install h5py pip install opencv-pythonGPU 服务器适合研究用途原文档要求CUDA python 3.6 环境并在 CPU 依赖基础上将tensorflow替换为tensorflow_gpu、追加cupypip install tensorflow_gpu pip install keras pip install chainer pip install cupy pip install bottle pip install gevent pip install h5py pip install opencv-python各依赖在服务端源码中的对应作用对照 V1/server/server.py 的导入语句可以确认每项依赖都不是可选项依赖源码用途tensorflow/tensorflow_gpuimport tensorflow as tf创建 Session、占位符并执行base_generator/style2paints两个 Keras 模型的前向计算L111-L166、L322-L354kerasfrom keras.models import load_model加载.net模型权重并设置推理阶段K.set_learning_phase(0)L15-L19chainerimport chainer定义并运行 GoogLeNet 特征提取器google_netL29-L104cupyGPU 模式下 Chainer 依赖 CuPy 完成chainer.cuda的显存数据搬运L107、L291、L325bottle提供 HTTP 路由route(/paint)接收前端 POST 请求route(/filename:path)托管game/静态资源L168-L176geventfrom gevent import monkey; monkey.patch_all()将服务协程化并由run(..., servergevent)作为 WSGI 服务器启动L8、L434h5pyKeras 模型文件.netHDF5 容器的底层读写依赖opencv-python图像解码、缩放、颜色空间转换、imwrite落盘等全部图像处理L190、L280、L386获取仓库与预训练模型原文档给出的获取步骤为git clone https://github.com/lllyasviel/style2paints.git # 从 release 页面下载全部预训练模型放入 style2paints/server 目录 cd style2paints/server python server.py cpu # CPU 模式其中下载全部预训练模型并放入 server 目录是启动前必须完成的步骤。仓库中 V1/server/put_all_models_nearby.txt 正是对这一要求的占位记录而 V1/server/server.py 在启动阶段会直接从当前目录加载三个模型文件chainer.serializers.load_npz(google_net.net, google_net) # L104 base_generator load_model(base_generator.net) # L124 style2paints load_model(style2paints.net) # L125关于模型权重V1/README.md 的 Model 一节给出了版权归属说明截至 2018.12.1 记录base_generator.net—— 版权归 2017 style2paints 所有style2paints.net—— 版权归 2017 style2paints 所有google_net.net—— 源自 nico-opendata 数据集训练的模型。由于这些权重文件未随仓库分发实际部署时需要从项目 release 页面自行获取。CPU 模式下请将python server.py cpu的cpu参数视为禁用 GPU的标志——源码通过is_GPU (len(sys.argv) 1)L5判断不带参数即 GPU 模式带cpu参数则走 CPU 推理分支见 L111-L118、L287-L296、L321-L354 的两套分支。模型架构与双框架推理管线GoogLeNet 参考图特征提取Chainer参考图先被缩放到 224×224V1/server/server.py L280然后送入 Chainer 实现的 GoogLeNet。从源码中的网络定义L32-L62可以看到这是一个完整的 Inception 结构conv1(3→64, stride2)→conv2(64→192)→ 8 个InceptionBN模块inc3ainc5b→ 三个输出分支out_tag/out_a_tag/out_b_tag每个分支输出维度均为 3000。网络前向L64-L102在每一层后通过全局平均池化提取色彩风格提示向量共 12 个不同尺度/通道数的特征特征向量维度提取位置hint_s57c64_064conv1 输出57×57hint_s29c192_0192conv2 输出29×29hint_s29c256_0/hint_s29c320_0256 / 320inc3a / inc3bhint_s15c576_0hint_s15c576_4576×5inc3cinc4dhint_s8c1024_0hint_s8c1024_21024×3inc4einc5b这 12 个向量随后被逐一填入 TensorFlow 侧 Keras 模型的对应tf.placeholderL133-L144作为色彩风格的全局条件驱动上色网络。GPU 模式下推理位于chainer.no_backprop_mode()与using_config(train, False)上下文内L288-L291关闭了梯度计算与训练开关仅做前向特征提取。Keras 双阶段上色生成TensorFlow生成侧由两个 Keras 模型串成两阶段管线第一段base_generator输入为线稿单通道图sketch_ref_input_448、局部颜色提示图local_hint_input_448以及上述 12 个风格向量输出local_drag_output/global_drag_output/paint_output三个分支L146-L161。paint_output即最终上色结果第二段style2paints将第一段输出与线稿 concat 后送入combined_input_448 tf.concat([sketch_ref_input_448, local_hint_input_448], axis3)L130在高分辨率阶段做二次精修得到带清晰线稿约束的最终画面。整个推理过程在session.run(...)中以 feed_dict 注入所有输入完成L322-L354。模型的 TensorFlow Session 配置L111-L113只对 GPU 模式生效将可见设备限定为tensorflow_GPU_ID并通过per_process_gpu_memory_fractionk_between_tf_and_chainer默认 0.8限制显存占用为 Chainer 侧保留显存空间。输入预处理与归一化线稿先由from_png_to_jpgL394-L399把带透明通道的 PNG 合成到白底再转灰度、按长边缩放到 512 内L261-L271norm_sketchL420-L432以 64×64 缩略图的 min/max 做全局归一化denoise true时额外除以 0.9 提亮线稿最后做二次幂增强并映射回 0-255参考图直接缩放到 224×224 并归一化到 [0,1]L280-L283局部提示hintRGBA 四通道输入L300RGB 色值先转到 HSV 空间乘以shifter增强饱和度L303-L307随后local_hint (hint - 127) / 128映射到 [-1,1]并按 alpha 通道逐通道加权L311-L317实现颜色只在用户涂抹过的区域生效。后处理与输出落盘生成结果先反归一化加回均值[103.939, 116.779, 123.68]并 BGR→RGB 翻转L359-L361高分辨率模式下再经style2paints精修L365-L377最终在 HSV 空间把饱和度除以 0.9 提升色彩浓度L381-L384缩放回原始线稿尺寸后同时写入record/与game/results/两个目录L387-L389前端通过results/路径拉取结果图。前端交互与 /paint 接口协议前端由 Cocos2d-JS 构建入口为 V1/server/game/index.html加载src/settings.js与main.js核心交互逻辑在 V1/server/game/src/project.js 的Controller组件中上传线稿通过隐藏的input typefilefileInputForSketch触发线稿被缩放显示在画布上最多 1024 像素project.js中tempDivSketch的 onload 逻辑上传参考图fileInputForReferene触发参考图先按 224 像素等比缩放用于特征提取、再按 200 像素等比缩放用于界面色板取色画笔与橡皮onPenClicked/onEraserClicked切换涂色/擦除handlePainter中笔刷半径6 - B随版本号B变化V1 半径 5、V4 半径 2涂色采用半透明笔触alpha 0.618便于反复叠色取色器点击参考图区域即可吸取该处颜色作为当前画笔色handleColorPicker提交上色onColorizeClicked将线稿sketch、参考图reference、涂抹提示hint以 dataURL 编码连同version、denoise、sketchID、referenceID通过XMLHttpRequestPOST 到/painti.open(POST,/paint,!0)。服务端 V1/server/server.py 的/paint路由L178-L391与前端一一对应sketchID/referenceID为new时首次上传并落盘到record/后续请求可直接复用已保存的线稿与参考图每个交互会话都会在record/留下.sketch.png、.reference.png、.hint.png、.fin.jpg四类过程文件。响应体为dstr * referenceID格式前端以*分割后拼接出results/下的结果图 URLproject.js中d函数。version 参数四档渲染精度的语义/paint请求中的version字段直接映射 V1/server/server.py L226-L256 的四组超参数前端版本选择按钮onV1onV4对应B 1~4versionlow_level_scaleshifterup_level插值方式高分辨率尺度1161.3TrueINTER_AREA322默认281.2TrueINTER_AREA323481.1TrueINTER_LANCZOS4644641.0FalseINTER_LANCZOS464其中low_level_scale/high_level_scale通过unet_resizeL402-L417控制送入 U-Net 的分辨率基数短边基准且对齐到 64 的倍数shifter控制提示色在 HSV 空间的饱和度增强倍数up_level决定是否启用第二阶段style2paints高分辨率精修。可以看出V4 是最大分辨率 不降采样精修的配置代价是显存与耗时更高。denoise 参数线稿提亮开关denoise为true时norm_sketch在归一化后额外执行sketch / 0.9L428-L429等效于把线稿整体提亮约 11%适合线条较淡、噪声较多的草图设为false则保持原始对比度。附V1 中的插画风格迁移用法V1/AnimeStyleTransfer.md 补充了同仓库内风格迁移的交互要点在网页中点击upSketch上传内容图建议 720p 以上高清图、点击upReference上传风格图并务必开启 V4部分情况 V3与 SX 开关——对应version4或 3的高分辨率渲染路径与饱和风格增强选项。仓库V1/images_in_style_transfer/目录提供了 8 组内容/风格/结果示例contents 与 styles 子目录为输入results 为输出可复现该流程。训练数据集建议面向研究者如需自行训练V1/README.md 给出的两条官方建议插画数据集推荐 nico-opendata 的 40 万张插画图片线稿数据集推荐使用 sketchKeras 工具从插画中提取线稿。常见问题与部署提示模型缺失启动时load_model/load_npz找不到.net文件会直接报错务必按 V1/server/put_all_models_nearby.txt 的提示把三个模型放在V1/server/目录下再执行python server.pyGPU/CPU 切换以python server.py无参数启动为 GPU 模式以python server.py cpu启动为 CPU 模式V1/server/server.py L5 的is_GPU判定CPU 模式下 Chainer 与 TensorFlow 均使用纯 CPU 计算无需 CuPy显存分配GPU 模式下 TensorFlow 默认占用 80% 显存k_between_tf_and_chainer 0.8若显存不足可调整该常量并为 Chainer 预留足够空间端口与访问服务默认监听0.0.0.0:8000L434启动后浏览器访问http://localhost:8000即可进入 Canvas 交互界面。赞分享人工智能计算机视觉媒体生成深度学习【免费下载链接】style2paintssketch style paints :art: (TOG2018/SIGGRAPH2018ASIA)项目地址https://gitcode.com/gh_mirrors/st/style2paints点击查看免费下载相关推荐Hasura Event Triggers 实战使用 Google Cloud FunctionsNode.js 6编写 echo 云函数解析事件负载Hasura Event Triggers 实战使用 Google Cloud FunctionsNode.js 6编写 echo 云函数解析事件负载 导人工智能计算机视觉媒体生成深度学习推荐开源项目Paints Chainer — 线稿自动上色神器推荐开源项目Paints Chainer — 线稿自动上色神器 在数字绘画的世界中从黑白线稿到色彩斑斓的成品总是一个费时费力的过程。但是有了 PaintsLangSmith Client SDK与LangChain无缝集成教程提升AI应用可观测性LangSmith Client SDK与LangChain无缝集成教程提升AI应用可观测性 LangSmith Client SDK是专为AI应用开发者设计上一篇QMK 固件 ALF X2 键盘矩阵图解析从 Matrix Diagram 到引脚、布局与键位映射下一篇IDENTITY and PURPOSE创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表