chore: 调整数据集参数

This commit is contained in:
unanmed 2026-03-12 20:12:55 +08:00
parent 266f50db73
commit 011d828f1d
5 changed files with 50 additions and 14 deletions

View File

@ -268,6 +268,8 @@ const labelConfig: IAutoLabelConfig = {
maxFishCount: 2, maxFishCount: 2,
minEntryCount: 1, minEntryCount: 1,
maxEntryCount: 4, maxEntryCount: 4,
guassainRadius: 2,
heatmapKernel: 3,
ignoreIssues: true, ignoreIssues: true,
customTowerFilter: info => { customTowerFilter: info => {
// if (info.name !== 'Apeiria') { // if (info.name !== 'Apeiria') {

View File

@ -95,7 +95,7 @@ export async function autoLabelTowers(
} }
// 转换楼层 // 转换楼层
const converted = convertTowerMap(result, floor, config); const converted = convertTowerMap(result, floor, config);
const floorInfo = parseFloorInfo(info, converted.map); const floorInfo = parseFloorInfo(info, converted.map, config);
const floorData: IConvertedMapInfo = { const floorData: IConvertedMapInfo = {
data: converted, data: converted,
tower: info, tower: info,

View File

@ -1,5 +1,5 @@
import { readFile } from 'fs/promises'; import { readFile } from 'fs/promises';
import { IFloorInfo, ITowerInfo, TowerColor } from './types'; import { IAutoLabelConfig, IFloorInfo, ITowerInfo, TowerColor } from './types';
import { buildTopologicalGraph } from '../topology/graph'; import { buildTopologicalGraph } from '../topology/graph';
import { import {
commonDoorTiles, commonDoorTiles,
@ -153,7 +153,11 @@ export function computeWallDensityStd(
* @param tower * @param tower
* @param map * @param map
*/ */
export function parseFloorInfo(tower: ITowerInfo, map: number[][]): IFloorInfo { export function parseFloorInfo(
tower: ITowerInfo,
map: number[][],
config: IAutoLabelConfig
): IFloorInfo {
const topo = buildTopologicalGraph(map); const topo = buildTopologicalGraph(map);
const flattened = map.flat(); const flattened = map.flat();
const area = flattened.length; const area = flattened.length;
@ -229,17 +233,42 @@ export function parseFloorInfo(tower: ITowerInfo, map: number[][]): IFloorInfo {
fishCount, fishCount,
hasUselessBranch, hasUselessBranch,
wallDensityStd: computeWallDensityStd(map, wallTiles, 5), wallDensityStd: computeWallDensityStd(map, wallTiles, 5),
wallHeatmap: gaussainHeatmap(generateHeatmap(map, wallTiles, 1)), wallHeatmap: gaussainHeatmap(
enemyHeatmap: gaussainHeatmap(generateHeatmap(map, enemyTiles, 1)), generateHeatmap(map, wallTiles, config.heatmapKernel),
resourceHeatmap: gaussainHeatmap( config.guassainRadius
generateHeatmap(map, resourceTiles, 1)
), ),
potionHeatmap: gaussainHeatmap(generateHeatmap(map, potionTiles, 1)), enemyHeatmap: gaussainHeatmap(
gemHeatmap: gaussainHeatmap(generateHeatmap(map, gemTiles, 1)), generateHeatmap(map, enemyTiles, config.heatmapKernel),
keyHeatmap: gaussainHeatmap(generateHeatmap(map, keyTiles, 1)), config.guassainRadius
itemHeatmap: gaussainHeatmap(generateHeatmap(map, itemTiles, 1)), ),
entryHeatmap: gaussainHeatmap(generateHeatmap(map, entryTiles, 1)), resourceHeatmap: gaussainHeatmap(
doorHeatmap: gaussainHeatmap(generateHeatmap(map, doorTiles, 1)) generateHeatmap(map, resourceTiles, config.heatmapKernel),
config.guassainRadius
),
potionHeatmap: gaussainHeatmap(
generateHeatmap(map, potionTiles, config.heatmapKernel),
config.guassainRadius
),
gemHeatmap: gaussainHeatmap(
generateHeatmap(map, gemTiles, config.heatmapKernel),
config.guassainRadius
),
keyHeatmap: gaussainHeatmap(
generateHeatmap(map, keyTiles, config.heatmapKernel),
config.guassainRadius
),
itemHeatmap: gaussainHeatmap(
generateHeatmap(map, itemTiles, config.heatmapKernel),
config.guassainRadius
),
entryHeatmap: gaussainHeatmap(
generateHeatmap(map, entryTiles, config.heatmapKernel),
config.guassainRadius
),
doorHeatmap: gaussainHeatmap(
generateHeatmap(map, doorTiles, config.heatmapKernel),
config.guassainRadius
)
}; };
return floorInfo; return floorInfo;

View File

@ -183,6 +183,10 @@ export interface IAutoLabelConfig {
/** 最大墙壁密度标准差,用于描述一个地图墙壁分布是否均匀的,较大的时候可能是特殊地图,不符合要求 */ /** 最大墙壁密度标准差,用于描述一个地图墙壁分布是否均匀的,较大的时候可能是特殊地图,不符合要求 */
readonly maxWallDensityStd: number; readonly maxWallDensityStd: number;
/** 热力图统计算子 */
readonly heatmapKernel: number;
/** 热力图高斯模糊的标准差 */
readonly guassainRadius: number;
/** 是否忽略问题 */ /** 是否忽略问题 */
readonly ignoreIssues: boolean; readonly ignoreIssues: boolean;

View File

@ -44,6 +44,7 @@ GENERATE_STEP = 8
MAP_SIZE = 13 * 13 MAP_SIZE = 13 * 13
HEATMAP_CHANNEL = 9 HEATMAP_CHANNEL = 9
LABEL_SMOOTHING = 0.1 LABEL_SMOOTHING = 0.1
RAND_RATIO = 0.1
MASK_PROBS = [0.5, 0.5] # 纯随机,分块随机 MASK_PROBS = [0.5, 0.5] # 纯随机,分块随机
device = torch.device( device = torch.device(
@ -114,7 +115,7 @@ def train():
B, H, W = target_map.shape B, H, W = target_map.shape
target_map = target_map.view(B, H * W) target_map = target_map.view(B, H * W)
rand = torch.randn_like(heatmap).to(device) * 0.05 rand = torch.randn_like(heatmap).to(device) * RAND_RATIO
if random.random() > 0.5: if random.random() > 0.5:
heatmap = heatmap + rand heatmap = heatmap + rand