
该存储库包含代码来实例化和部署图像分辨率增强程序。该模型能够以4倍的倍数来将像素化图像提高,同时生成照片真实的细节。
GAN基于此GitHub存储库,并基于本研究文章。
该模型在600,000张OpenImages V4数据集的图像上进行了培训,并且模型文件托管在IBM Cloud Object存储上。此存储库中的代码将模型部署为Docker容器中的Web服务。该存储库是作为IBM开发人员模型资产交换的一部分而开发的,公共API由IBM Cloud提供支持。
| 领域 | 应用 | 行业 | 框架 | 培训数据 | 输入数据格式 |
|---|---|---|---|---|---|
| 想象 | 超分辨率 | 一般的 | 张量 | 开放映像V4 | 图像(RGB/HWC) |
| set5 | 作者的Srgan | 这个Srgan |
|---|---|---|
| psnr | 29.40 | 29.56 |
| SSIM | 0.85 | 0.85 |
| set14 | 作者的Srgan | 这个Srgan |
|---|---|---|
| psnr | 26.02 | 26.25 |
| SSIM | 0.74 | 0.72 |
| BSD100 | 作者的Srgan | 这个Srgan |
|---|---|---|
| psnr | 25.16 | 24.4 |
| SSIM | 0.67 | 0.67 |
在三个数据集上评估了该实现的性能:SET5,SET14和BSD100。评估了PSNR(峰信号与噪声比率)和SSIM(结构相似性指数)指标,尽管该论文将MOS(平均意见分数)视为最有利的度量标准。从本质上讲,SRGAN的实施交易更高的PSNR或SSIM得分,以使对人眼更具吸引力。这导致了输出图像的集合,这些图像具有更清晰,更现实的细节。
注意:纸上的Srgan在350k Imagenet样品上接受了培训,而该Srgan进行了600K OpenImages V4图片的培训。
| 成分 | 执照 | 关联 |
|---|---|---|
| 这个存储库 | Apache 2.0 | 执照 |
| 模型重量 | Apache 2.0 | 执照 |
| 模型代码(第三方) | 麻省理工学院 | 执照 |
| 测试样品 | CC由2.0 | 资产读数 |
| CC0 | 资产读数 |
docker :Docker命令行接口。按照系统的安装说明。要运行自动启动Serving API模型的Docker Image,请运行:
$ docker run -it -p 5000:5000 quay.io/codait/max-image-resolution-enhancer
这将从quay.io容器注册表中取出预构建的图像(或使用现有图像,如果已经在本地缓存)并运行它。如果您想结帐并在本地构建模型,则可以按照下面的本地步骤操作。
您可以通过按照本教程中的OpenShift Web控制台或OpenShift容器平台CLI的指示来在Red Hat OpenShift上部署模型服务的微服务,并指定quay.io/codait/max-image-resolution-enhancer作为图像名称。
您还可以使用Quay上的最新Docker映像在Kubernetes上部署模型。
在您的kubernetes群集上,运行以下命令:
$ kubectl apply -f https://github.com/IBM/max-image-resolution-enhancer/raw/master/max-image-resolution-enhancer.yaml
该模型将在端口5000内部提供,但也可以通过NodePort在外部访问。
可以在此处找到有关如何将这种最大模型部署到IBM云上生产的更精细的教程。
在本地克隆此存储库。在终端中,运行以下命令:
$ git clone https://github.com/IBM/max-image-resolution-enhancer.git
将目录更改为存储库基础文件夹:
$ cd max-image-resolution-enhancer
要在本地构建Docker映像,请运行:
$ docker build -t max-image-resolution-enhancer .
所有必需的模型资产将在构建过程中下载。请注意,当前此Docker映像仅是CPU(我们将稍后添加对GPU图像的支持)。
要运行自动启动Serving API模型的Docker Image,请运行:
$ docker run -it -p 5000:5000 max-image-resolution-enhancer
API服务器会自动生成一个交互式摇摇欲坠的文档页面。转到http://localhost:5000加载它。您可以从那里探索API并创建测试请求。
使用model/predict端点加载测试图像(您可以使用samples/test_examples/low_resolution文件夹中的测试图像之一),以便返回高分辨率输出图像。
理想的输入图像是一个PNG文件,其分辨率在100x100和500x500之间,最好是没有任何捕捉后处理和浮华的颜色。该模型能够从像素化图像(低DPI)中生成细节,但无法纠正“模糊”图像。
左:输入图像(128×80)。右:输出图像(512×320)

您也可以在命令行上进行测试,例如:
$ curl -F "image=@samples/test_examples/low_resolution/food.png" -XPOST http://localhost:5000/model/predict > food_high_res.png
上面的命令将将低分辨率food.png文件发送到模型,并将高分辨率输出图像保存到root目录中的food_high_res.png文件。
要以调试模式运行Blask API应用程序,请编辑config.py在应用程序设置下设置DEBUG = True 。然后,您需要重建Docker映像(请参阅第1步)。
请记住,在生产中运行模型时,请设置DEBUG = False 。
要停止Docker容器,请在终端中键入CTRL + C
model/predict端点会Killed码头容器这可能是由于Docker内存分配给2 GB的默认限制而引起的。导航到Docker Desktop应用程序下的
Preferences菜单。使用滑块将可用的内存增加到8 GB,然后重新启动Docker桌面。
该模型基本上生成了细节“稀薄的空气”。没有做出假设,就不可能创造出任何东西。该网络试图在低分辨率图像中识别元素可以从中推断出现实(人眼|超分辨率)的外观。如果一组像素强烈类似于与图像内容无关的观察结果,则可能导致观察结果“物理上可能”。
例如:低分辨率图像中的白色像素可能已转换为雪花,尽管原始图片可能是在沙漠中拍摄的。这个示例是虚构的,实际上尚未观察到。
不幸的是,在某些图像中观察人工制品是不可避免的,因为任何神经网络都受到培训数据的技术限制和特征。
请记住,以下最佳结果是:
- PNG图像
- 一个足够放大的图像。在此过程中,网络将一个像素块分组在一起。如果该块包含的细节比网络产生的更多细节,则结果将是虚假的。
- 在自然光下拍摄的图像,没有过滤器,几乎没有明亮或浮华的颜色。神经网络未经大量编辑的图像进行培训。
- 具有足够高分辨率的图像不会使网络与多种可能性混淆(例如,非常低分辨率的图像中的唯一像素可以代表整个汽车,人,三明治,..)
- 该模型能够从像素化图像(低DPI)中生成细节,但无法纠正“模糊”图像。
如果您有兴趣为模型资产交换项目做出贡献或有任何疑问,请按照此处的说明进行操作。