我的工作场所有一个为期 2 周的代码挑战,其中涉及生成一种算法,以尽可能接近地重现 100 个样本 Bob Ross 的画作,并给出一些限制:
- “绘画”作为 JSON 文件提交,其中包含背景颜色和一系列“笔触”。
- 笔触具有起点、终点、半径和颜色。
- 每幅画的笔画限制为 500 笔。
- 所有 100 幅参考画都具有完全相同的尺寸和纵横比:450x337。
服务器“绘制”每个提交,然后与参考绘制进行每像素差异。提交的绘画中的每个像素都根据它与源像素值的相似程度在标量 0-1 范围内进行评分,并且绘画的分数是所有像素分数的平均值。运行比赛的人已经发布了可以在 MacOS / Linux 的命令行上运行的绘画和评分图像库。
我觉得这个问题应该适合 ML,因为我们有一种机制可以对算法尝试的每次尝试进行细粒度评分。生成和评分一幅画只需要大约 200 毫秒。不幸的是,我基本上只是一个 ML 狂热分子(我听了很多播客)并且不知道我应该如何建模这个问题。
让算法进行 500 次完全随机的笔画,然后对输出进行分级,这将花费很长时间才能收敛到有用的东西上。我考虑将笔画的颜色空间限制为每幅画中最常见的 64 种颜色(通过在开始绘画之前运行直方图),并限制算法的画笔大小选择。
作为记录,只需提交一张最常见颜色的实心图像,我就获得了 65% 的分数。目前获胜的算法大多只是将绘画转换为网格,并将每个扇区的平均颜色点放在每个扇区的顶部。