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,
minEntryCount: 1,
maxEntryCount: 4,
guassainRadius: 2,
heatmapKernel: 3,
ignoreIssues: true,
customTowerFilter: info => {
// if (info.name !== 'Apeiria') {

View File

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

View File

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

View File

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

View File

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