当前位置: 首页 > 科技观察

五个用于图像着色的开源Python工具

时间:2023-03-13 03:57:48 科技观察

在彩色图像存在之前拍摄了数以千计的复古照片和电影。现在,在深度学习的帮助下,我们可以给这些图片上色,让它们更接近原来的样子。作为测试,我将使用两张图片。本文将使用开源工具,可以从GitHub下载。DeOldifyDeOldify是基于SA-GAN(Self-Attention——生成对抗网络)。一般来说,GAN由两个独立的神经网络组成——一个生成器和一个鉴别器。这两个网络都是从大量图像中训练出来的,在此期间生成器学习制作合理的图像,而鉴别器学习将生成的图像与真实图像区分开来。为了在本地运行DeOldify,我们需要从GitHub上获取项目,将预训练的神经网络权重下载到“models”文件夹中(链接来自项目页面,作者以后可能会更改):gitclonehttps://github.com/jantic/DeOldifycdDeOldifymkdirmodelscdmodelswgethttps://data.deepai.org/deoldify/ColorizeArtistic_gen.pthwgethttps://www.dropbox.com/s/usf7uifrctqw9rl/ColorizeStable_gen.pth?dl=1-OColorizeStable_gen。pthcd..在这里,我将“设备”设置为CPU-如果你没有好的显卡,你很可能会得到一个“内存不足”的错误(处理时间在CPU上大约3-5s,处理时间在GPU大约0.5s,所以CPU计算也很好)。如果你想运行独立的Python代码,你可以使用以下Python代码:)colorizer=get_image_colorizer(artistic=True)img_out=colorizer.get_transformed_image(path="anna_bw.jpg",render_factor=15,watermarked=True)img_out.save("anna_color.jpg")至于结果,还不错:你也可以尝试更改模型(有两个模型,一个具有更鲜艳颜色的“艺术”模型和一个可用的“稳定”模型)和一个影响输出颜色的“render_factor”变量。要去除水印,可以将参数watermarked设置为False。彩色图像着色该项目使用卷积神经网络(CNN)生成彩色图像。在架构上,它比DeOldify简单得多,但正因为如此,人们可能更容易理解它的工作原理。最后一次项目更新是在2020年,但代码仍然有效,可以轻松在本地运行。有两种模型可用,Python代码如下:importcolorizersascimporttorchimportmatplotlib.imageaspltimg=c.load_img("image_bw.jpg")tens_l_orig,tens_l_rs=c.preprocess_img(img,HW=(256,256))img_bw=c.postprocess_tens(tens_l_orig,torch.cat((0*tens_l_orig,0*tens_l_orig),dim=1))colorizer_eccv16=c.eccv16(预训练=True).eval()out_img_eccv16=c.postprocess_tens(tens_l_orig),colorizer6(_eccv1tens_l_rs).cpu())plt.imsave('image_eccv16.jpg',out_img_eccv16)colorizer_siggraph17=c.siggraph17(pretrained=True).eval()out_img_siggraph17=c.postprocess_tens(tens_l_orig,colorizer_siggraph17(tensc_pu(rs))plt.imsave('image_siggraph17.jpg',out_img_siggraph17)结果如下:ChromaGANChromaGAN顾名思义,ChromaGAN的作者也是利用生成的对抗网络给图像上色,这个项目可能只是一个演示用于研究,操作不太友好。在使用项目之前,“my_model_colorization.h5”应下载文件(GitHub页面上提供的链接)并将其放在“MODEL”文件夹中。源图和输出图分别放在“chromagan_images”和“chromagan_results”文件夹下,然后可以参考作者的jupyternotebook进行处理。要在本地PC上运行代码,应删除“fromgoogle.colab.patchesimportcv2_imshow”和“cv2_imshow(...)”行。项目使用的是Keras,如果出现“outofmemory”错误,建议在文件开头添加os.environ["CUDA_VISIBLE_DEVICES"]="-1"。可以从google-researchGitHub页面下载GoogleColorizationTransformer(ColTran)项目,以及更详细的研究论文。作者使用具有自注意力架构的轴向变换器而不是GAN。在使用ColTran之前,我们需要下载位于ColTran.zip存档中的预训练模型。该档案包含3个模型检查点:colorizer、color_upsampler和spatial_upsampler。然后我们可以运行3个Python命令:-config=configs/color_upsampler.py--mode=colorize--accelerator_type=CPU--logdir=color_upsampler--img_dir=img_dir--store_dir=target_dir--gen_data_dir=target_dir/stage1--mode=colorizepython3custom_colorize.py--config=configs/spatial_upsampler.py--mode=colorize--accelerator_type=CPU--logdir=spatial_upsampler--img_dir=img_dir--store_dir=target_dir--gen_data_dir=target_dir/stage2其中img_dir是包含源图像的文件夹,store_dir是输出文件夹,colorize是处理模式,logdir是预训练模型的路径。我们有3个处理步骤:我们有3个处理步骤:“colorizer”仅使用512种输出颜色和64x64输出图像进行粗着色,“colorupsampler”改进颜色,“spatialupsampler”将图像放大到256x256分辨率。结果证明它的颜色也很准确:这个工具可能只是作为研究论文的演示而制作的,与以前的项目相比,没有现成的方法来处理任意分辨率的图像。输出限制为256x256大小。BigColorBigColor项目是作者在2022年提出的。作者还在他们的论文中写道:“我们将BigColor与最近的自动着色方法进行了比较,包括CIC、ChromaGAN、DeOldify、InstColor、ColTran和ToVivid。在六张具有挑战性的图像上,BigColor的表现优于所有方法。”项目本身可以从GitHub页面(https://github.com/KIMGEONUNG/BigColor)下载。使用代码很简单。在进行转换之前,应执行两个脚本download-pretraining.sh和download-bigcolor.sh。之后,可以使用一个命令完成转换:python3colorize_real.py--path_ckpt=ckpts/bigcolor--path_input=images_gray--epoch=11--type_resize=powerof--seed=-1--device=cpupath_ckpthere是预训练模型的路径,images_gray是包含源图像的文件夹。结果如下:最后,图像着色是一个有趣的话题,正如我们所见,不同的方法和架构都是可能的。从准确性的角度来看,事情也很复杂。通常,黑白照片不再有颜色信息,因此神经网络只能根据之前训练的图像来猜测输出。例如,这是我用于测试的原始图像:这是相同的图像,转换为黑白:这是用DeOldify制作的图像:树是绿色的,天空是蓝色的,非常好。然而,不仅是DeOldify,其他测试项目都无法正确判断百叶窗的颜色。在大多数情况下,这些结果已经足够好了。