ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

GMN 晴空/多云分类器实战指南:基于夜转日风格迁移的 ResNet18 图像分类与训练数据复现

GMN 晴空/多云分类器实战指南:基于夜转日风格迁移的 ResNet18 图像分类与训练数据复现 人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本文是一份面向 Global Meteor NetworkGMN地面相机图像的晴空 vs 多云Clear vs. Cloudy二分类完整技术指南。该分类器由 contrails/gmn_clear_cloudy_classifier 提供核心思路是利用夜间星象可见性天然获得晴空标注再通过 Gemini 图像模型把夜景风格迁移为白昼图像来训练一个可泛化到真实 GMN 白昼影像的分类器最终用于筛选出不会被自然云层遮挡、适合进行尾迹contrail观测的时间段。读完本文你将掌握环境搭建、模型推理与阈值调优、白昼测试数据生成、训练数据集全流程复现下载→抽帧→打标→风格迁移→训练→操作点选择以及配套工具脚本的用法。背景与核心思路Global Meteor Network 部署了大量地面相机持续拍摄夜空用于流星观测。这些影像同样可以服务于尾迹contrail研究——但前提是图像中的天空没有被自然云层遮挡。由此产生一个基础但关键的视觉任务判断一张 GMN 相机图像是晴空还是多云。直接的难点在于标签获取人工标注白昼图像中是否有云成本高且主观。而 GMN 数据天然存在一个巧妙的机会——夜间图像可以通过星星是否可见自动判定晴空与否GMN 代码库正是依据星象可见性计算所谓的 flux time intervals即流星通量可见的时间区间无云时流星不会被遮挡因此这些区间天然可作为晴空标签。但分类器最终要部署在白天场景直接用夜间图像训练会出现域偏移。项目的解决方案详见 contrails/gmn_clear_cloudy_classifier/README.md一个基于 ResNet18 的分类器在经风格迁移由 Gemini Nano Banana 将夜景转为白昼的 GMN 图像上微调得到可良好泛化到真实 GMN 白昼影像的晴空/多云分类器。整体数据流如下夜间 GMN 影像 flux time intervals晴空区间→ 自动生成晴空/多云标签用 Gemini 图像模型把夜间图像转为白昼风格保持云、前景、背景不变只改变光照在风格迁移后的白昼图像上微调 ResNet18将模型应用于真实白昼影像过滤掉被云遮挡的时间段。环境准备官方文档强烈建议使用虚拟环境见 README_inference.md 与 README_training.mdvirtualenv venv source venv/bin/activate pip install --index-url https://pypi.org/simple -r requirements.txt依赖清单见 requirements.txttorch、torchvision模型与训练、pandas、numpy数据处理、pillow图像读写、google-genai夜转日风格迁移与校验、opencv-python-headless白昼测试帧提取。训练/复现流程还有两项额外前置条件ffmpeg用于稳健的帧提取extract_frames.py直接调用 ffmpeg 批处理Gemini API key填入 example_night_to_day.py 顶部的client genai.Client(api_keyTODO_ADD_YOUR_API_KEY)SSH/SFTP 凭据分别填入 download_good_weather_videos.py、find_clearsky_days.py 以及 reproduce_training_data.py 顶部的SSH_KEY与SFTP_USERGMN 数据通过 sftp 从远程目录拉取。快速开始bash python inference.py如无特殊参数该命令使用默认模型、默认测试集与默认阈值完成推理并输出inference_results.csv。下文分别展开推理与训练/数据复现两条路径。推理实战用训练好的模型分类图像推理入口为 inference.py它会遍历指定目录中的所有.png/.jpg/.jpeg图片并输出 CSV 结果。获取模型权重推理前需确保weather_model_cleaned.pth或你指定的模型文件存在。官方模型权重可从 https://storage.googleapis.com/contrails_data/gmn_clear_cloudy_classifier/weather_model_cleaned.pth 下载这是推理子文档中明确给出的获取途径。命令行参数参数默认值说明--image_dirextracted_day_test待分类图片所在目录--output_fileinference_results.csv结果 CSV 输出路径--threshold0.80判定为 clear 的概率阈值0.0–1.0--model_pathweather_model_cleaned.pth训练好的模型权重路径自定义参数示例python inference.py --image_dir path_to_images \ --output_file results.csv \ --threshold 0.0-1.0 \ --model_path path_to_model.pth高精度推理示例若需要非常高的精度可用严格阈值 0.95python inference.py --threshold 0.95 --output_file precise_results.csv源码级实现解析从 inference.py 可以看出关键实现细节模型结构与训练时保持一致get_model()加载models.resnet18(weightsweights)ImageNet 预训练权重并把最后的全连接层替换为nn.Linear(num_ftrs, 2)输出两个类别晴/云的 logits设备自动选择优先 CUDA其次 Apple MPS最后回退 CPUDEVICE常量输入预处理Resize(256)→CenterCrop(224)→ToTensor()→ 使用 ImageNet 统计量mean[0.485, 0.456, 0.406],std[0.229, 0.224, 0.225]做标准化与训练时的验证分支变换一致分类判定逻辑对 logits 做softmax取类别 1clear的概率clear_prob若clear_prob threshold判为clear否则判为cloudyCSV 中confidence列记录的是被判定类别的概率clear 用类别 1 概率cloudy 用类别 0 概率输出格式每行filename, prediction, confidence每处理 100 张打印一次进度单张图片失败会以ERROR行记录而不中断整体流程。生成测试数据可选若默认目录extracted_day_test/不存在可以从原始 GMN 数据自行生成白昼测试集共三步对应 README_inference.md识别晴好日期python find_clearsky_days.pyfind_clearsky_days.py 通过 sftp 扫描远程_detected目录并批量下载各日的flux_time_intervals.json筛选出存在晴空区间的日期最终产出good_weather_dates.json供下一步使用。下载视频python download_good_weather_videos.py for f in download_batch_*.sh; do bash $f; donedownload_good_weather_videos.py 依据good_weather_dates.json中的日期从远程 CAWEC2–CAWEC6 相机目录中筛选白昼时间段起始小时在 8–17 点之间的 clip并把下载命令按BATCH_SIZE 10拆分成多个download_batch_*.sh脚本。抽取帧python extract_day_frames.pyextract_day_frames.py 用 OpenCV 打开每个视频随机采样 1000 个帧索引写入extracted_day_test/文件名为daytime_相机_日期_frame_索引.png。训练数据全流程复现完整训练流程分为夜间数据识别与下载 → 抽帧 → 生成标签 → 夜转日风格迁移 → 训练与操作点选择 → 可选标签审计 → 最终模型训练七个阶段对应 README_training.md。1. 识别并下载原始夜间数据python3 reproduce_training_data.py bash download_night_data.shreproduce_training_data.py 做了两件事解析目标日期从仓库自带的 original_clear_image_names.txt 与 original_cloudy_image_names.txt 中提取原始训练图像文件名格式如20251106_234624_983.png并按小时 12 属于前一个夜晚的规则归并出目标夜间日期集合生成下载脚本对每个相机CAWEC_IDS [CAWEC2, CAWEC3, CAWEC4, CAWEC5, CAWEC6]通过 sftp 列出远程视频目录匹配CAWECx_YYYYMMDD_HHMMSS_to_*且起始小时 ≥18 或 ≤6 的夜间 clip和对应的*_detected晴空区间目录求两者日期交集后生成可执行的download_night_data.sh。该脚本会下载两类数据夜间 timelapse 视频.mp4与帧时间映射.json到raw_data/晴空时间区间即 Flux time intervals.json到flux_time_intervals/。2. 抽取夜间帧python3 extract_frames.py输出extracted_night/下的 PNG 图像。 extract_frames.py 的核心优化在于按视频文件批量调用 ffmpeg它用-vf selecteq(n,idx1)eq(n,idx2)... -vsync 0一次选中全部目标帧号随后把输出按选中顺序重命名为目标文件名同时会跳过已经抽取过的图片天然支持断点续跑。3. 生成标签python3 label_images.py输出extracted_night_labels.csv。 label_images.py 的实现要点读取flux_time_intervals/下所有*_flux_time_intervals.json每个文件中的time_intervals字段是一组[start, end]UTC 时间戳对全部加载为晴空区间列表从图像文件名YYYYMMDD_HHMMSS_mmm.png解析 UTC 时间戳若图片时间落在任一晴空区间内则标记为clear否则为cloudy最终写出 CSV 并在终端打印标签分布。4. 夜转日风格迁移python3 example_night_to_day.py输入extracted_night/输出converted_day/。 example_night_to_day.py 是这套流程中最有特色的一步其实现值得细读调用gemini-2.5-flash-image模型提示词明确要求把图像变成上午 10 点的白天样子前景/背景保持不变仅变为白天光照如果图像中有云云必须保持不变无云时天空背景也保持不变只是变成白天光照、没有星星——这是保证云这个判别特征在域迁移后仍忠实保留的关键逐图校验与纠错生成后用gemini-2.5-flash问模型图像天空中是否有星星HAS_STARS / NO_STARS若检测到HAS_STARS则再次调用图像模型执行 remove those stars, it is daytime 的修正并覆盖保存断点续跑输出文件已存在时直接跳过因此中断后重启不会重复处理已转换的图片。5. 训练模型并选择操作点python3 train_cleaned.py fold 0 python3 train_cleaned.py fold 1 python3 train_cleaned.py fold 2 python3 train_cleaned.py analyzetrain_cleaned.py 中的关键配置CSV_FILE extracted_night_labels.csvIMAGE_DIR converted_dayK_FOLDS 3BATCH_SIZE 32缺失数据优雅降级WeatherDataset构造时会按image_filename过滤掉在converted_day/中不存在的图片因此部分数据缺失也能继续训练两阶段微调第一阶段冻结主干、仅用 Adam(lr1e-3) 训练新的全连接层 3 个 epoch第二阶段解冻全部参数、用 Adam(lr1e-5) 训练 7 个 epoch并在验证集上按准确率保留最优概率输出数据增强训练分支使用Resize(256) → RandomCrop(224) → RandomHorizontalFlip → RandomRotation(15) → ColorJitter(brightness0.2, contrast0.2)验证分支用CenterCrop(224)。三个 fold 各自把预测概率与标签保存为preds_fold_{i}.npy。analyze步骤汇总三折结果在 0.0–1.0 之间按 21 个等距阈值打印Threshold / Precision / Recall表格供你选择符合需求的操作点例如 0.80 用于高精度。选定后把阈值更新到inference.py或推理命令中即可。6. 标签审计可选自动生成的标签可能包含歧义或错误。原项目维护者对基于flux_time_intervals.json自动生成的标签做过人工复核剔除了错误样本以提升模型性能。你也可以这样做直接编辑extracted_night_labels.csv或删除converted_day/中的相应图像。7. 最终模型训练选定操作点、完成标签审计后用全部数据训练最终模型python3 train_cleaned.py final该命令复用两阶段微调策略fc 层 3 epoch 的 lr1e-3 全参数 7 epoch 的 lr1e-5完成后把权重保存到weather_model_cleaned.pth——正是推理阶段默认加载的模型文件。配套工具脚本filter_cloudy_intervals.py扫描flux_time_intervals/把time_intervals为空列表意味着整夜几乎全云覆盖的 JSON 文件移动到all_cloudy_time_intervals/子目录便于组织与清理数据create_label_files.py读取高精度推理结果inference_results_precise_clearsky.csv在图片目录中为每条预测创建空的侧车标记文件如image.clear.txt。这样人工复核时只需重命名文件扩展名即可快速修正标签大幅提升标注效率。复现技巧与经验要点README_training.md 汇总了项目维护者在复现过程中沉淀的四条实战经验数据完整性train_cleaned.py自带过滤逻辑extracted_night_labels.csv中缺失于converted_day/的图片会被自动跳过部分数据集也能优雅训练高效抽帧务必使用更新版的extract_frames.py它按视频批量调用 ffmpeg比逐帧顺序抽取显著更快、更稳定可续跑转换example_night_to_day.py支持断点续跑中断后重启会跳过已转换图片适合长耗时、易中断的风格迁移阶段定向训练为获得最优类别平衡应让reproduce_training_data.py精确锁定 original_clear_image_names.txt 与 original_cloudy_image_names.txt 中列出的原始日期这样通常能得到约57% 晴空比例的训练集兼顾两类样本的代表性。在尾迹观测管线中的位置整个contrails/目录含 demos/ContrailBench.ipynb、demos/Public_Contrails_API_Tester.ipynb 等围绕尾迹研究展开而本分类器的定位是前置过滤在大量 GMN 观测中先把被自然云层遮挡的时间段筛掉保证后续尾迹分析只面对晴空影像。得益于夜间星象可见性 → 自动标签风格迁移桥接昼夜域差异的设计整个训练数据可以低成本自动构建最终模型以 0.80 阈值即可在真实白昼影像上取得满足过滤需求的高精度表现。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐MNN 预训练模型 Finetune 实战基于 MobileNetV2 的图像分类迁移学习MNN 预训练模型 Finetune 实战基于 MobileNetV2 的图像分类迁移学习 本文围绕 MNN 训练框架中的 Finetune迁移学习/微调人工智能推理引擎深度学习本地部署大模型Ultralytics YOLO 图像分类训练实战基于 CIFAR-100 细粒度数据集训练 YOLO 分类模型Ultralytics YOLO 图像分类训练实战基于 CIFAR 100 细粒度数据集训练 YOLO 分类模型 本文以 Ultralytics 仓库中的 C人工智能计算机视觉深度学习机器学习预训练基于 Ultralytics YOLO 使用 Caltech-256 数据集训练图像分类模型实战指南基于 Ultralytics YOLO 使用 Caltech 256 数据集训练图像分类模型实战指南 Caltech 256 是计算机视觉领域经典的通用对象分类人工智能深度学习计算机视觉上一篇探索Flutter-Dribbble-Challenge的4大挑战模块从银行应用到Headspace风格的完整实现下一篇Wechaty多语言支持终极指南打造全球化聊天机器人创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表