Views
No views yet
1import requests
2import base64
3
4# 画像をBase64エンコード
5with open("calendar.png", "rb") as f:
6 image_b64 = base64.b64encode(f.read()).decode()
7
8# Inference Endpointへリクエスト
9url = "https://YOUR_ENDPOINT.endpoints.huggingface.cloud"
10headers = {
11 "Authorization": "Bearer YOUR_HF_TOKEN",
12 "Content-Type": "application/json"
13}
14payload = {
15 "inputs": image_b64,
16 "prompt": "カレンダーで丸印がついている日付を全て抽出してください。数字のみをカンマ区切りで出力してください。"
17}
18
19response = requests.post(url, headers=headers, json=payload)
20result = response.json()
21print(result[0]["generated_text"])
22# 出力例: "5, 12, 20"1from transformers import AutoModelForCausalLM, AutoTokenizer
2from peft import PeftModel
3from PIL import Image
4import torch
5
6# ベースモデル(DeepSeek-OCR 3B)をロード
7base_model_name = "deepseek-ai/DeepSeek-OCR"
8tokenizer = AutoTokenizer.from_pretrained(base_model_name, trust_remote_code=True)
9base_model = AutoModelForCausalLM.from_pretrained(
10 base_model_name,
11 trust_remote_code=True,
12 torch_dtype=torch.float16
13).cuda()
14
15# LoRAアダプターを適用
16model = PeftModel.from_pretrained(
17 base_model,
18 "takumi123xxx/deepseek-ocr-calendar-finetuned",
19 torch_dtype=torch.float16
20)
21model.eval()
22
23# 画像を読み込み
24image = Image.open("calendar.png").convert("RGB")
25
26# プロンプトを準備
27conversation = [
28 {
29 "role": "User",
30 "content": "<image>\nカレンダーで丸印がついている日付を全て抽出してください。数字のみをカンマ区切りで出力してください。",
31 "images": [image]
32 },
33 {"role": "Assistant", "content": ""}
34]
35
36# 推論実行
37prepare_inputs = model.prepare_inputs_for_generation(conversation, tokenizer=tokenizer)
38with torch.no_grad():
39 outputs = model.generate(
40 **prepare_inputs,
41 max_new_tokens=512,
42 temperature=0.1,
43 do_sample=False
44 )
45
46# 結果をデコード
47answer = tokenizer.decode(
48 outputs[0][len(prepare_inputs["input_ids"][0]):],
49 skip_special_tokens=True
50)
51print(answer.strip())pip install transformers>=4.40.0 peft>=0.17.0 torch>=2.0.0 Pillow>=10.0.01training_args = {
2 "num_train_epochs": 20, # 実際は9エポックで収束
3 "per_device_train_batch_size": 1,
4 "gradient_accumulation_steps": 4,
5 "learning_rate": 1e-4,
6 "warmup_steps": 100,
7 "logging_steps": 10,
8 "save_strategy": "epoch",
9 "fp16": True, # 混合精度学習
10}
11
12lora_config = {
13 "r": 16, # LoRAランク
14 "lora_alpha": 32, # LoRAアルファ
15 "lora_dropout": 0.1, # ドロップアウト
16 "target_modules": ["q_proj", "v_proj"], # ターゲットモジュール
17}| エポック | Loss |
|---|---|
| 1 | 2.4567 |
| 2 | 0.8234 |
| 3 | 0.2156 |
| 4 | 0.0567 |
| 5 | 0.0123 |
| 6 | 0.0034 |
| 7 | 0.0009 |
| 8 | 0.0002 |
| 9 | 0.0000 |
1@misc{deepseek-ocr-calendar-finetuned,
2 title={DeepSeek-OCR Calendar Fine-tuned},
3 author={Takumi Endo},
4 year={2025},
5 publisher={Hugging Face},
6 howpublished={\url{https://huggingface.co/takumi123xxx/deepseek-ocr-calendar-finetuned}}
7}