<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Yufei Liu's Homepages</title><link>https://liu-yufei.github.io/</link><atom:link href="https://liu-yufei.github.io/index.xml" rel="self" type="application/rss+xml"/><description>Yufei Liu's Homepages</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Mon, 24 Oct 2022 00:00:00 +0000</lastBuildDate><image><url>https://liu-yufei.github.io/media/icon_hu17033853472409137288.png</url><title>Yufei Liu's Homepages</title><link>https://liu-yufei.github.io/</link></image><item><title>Example Talk</title><link>https://liu-yufei.github.io/event/example/</link><pubDate>Sat, 01 Jun 2030 13:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/event/example/</guid><description>&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Click on the &lt;strong>Slides&lt;/strong> button above to view the built-in slides feature.&lt;/span>
&lt;/div>
&lt;p>Slides can be added in a few ways:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Create&lt;/strong> slides using Hugo Blox Builder&amp;rsquo;s &lt;a href="https://docs.hugoblox.com/reference/content-types/" target="_blank" rel="noopener">&lt;em>Slides&lt;/em>&lt;/a> feature and link using &lt;code>slides&lt;/code> parameter in the front matter of the talk file&lt;/li>
&lt;li>&lt;strong>Upload&lt;/strong> an existing slide deck to &lt;code>static/&lt;/code> and link using &lt;code>url_slides&lt;/code> parameter in the front matter of the talk file&lt;/li>
&lt;li>&lt;strong>Embed&lt;/strong> your slides (e.g. Google Slides) or presentation video on this page using &lt;a href="https://docs.hugoblox.com/reference/markdown/" target="_blank" rel="noopener">shortcodes&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Further event details, including &lt;a href="https://docs.hugoblox.com/reference/markdown/" target="_blank" rel="noopener">page elements&lt;/a> such as image galleries, can be added to the body of this page.&lt;/p></description></item><item><title>FLUX.2-based Image Identity Consistency Enhancement</title><link>https://liu-yufei.github.io/project/flux2-identity-consistency/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/project/flux2-identity-consistency/</guid><description>&lt;p>Developed during an algorithm internship with the face team at Meitu MT-Lab, this project addresses identity drift in AIGC portrait editing. The module takes an edited portrait and a user reference image as inputs, then refines identity while retaining the intended edit.&lt;/p>
&lt;p>I built the data pipeline for face detection, identity clustering, mask generation, canonical alignment, reference matching, and quality filtering. I also designed joint perceptual, identity, and contour objectives for multi-step FLUX.2 LoRA training and developed evaluation tools for identity similarity, facial contour change, and denoising trajectories.&lt;/p>
&lt;p>The resulting model improved reference identity similarity across internal test sets and was deployed in the telephoto portrait feature of AI Camera.&lt;/p>
&lt;style>
.flux-results { margin: 3rem auto 1rem; max-width: 1120px; }
.flux-results h2 { margin: 0 0 1.5rem; font-size: 1.75rem; }
.flux-case { padding: 1.75rem 0; border-bottom: 1px solid rgba(128, 128, 128, 0.28); }
.flux-case:last-child { border-bottom: 0; }
.flux-case-head { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; margin-bottom: 1rem; }
.flux-case-title { margin: 0; font-size: 1.15rem; font-weight: 700; }
.flux-gain { color: #13866f; font-size: 1.05rem; font-weight: 700; white-space: nowrap; }
.flux-images { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; }
.flux-image img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; object-position: center top; border-radius: 0.65rem; }
.flux-image-label { display: block; margin-top: 0.45rem; text-align: center; font-size: 0.92rem; font-weight: 650; }
.flux-sim { margin-top: 0.9rem; text-align: right; font-variant-numeric: tabular-nums; opacity: 0.78; }
.flux-summary { margin-top: 4rem; }
.flux-chart { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 2rem; align-items: end; margin-top: 2rem; }
.flux-chart-group { text-align: center; }
.flux-bars { height: 230px; display: flex; align-items: end; justify-content: center; gap: 0.8rem; border-bottom: 1px solid rgba(128, 128, 128, 0.4); }
.flux-bar { position: relative; width: min(36%, 72px); min-height: 2rem; border-radius: 0.45rem 0.45rem 0 0; }
.flux-bar.before { background: #8f278c; }
.flux-bar.after { background: #bc84b7; }
.flux-bar-value { position: absolute; top: -1.75rem; left: 50%; transform: translateX(-50%); font-weight: 700; font-variant-numeric: tabular-nums; }
.flux-group-name { margin: 0.8rem 0 0.25rem; font-weight: 700; }
.flux-group-gain { color: #13866f; font-size: 1.35rem; font-weight: 750; }
.flux-group-meta { margin-top: 0.35rem; font-size: 0.85rem; line-height: 1.55; opacity: 0.72; }
.flux-legend { display: flex; justify-content: center; gap: 1.5rem; margin-top: 1.5rem; font-size: 0.9rem; }
.flux-legend span::before { content: ""; display: inline-block; width: 0.8rem; height: 0.8rem; margin-right: 0.4rem; border-radius: 0.18rem; vertical-align: -0.05rem; }
.flux-legend .before::before { background: #8f278c; }
.flux-legend .after::before { background: #bc84b7; }
.flux-conclusion { margin-top: 1.75rem; padding-top: 1.25rem; border-top: 1px solid rgba(128, 128, 128, 0.28); line-height: 1.8; }
@media (max-width: 700px) {
.flux-case-head { display: block; }
.flux-gain { display: block; margin-top: 0.35rem; }
.flux-images { gap: 0.5rem; }
.flux-image-label { font-size: 0.78rem; }
.flux-chart { grid-template-columns: 1fr; gap: 3rem; }
.flux-bars { height: 180px; gap: 0.35rem; }
.flux-bar { width: 38%; }
.flux-bar-value { font-size: 0.78rem; }
.flux-group-meta { font-size: 0.85rem; }
}
&lt;/style>
&lt;section class="flux-results" aria-labelledby="flux-qualitative-title">
&lt;h2 id="flux-qualitative-title">Qualitative Results&lt;/h2>
&lt;article class="flux-case">
&lt;div class="flux-case-head">
&lt;h3 class="flux-case-title">Frontal Face Reshaping × JJ Lin&lt;/h3>
&lt;span class="flux-gain">Identity Similarity &amp;#43;0.186&lt;/span>
&lt;/div>
&lt;div class="flux-images">
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case1-input_hu16733012294050469293.webp" alt="Input image for Frontal Face Reshaping × JJ Lin">&lt;figcaption class="flux-image-label">Input&lt;/figcaption>&lt;/figure>
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case1-reference_hu4679323974125261232.webp" alt="Reference image for Frontal Face Reshaping × JJ Lin">&lt;figcaption class="flux-image-label">Reference&lt;/figcaption>&lt;/figure>
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case1-output_hu3685900372443741842.webp" alt="Refined output for Frontal Face Reshaping × JJ Lin">&lt;figcaption class="flux-image-label">Output&lt;/figcaption>&lt;/figure>
&lt;/div>
&lt;div class="flux-sim">Input–Reference 0.410　→　Output–Reference 0.596&lt;/div>
&lt;/article>
&lt;article class="flux-case">
&lt;div class="flux-case-head">
&lt;h3 class="flux-case-title">Half-Profile Face Reshaping × Jackson Yee&lt;/h3>
&lt;span class="flux-gain">Identity Similarity &amp;#43;0.298&lt;/span>
&lt;/div>
&lt;div class="flux-images">
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case2-input_hu12950896630273560113.webp" alt="Input image for Half-Profile Face Reshaping × Jackson Yee">&lt;figcaption class="flux-image-label">Input&lt;/figcaption>&lt;/figure>
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case2-reference_hu10496544986031870863.webp" alt="Reference image for Half-Profile Face Reshaping × Jackson Yee">&lt;figcaption class="flux-image-label">Reference&lt;/figcaption>&lt;/figure>
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case2-output_hu11499135139916125719.webp" alt="Refined output for Half-Profile Face Reshaping × Jackson Yee">&lt;figcaption class="flux-image-label">Output&lt;/figcaption>&lt;/figure>
&lt;/div>
&lt;div class="flux-sim">Input–Reference 0.561　→　Output–Reference 0.859&lt;/div>
&lt;/article>
&lt;article class="flux-case">
&lt;div class="flux-case-head">
&lt;h3 class="flux-case-title">Strong Stage Lighting × G-Dragon&lt;/h3>
&lt;span class="flux-gain">Identity Similarity &amp;#43;0.389&lt;/span>
&lt;/div>
&lt;div class="flux-images">
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case3-input_hu14981943814846579746.webp" alt="Input image for Strong Stage Lighting × G-Dragon">&lt;figcaption class="flux-image-label">Input&lt;/figcaption>&lt;/figure>
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case3-reference_hu9276370965852099679.webp" alt="Reference image for Strong Stage Lighting × G-Dragon">&lt;figcaption class="flux-image-label">Reference&lt;/figcaption>&lt;/figure>
&lt;figure class="flux-image">&lt;img src="https://liu-yufei.github.io/project/flux2-identity-consistency/case3-output_hu10029804751481071616.webp" alt="Refined output for Strong Stage Lighting × G-Dragon">&lt;figcaption class="flux-image-label">Output&lt;/figcaption>&lt;/figure>
&lt;/div>
&lt;div class="flux-sim">Input–Reference 0.286　→　Output–Reference 0.675&lt;/div>
&lt;/article>
&lt;/section>
&lt;section class="flux-results flux-summary" aria-labelledby="flux-quantitative-title">
&lt;h2 id="flux-quantitative-title">Overall Evaluation&lt;/h2>
&lt;div class="flux-chart" role="img" aria-label="Average identity similarity before and after refinement on three test sets">
&lt;div class="flux-chart-group">
&lt;div class="flux-bars">&lt;div class="flux-bar before" style="height:50.75%">&lt;span class="flux-bar-value">0.406&lt;/span>&lt;/div>&lt;div class="flux-bar after" style="height:85%">&lt;span class="flux-bar-value">0.680&lt;/span>&lt;/div>&lt;/div>
&lt;div class="flux-group-name">Celeb-new&lt;/div>&lt;div class="flux-group-gain">+0.274&lt;/div>
&lt;div class="flux-group-meta">115 cases, 100.0% improved&lt;br>Median pose gap 1.8°, non-face MAE 0.060&lt;/div>
&lt;/div>
&lt;div class="flux-chart-group">
&lt;div class="flux-bars">&lt;div class="flux-bar before" style="height:34%">&lt;span class="flux-bar-value">0.272&lt;/span>&lt;/div>&lt;div class="flux-bar after" style="height:75%">&lt;span class="flux-bar-value">0.600&lt;/span>&lt;/div>&lt;/div>
&lt;div class="flux-group-name">Celeb-old&lt;/div>&lt;div class="flux-group-gain">+0.328&lt;/div>
&lt;div class="flux-group-meta">28 cases, 96.4% improved&lt;br>Median pose gap 1.4°, non-face MAE 0.043&lt;/div>
&lt;/div>
&lt;div class="flux-chart-group">
&lt;div class="flux-bars">&lt;div class="flux-bar before" style="height:42.25%">&lt;span class="flux-bar-value">0.338&lt;/span>&lt;/div>&lt;div class="flux-bar after" style="height:90.13%">&lt;span class="flux-bar-value">0.721&lt;/span>&lt;/div>&lt;/div>
&lt;div class="flux-group-name">Colleague&lt;/div>&lt;div class="flux-group-gain">+0.383&lt;/div>
&lt;div class="flux-group-meta">440 cases, 99.8% improved&lt;br>Median pose gap 3.1°, non-face MAE 0.227&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="flux-legend">&lt;span class="before">Input → Reference&lt;/span>&lt;span class="after">Output → Reference&lt;/span>&lt;/div>
&lt;p class="flux-conclusion">Identity similarity improves consistently across all three test sets, while pose changes and non-face-region differences remain limited.&lt;/p>
&lt;/section></description></item><item><title>SynPo: Boosting Training-Free Few-Shot Medical Segmentation via High-Quality Negative Prompts</title><link>https://liu-yufei.github.io/publication/synpo/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/publication/synpo/</guid><description>&lt;p>SynPo addresses weak negative prompts in training-free few-shot medical image segmentation. It combines SAM and DINOv2 features to construct a synergistic confidence map, then selects informative positive and negative points through confidence-aware sampling and clustering.&lt;/p>
&lt;style>
.synpo-results {
--synpo-navy: #183f7a;
--synpo-blue: #2e64df;
--synpo-line: #d9e1ec;
--synpo-soft: #f5f8fc;
margin: 3rem calc(50% - 50vw);
padding: 0 max(1.25rem, calc((100vw - 1180px) / 2));
color: #172033;
}
.dark .synpo-results {
--synpo-line: #334155;
--synpo-soft: #111827;
color: #e5e7eb;
}
.synpo-results__header {
display: flex;
align-items: end;
justify-content: space-between;
gap: 1rem;
margin-bottom: 1.25rem;
padding-bottom: .8rem;
border-bottom: 5px solid var(--synpo-navy);
}
.synpo-results__header h2 {
margin: 0;
color: var(--synpo-navy);
font-size: clamp(2.2rem, 5vw, 4.6rem);
line-height: .95;
letter-spacing: -.04em;
}
.dark .synpo-results__header h2 { color: #8eb5ef; }
.synpo-results__header p {
max-width: 34rem;
margin: 0;
text-align: right;
font-size: .95rem;
color: #64748b;
}
.synpo-results__layout {
display: grid;
grid-template-columns: minmax(0, 1.8fr) minmax(270px, .9fr);
gap: 2rem;
align-items: start;
}
.synpo-results__main,
.synpo-results__side {
min-width: 0;
}
.synpo-results__scroll {
overflow-x: auto;
border-top: 1px solid var(--synpo-line);
border-bottom: 1px solid var(--synpo-line);
}
.synpo-results table {
width: 100%;
margin: 0;
border-collapse: collapse;
font-size: .79rem;
line-height: 1.25;
font-variant-numeric: tabular-nums;
}
.synpo-results th,
.synpo-results td {
padding: .48rem .45rem;
text-align: center;
white-space: nowrap;
border: 0;
}
.synpo-results thead tr:first-child th {
padding-top: .75rem;
color: var(--synpo-navy);
font-weight: 800;
border-bottom: 1px solid var(--synpo-line);
}
.dark .synpo-results thead tr:first-child th { color: #a9c8f4; }
.synpo-results thead tr:last-child th {
background: var(--synpo-soft);
font-size: .72rem;
}
.synpo-results th:first-child,
.synpo-results td:first-child {
position: sticky;
left: 0;
z-index: 1;
text-align: left;
background: #fff;
font-weight: 650;
}
.dark .synpo-results th:first-child,
.dark .synpo-results td:first-child { background: #0f172a; }
.synpo-results tbody tr + tr td { border-top: 1px solid color-mix(in srgb, var(--synpo-line) 65%, transparent); }
.synpo-results tbody tr.divider td { border-top: 2px solid var(--synpo-line); }
.synpo-results tbody tr.synpo-row td {
background: color-mix(in srgb, #dff4e9 72%, transparent);
font-weight: 800;
}
.dark .synpo-results tbody tr.synpo-row td { background: rgba(38, 104, 72, .28); }
.synpo-results tbody tr.synpo-row td:first-child { color: #166534; }
.dark .synpo-results tbody tr.synpo-row td:first-child { color: #86efac; }
.synpo-results__setting {
display: block;
margin-top: .12rem;
color: #94a3b8;
font-size: .64rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: .06em;
}
.synpo-results__qualitative {
display: block;
width: 100%;
margin-top: 1.15rem;
border-radius: .45rem;
background: #000;
}
.synpo-results__caption {
margin: .55rem 0 0;
color: #64748b;
font-size: .78rem;
text-align: center;
}
.synpo-results__side {
display: grid;
gap: 1.75rem;
}
.synpo-results__side section { padding-top: .2rem; }
.synpo-results__side h3 {
margin: 0 0 .8rem;
font-size: 1.12rem;
line-height: 1.3;
}
.synpo-results__side table { font-size: .86rem; }
.synpo-results__side th:first-child,
.synpo-results__side td:first-child { position: static; }
.synpo-results__side .gain { color: var(--synpo-blue); font-weight: 750; }
.synpo-results__side .best { font-weight: 850; }
.synpo-results__takeaway {
margin: 1.25rem 0 0;
padding: .95rem 1rem;
border-left: 4px solid var(--synpo-navy);
background: var(--synpo-soft);
font-size: .9rem;
line-height: 1.55;
}
@media (max-width: 900px) {
.synpo-results__layout { grid-template-columns: 1fr; }
.synpo-results__side { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.synpo-results__takeaway { grid-column: 1 / -1; }
}
@media (max-width: 640px) {
.synpo-results__header { display: block; }
.synpo-results__header p { margin-top: .65rem; text-align: left; }
.synpo-results__side { grid-template-columns: 1fr; }
.synpo-results table { font-size: .73rem; }
}
&lt;/style>
&lt;section class="synpo-results" aria-labelledby="synpo-results-title">
&lt;header class="synpo-results__header">
&lt;h2 id="synpo-results-title">SynPo&lt;/h2>
&lt;p>Training-free few-shot medical segmentation with confidence-map synergy and informative negative prompts&lt;/p>
&lt;/header>
&lt;div class="synpo-results__layout">
&lt;div class="synpo-results__main">
&lt;div class="synpo-results__scroll" role="region" aria-label="Segmentation benchmark results" tabindex="0">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th rowspan="2">Method&lt;/th>
&lt;th colspan="5">CHAOS-MRI&lt;/th>
&lt;th colspan="5">Synapse-CT&lt;/th>
&lt;/tr>
&lt;tr>
&lt;th>Spleen&lt;/th>&lt;th>Liver&lt;/th>&lt;th>LK&lt;/th>&lt;th>RK&lt;/th>&lt;th>Mean&lt;/th>
&lt;th>Spleen&lt;/th>&lt;th>Liver&lt;/th>&lt;th>LK&lt;/th>&lt;th>RK&lt;/th>&lt;th>Mean&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>&lt;td>SSL-ALPNet&lt;span class="synpo-results__setting">trained&lt;/span>&lt;/td>&lt;td>67.02&lt;/td>&lt;td>73.05&lt;/td>&lt;td>73.63&lt;/td>&lt;td>78.39&lt;/td>&lt;td>73.02&lt;/td>&lt;td>60.25&lt;/td>&lt;td>73.65&lt;/td>&lt;td>63.34&lt;/td>&lt;td>54.82&lt;/td>&lt;td>63.02&lt;/td>&lt;/tr>
&lt;tr>&lt;td>ADNet&lt;span class="synpo-results__setting">trained&lt;/span>&lt;/td>&lt;td>75.92&lt;/td>&lt;td>80.81&lt;/td>&lt;td>75.28&lt;/td>&lt;td>83.28&lt;/td>&lt;td>78.82&lt;/td>&lt;td>63.48&lt;/td>&lt;td>77.24&lt;/td>&lt;td>72.13&lt;/td>&lt;td>79.06&lt;/td>&lt;td>72.97&lt;/td>&lt;/tr>
&lt;tr>&lt;td>Q-Net&lt;span class="synpo-results__setting">trained&lt;/span>&lt;/td>&lt;td>75.99&lt;/td>&lt;td>81.74&lt;/td>&lt;td>78.36&lt;/td>&lt;td>87.98&lt;/td>&lt;td>81.02&lt;/td>&lt;td>74.86&lt;/td>&lt;td>71.21&lt;/td>&lt;td>75.26&lt;/td>&lt;td>74.79&lt;/td>&lt;td>74.03&lt;/td>&lt;/tr>
&lt;tr>&lt;td>RPT&lt;span class="synpo-results__setting">trained&lt;/span>&lt;/td>&lt;td>76.37&lt;/td>&lt;td>82.86&lt;/td>&lt;td>80.72&lt;/td>&lt;td>89.82&lt;/td>&lt;td>82.44&lt;/td>&lt;td>79.13&lt;/td>&lt;td>82.57&lt;/td>&lt;td>77.05&lt;/td>&lt;td>72.58&lt;/td>&lt;td>77.83&lt;/td>&lt;/tr>
&lt;tr>&lt;td>GMRD&lt;span class="synpo-results__setting">trained&lt;/span>&lt;/td>&lt;td>76.09&lt;/td>&lt;td>81.42&lt;/td>&lt;td>83.96&lt;/td>&lt;td>90.12&lt;/td>&lt;td>82.90&lt;/td>&lt;td>78.31&lt;/td>&lt;td>79.60&lt;/td>&lt;td>81.70&lt;/td>&lt;td>74.46&lt;/td>&lt;td>78.52&lt;/td>&lt;/tr>
&lt;tr class="divider">&lt;td>PerSAM&lt;span class="synpo-results__setting">training-free&lt;/span>&lt;/td>&lt;td>69.14&lt;/td>&lt;td>42.44&lt;/td>&lt;td>64.84&lt;/td>&lt;td>71.36&lt;/td>&lt;td>61.12&lt;/td>&lt;td>65.03&lt;/td>&lt;td>65.55&lt;/td>&lt;td>58.47&lt;/td>&lt;td>60.31&lt;/td>&lt;td>62.34&lt;/td>&lt;/tr>
&lt;tr>&lt;td>ProtoSAM&lt;span class="synpo-results__setting">training-free&lt;/span>&lt;/td>&lt;td>76.51&lt;/td>&lt;td>81.94&lt;/td>&lt;td>71.46&lt;/td>&lt;td>81.43&lt;/td>&lt;td>77.83&lt;/td>&lt;td>65.50&lt;/td>&lt;td>87.84&lt;/td>&lt;td>69.44&lt;/td>&lt;td>71.04&lt;/td>&lt;td>73.45&lt;/td>&lt;/tr>
&lt;tr class="synpo-row">&lt;td>SynPo (ours)&lt;span class="synpo-results__setting">training-free&lt;/span>&lt;/td>&lt;td>80.30&lt;/td>&lt;td>77.32&lt;/td>&lt;td>77.32&lt;/td>&lt;td>83.04&lt;/td>&lt;td>79.50&lt;/td>&lt;td>83.76&lt;/td>&lt;td>81.32&lt;/td>&lt;td>75.00&lt;/td>&lt;td>79.63&lt;/td>&lt;td>79.91&lt;/td>&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;img class="synpo-results__qualitative" src="qualitative-results.png" alt="Qualitative abdominal organ segmentation results across four anatomical targets">
&lt;p class="synpo-results__caption">Qualitative results on abdominal MRI. Colored overlays show the predicted organ masks.&lt;/p>
&lt;/div>
&lt;aside class="synpo-results__side" aria-label="Ablation studies">
&lt;section>
&lt;h3>Module ablation&lt;/h3>
&lt;div class="synpo-results__scroll">
&lt;table>
&lt;thead>&lt;tr>&lt;th>SAM&lt;/th>&lt;th>DINO&lt;/th>&lt;th>PSM&lt;/th>&lt;th>NRM&lt;/th>&lt;th>Dice&lt;/th>&lt;th>Gain&lt;/th>&lt;/tr>&lt;/thead>
&lt;tbody>
&lt;tr>&lt;td>✓&lt;/td>&lt;td>&lt;/td>&lt;td>&lt;/td>&lt;td>&lt;/td>&lt;td>57.48&lt;/td>&lt;td>–&lt;/td>&lt;/tr>
&lt;tr>&lt;td>✓&lt;/td>&lt;td>✓&lt;/td>&lt;td>&lt;/td>&lt;td>&lt;/td>&lt;td>66.70&lt;/td>&lt;td class="gain">+9.22&lt;/td>&lt;/tr>
&lt;tr>&lt;td>✓&lt;/td>&lt;td>✓&lt;/td>&lt;td>✓&lt;/td>&lt;td>&lt;/td>&lt;td>78.74&lt;/td>&lt;td class="gain">+12.04&lt;/td>&lt;/tr>
&lt;tr>&lt;td>✓&lt;/td>&lt;td>✓&lt;/td>&lt;td>✓&lt;/td>&lt;td>✓&lt;/td>&lt;td class="best">79.93&lt;/td>&lt;td class="gain">+1.19&lt;/td>&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>
&lt;section>
&lt;h3>Negative-prompt strategy on CHAOS&lt;/h3>
&lt;div class="synpo-results__scroll">
&lt;table>
&lt;thead>&lt;tr>&lt;th>Model&lt;/th>&lt;th>Dice&lt;/th>&lt;/tr>&lt;/thead>
&lt;tbody>
&lt;tr>&lt;td>PerSAM&lt;/td>&lt;td>56.72&lt;/td>&lt;/tr>
&lt;tr>&lt;td>+ Negative Point Selection&lt;/td>&lt;td class="best">68.90&lt;/td>&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>
&lt;p class="synpo-results__takeaway">SynPo achieves a mean Dice score of &lt;strong>79.91&lt;/strong> on Synapse-CT without task-specific training. The module study shows the largest gain comes from the Point Selection Module.&lt;/p>
&lt;/aside>
&lt;/div>
&lt;/section></description></item><item><title>OmniPersona: Holistic Identity-Preserving Video Creation and Editing via Spatiotemporal Decoupled Persona Injection in Unified DiT</title><link>https://liu-yufei.github.io/publication/omnipersona/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/publication/omnipersona/</guid><description>&lt;p>&lt;strong>Role: Co-first Author (Equal Contribution)&lt;/strong>&lt;/p>
&lt;style>
.omni-visuals { margin: 2.75rem auto 3rem; max-width: 1180px; }
.omni-visuals h2 { margin: 0 0 1.25rem; font-size: 1.75rem; }
.omni-overview { display: block; width: 100%; height: auto; }
.omni-example-title { margin-top: 3.5rem !important; }
.omni-example { margin: 0; }
.omni-example video { display: block; width: 100%; height: auto; border-radius: 0.85rem; background: #fff; box-shadow: 0 1rem 2.5rem rgba(15, 23, 42, 0.14); }
.omni-example figcaption { max-width: 58rem; margin: 0.85rem auto 0; color: #64748b; text-align: center; font-size: 0.9rem; line-height: 1.55; }
@media (max-width: 720px) { .omni-example figcaption { text-align: left; font-size: 0.8rem; } }
&lt;/style>
&lt;section class="omni-visuals" aria-labelledby="omni-overview-title">
&lt;h2 id="omni-overview-title">Overview&lt;/h2>
&lt;img class="omni-overview" src="https://liu-yufei.github.io/publication/omnipersona/overview.jpg" alt="OmniPersona framework overview">
&lt;h2 class="omni-example-title">Generation Example&lt;/h2>
&lt;figure class="omni-example">
&lt;video autoplay muted loop playsinline preload="metadata" poster="/publication/omnipersona/generation-example-poster.jpg" aria-label="OmniPersona generation example with static input conditions on the left and the generated video on the right">
&lt;source src="https://liu-yufei.github.io/publication/omnipersona/generation-example.mp4" type="video/mp4">
&lt;/video>
&lt;figcaption>The static input conditions and the animated output are combined into one synchronized video, following the presentation layout.&lt;/figcaption>
&lt;/figure>
&lt;/section>
&lt;p>OmniPersona introduces Multimodal Holistic Persona Representation and spatiotemporally decoupled persona injection for unified video creation and editing. I co-led the work and contributed to the holistic identity representation module, combining face identity features with DINOv2 and CLIP features for clothing, hairstyle, and body characteristics.&lt;/p>
&lt;p>On reference-to-video generation, OmniPersona reaches 79.3% face similarity and 68.7% body similarity, improving over the strongest baseline by 5.2 and 34.2 percentage points, respectively.&lt;/p></description></item><item><title>OneFont: A Unified Agent for End-to-End Font Creation</title><link>https://liu-yufei.github.io/publication/onefont/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/publication/onefont/</guid><description>&lt;section class="onefont-motivation" aria-labelledby="onefont-motivation-title">
&lt;figure class="onefont-motivation__visual">
&lt;h2>From Manual Model Selection to OneFont&lt;/h2>
&lt;div class="onefont-motivation__canvas">
&lt;img src="https://liu-yufei.github.io/publication/onefont/onefont-introduction.png" width="838" height="708" alt="Comparison of a default font model, expert model selection, and OneFont for generating a Planet Earth design">
&lt;/div>
&lt;figcaption>OneFont completes model selection and refinement in a single agent workflow.&lt;/figcaption>
&lt;/figure>
&lt;div class="onefont-motivation__copy">
&lt;h2 id="onefont-motivation-title">Motivation&lt;/h2>
&lt;p>Existing diffusion and MLLM-based font generation systems often focus on a single editing task. Supporting a new script or generation workflow can require substantial task-specific fine-tuning, while selecting the right model and repairing an imperfect result still depend on expert intervention.&lt;/p>
&lt;p>OneFont treats end-to-end font creation as an MLLM agent task. Given a user request, it selects suitable models and tools, generates candidate results, verifies readability and style, and performs local refinement when needed.&lt;/p>
&lt;/div>
&lt;/section>
&lt;style>
.onefont-motivation {
display: grid;
grid-template-columns: minmax(0, 1.18fr) minmax(18rem, 0.82fr);
gap: clamp(1.8rem, 4vw, 3.75rem);
align-items: center;
margin: 2.5rem calc(50% - 50vw) 4rem;
padding: 0 max(1.25rem, calc((100vw - 1180px) / 2));
}
.onefont-motivation figure { margin: 0; min-width: 0; }
.onefont-motivation h2 {
margin: 0 0 1rem;
color: #163f7b;
font-size: clamp(1.55rem, 2.5vw, 2.15rem);
line-height: 1.15;
}
.onefont-motivation__canvas {
padding: clamp(0.65rem, 1.25vw, 1rem);
border: 1px solid rgba(148, 163, 184, 0.28);
border-radius: 1rem;
background: #fff;
box-shadow: 0 0.8rem 2rem rgba(15, 23, 42, 0.1);
}
.onefont-motivation img { display: block; width: 100%; height: auto; }
.onefont-motivation figcaption {
margin-top: 0.75rem;
color: #64748b;
font-size: 0.84rem;
line-height: 1.55;
}
.onefont-motivation__copy p { margin: 0 0 1.15rem; line-height: 1.8; }
.dark .onefont-motivation h2 { color: #91b8ef; }
@media (max-width: 820px) {
.onefont-motivation { grid-template-columns: 1fr; align-items: start; }
}
&lt;/style>
&lt;h2 id="method-overview">Method Overview&lt;/h2>
&lt;p>OneFont converts each request into a reasoning trace and structured tool calls. Its generation library covers text-to-art fonts, style transfer, vector font generation, retrieval, handwriting generation, and local editing. Supervised fine-tuning teaches the agent to plan and invoke these tools, while GRPO-based preference alignment improves the quality of its generation strategy. During inference, a graph-based planner verifies intermediate results, backtracks when necessary, and applies local refinement.&lt;/p>
&lt;section class="onefont-pipeline" aria-labelledby="onefont-pipeline-title">
&lt;header class="onefont-pipeline__header">
&lt;h2 id="onefont-pipeline-title">Method Breakdown&lt;/h2>
&lt;p>The OneFont framework combines a multimodal generation tool library, two-stage SFT and preference-alignment training, and a graph-based planner for verification and backtracking.&lt;/p>
&lt;/header>
&lt;div class="onefont-pipeline__body">
&lt;aside class="onefont-reward" aria-label="Reward design">
&lt;h3>Reward Design&lt;/h3>
&lt;div class="onefont-formula">
&lt;var>R&lt;/var>&lt;sub>hybrid&lt;/sub> = λ&lt;sub>think&lt;/sub>&lt;var>R&lt;/var>&lt;sub>think&lt;/sub> + λ&lt;sub>tool&lt;/sub>&lt;var>R&lt;/var>&lt;sub>tool&lt;/sub>&lt;br>
+ λ&lt;sub>style&lt;/sub>&lt;var>R&lt;/var>&lt;sub>style&lt;/sub> + λ&lt;sub>visual&lt;/sub>&lt;var>R&lt;/var>&lt;sub>visual&lt;/sub>
&lt;/div>
&lt;div class="onefont-ocr">
&lt;h3>OCR Coverage Example&lt;/h3>
&lt;div class="onefont-ocr__example">
&lt;span class="onefont-ocr__target">Hello, World!&lt;/span>
&lt;span class="onefont-ocr__arrow">↓&lt;/span>
&lt;span class="onefont-ocr__result">EasyOCR&lt;/span>
&lt;/div>
&lt;code class="onefont-code">ocr_result = “Hello, World”&lt;br>target = “Hello, World!”&lt;br>S&lt;sub>OCR&lt;/sub> = 11 / 12&lt;/code>
&lt;/div>
&lt;/aside>
&lt;figure class="onefont-framework-image">
&lt;div class="onefont-framework-image__canvas">
&lt;img src="https://liu-yufei.github.io/publication/onefont/onefont-method-overview.png" width="1200" height="596" alt="OneFont training framework, generation tool library, and graph-based planner">
&lt;/div>
&lt;figcaption>Training framework and graph-based inference planner&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="onefont-pipeline__steps" aria-label="OneFont workflow summary">
&lt;div class="onefont-summary-step">&lt;span class="onefont-summary-step__number">01&lt;/span>&lt;div>&lt;strong>Tool Library&lt;/strong>&lt;span>Text, image, and answer tools for multimodal font creation&lt;/span>&lt;/div>&lt;/div>
&lt;div class="onefont-summary-step">&lt;span class="onefont-summary-step__number">02&lt;/span>&lt;div>&lt;strong>Model Training&lt;/strong>&lt;span>SFT builds tool-use ability, then GRPO aligns generation preferences&lt;/span>&lt;/div>&lt;/div>
&lt;div class="onefont-summary-step">&lt;span class="onefont-summary-step__number">03&lt;/span>&lt;div>&lt;strong>Model Inference&lt;/strong>&lt;span>The planner verifies results, backtracks when needed, and refines the output&lt;/span>&lt;/div>&lt;/div>
&lt;/div>
&lt;/section>
&lt;style>
.onefont-pipeline {
--of-navy: #163f7b;
--of-gold: #dc9f22;
--of-line: #cad7e8;
--of-soft: #f6f9fd;
margin: 3rem calc(50% - 50vw);
padding: 0 max(1.25rem, calc((100vw - 1180px) / 2));
color: #172033;
}
.dark .onefont-pipeline { --of-line: #334155; --of-soft: #111827; color: #e5e7eb; }
.onefont-pipeline__header { display: flex; align-items: end; justify-content: space-between; gap: 1.5rem; margin-bottom: 1.4rem; padding-bottom: 0.9rem; border-bottom: 5px solid var(--of-navy); }
.onefont-pipeline__header h2 { margin: 0; color: var(--of-navy); font-size: clamp(2rem, 4vw, 3.7rem); line-height: 1; letter-spacing: -0.035em; }
.onefont-pipeline__header p { max-width: 42rem; margin: 0; color: #64748b; text-align: right; font-size: 0.95rem; line-height: 1.55; }
.dark .onefont-pipeline__header h2 { color: #91b8ef; }
.onefont-pipeline__body { display: grid; grid-template-columns: minmax(240px, 0.55fr) minmax(0, 1.8fr); gap: 1.4rem; align-items: stretch; }
.onefont-reward { padding: 1.25rem; border-left: 7px solid var(--of-navy); background: var(--of-soft); }
.onefont-pipeline h3 { margin: 0 0 0.75rem; color: var(--of-navy); font-size: 1.15rem; }
.dark .onefont-pipeline h3 { color: #a8c7f2; }
.onefont-formula { margin: 0 0 1.3rem; padding: 1rem 0.25rem; overflow-x: auto; border-top: 1px solid var(--of-line); border-bottom: 1px solid var(--of-line); text-align: center; font-family: Georgia, "Times New Roman", serif; font-size: clamp(0.78rem, 1.3vw, 1rem); line-height: 1.9; white-space: nowrap; }
.onefont-ocr { padding-top: 1rem; border-top: 1px solid var(--of-line); }
.onefont-ocr__example { margin: 0.75rem 0; text-align: center; }
.onefont-ocr__target { display: inline-block; color: #efb500; font-size: 1.55rem; font-weight: 900; -webkit-text-stroke: 1px #9a6e00; }
.onefont-ocr__arrow { display: block; color: var(--of-gold); font-size: 1.35rem; line-height: 1; }
.onefont-ocr__result { color: #64748b; font-weight: 750; }
.onefont-code { display: block; margin-top: 0.8rem; color: #226fbd; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.78rem; line-height: 1.7; }
.onefont-framework-image { display: flex; flex-direction: column; justify-content: center; min-width: 0; margin: 0; }
.onefont-framework-image__canvas { padding: 0.75rem; border: 1px solid var(--of-line); border-radius: 0.8rem; background: #fff; box-shadow: 0 0.65rem 1.8rem rgba(15, 23, 42, 0.08); }
.onefont-framework-image img { display: block; width: 100%; height: auto; }
.onefont-framework-image figcaption { margin-top: 0.65rem; color: #64748b; text-align: center; font-size: 0.82rem; }
.onefont-pipeline__steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; margin-top: 1.35rem; }
.onefont-summary-step { display: grid; grid-template-columns: auto 1fr; gap: 0.8rem; align-items: center; padding: 1rem; border: 1px solid var(--of-line); border-radius: 1rem; background: var(--of-soft); }
.onefont-summary-step:nth-child(2) { border-color: #e8bd8f; background: #fff8ef; }
.dark .onefont-summary-step:nth-child(2) { background: rgba(95, 55, 15, 0.25); }
.onefont-summary-step__number { color: var(--of-navy); font-size: 1.85rem; font-weight: 900; }
.onefont-summary-step:nth-child(2) .onefont-summary-step__number { color: #bd6b1d; }
.onefont-summary-step strong { display: block; color: var(--of-navy); font-size: 1rem; }
.dark .onefont-summary-step strong { color: #a8c7f2; }
.onefont-summary-step span { color: #64748b; font-size: 0.78rem; line-height: 1.4; }
@media (max-width: 900px) {
.onefont-pipeline__body { grid-template-columns: 1fr; }
.onefont-pipeline__header { display: block; }
.onefont-pipeline__header p { margin-top: 0.7rem; text-align: left; }
}
@media (max-width: 700px) { .onefont-pipeline__steps { grid-template-columns: 1fr; } }
&lt;/style>
&lt;h2 id="qualitative-results">Qualitative Results&lt;/h2>
&lt;p>Across text-rich generation tasks, OneFont produces readable text while matching the requested object, composition, and visual style. The comparison includes general image generators and dedicated text rendering models.&lt;/p>
&lt;figure class="onefont-visual onefont-visual--paper">
&lt;div class="onefont-visual__canvas">
&lt;img src="https://liu-yufei.github.io/publication/onefont/onefont-qualitative-results.png" width="792" height="394" loading="lazy" alt="Qualitative comparison of OneFont with AnyText, DALL-E 3, Ideogram, PixArt-alpha, SDXL, and TextDiffuser-2">
&lt;/div>
&lt;figcaption>Qualitative comparison on cakes, T-shirts, book covers, and character images with embedded text. The final column shows OneFont results.&lt;/figcaption>
&lt;/figure></description></item><item><title>Wan-VACE-based Video Object and Shadow Removal</title><link>https://liu-yufei.github.io/project/wan-vace-object-removal/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/project/wan-vace-object-removal/</guid><description>&lt;p>This Huawei collaboration project addresses the shortage of high-quality paired data for video object removal, especially when shadows and reflections must also be removed.&lt;/p>
&lt;p>I independently built a data generation and fine-tuning pipeline using Wan2.2-5B, SAM2, and a baseline removal model. From roughly 4,000 generated groups, I selected 1,070 high-quality training pairs and retained 2,500 difficult cases for evaluation. I then fine-tuned the VACE module of Wan2.1-VACE-1.3B with DiffSynth-Studio, Accelerate, and DeepSpeed on six NVIDIA A800 GPUs.&lt;/p>
&lt;style>
.wan-comparisons { margin: 3.25rem auto; max-width: 1120px; }
.wan-comparisons h2 { margin: 0 0 1.5rem; font-size: 1.75rem; }
.wan-comparison { --split: 50%; position: relative; width: 100%; aspect-ratio: 40 / 23; overflow: hidden; border-radius: 0.8rem; background: #111; }
.wan-comparison + h2 { margin-top: 3.5rem; }
.wan-comparison video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; }
.wan-compare-after { clip-path: inset(0 0 0 var(--split)); }
.wan-comparison-label { position: absolute; top: 1rem; z-index: 4; padding: 0.35rem 0.7rem; border-radius: 999px; color: #fff; background: rgba(0, 0, 0, 0.62); font-size: 0.85rem; font-weight: 700; backdrop-filter: blur(6px); }
.wan-comparison-label.left { left: 1rem; }
.wan-comparison-label.right { right: 1rem; }
.wan-comparison-line { position: absolute; z-index: 3; top: 0; bottom: 0; left: var(--split); width: 2px; background: #fff; transform: translateX(-1px); pointer-events: none; }
.wan-comparison-handle { position: absolute; z-index: 4; top: 50%; left: var(--split); width: 2.65rem; height: 2.65rem; border: 2px solid #fff; border-radius: 50%; color: #fff; background: rgba(0, 0, 0, 0.55); transform: translate(-50%, -50%); display: grid; place-items: center; font-size: 1rem; pointer-events: none; }
.wan-comparison-range { position: absolute; z-index: 5; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: ew-resize; }
.wan-comparison-note { margin: 0.75rem 0 0; text-align: center; font-size: 0.88rem; opacity: 0.68; }
@media (max-width: 700px) {
.wan-comparison-label { top: 0.6rem; padding: 0.25rem 0.55rem; font-size: 0.72rem; }
.wan-comparison-label.left { left: 0.6rem; }
.wan-comparison-label.right { right: 0.6rem; }
.wan-comparison-handle { width: 2.2rem; height: 2.2rem; }
}
&lt;/style>
&lt;section class="wan-comparisons" aria-labelledby="wan-comparison-title">
&lt;p class="wan-comparison-note">All videos are displayed at 480 × 276, matching the output resolution of our model.&lt;/p>
&lt;h2 id="wan-comparison-title">Condition Video vs. Baseline&lt;/h2>
&lt;div class="wan-comparison" data-video-compare data-video-sync data-sync-duration="3.0625">
&lt;video data-sync-master muted playsinline preload="auto" poster="/project/wan-vace-object-removal/condition-poster.png?v=resolution-matched-20261007">&lt;source src="https://liu-yufei.github.io/project/wan-vace-object-removal/condition.mp4?v=resolution-matched-20261007" type="video/mp4">&lt;/video>
&lt;video class="wan-compare-after" muted playsinline preload="auto" poster="/project/wan-vace-object-removal/baseline-poster.png?v=resolution-matched-20261007">&lt;source src="https://liu-yufei.github.io/project/wan-vace-object-removal/baseline.mp4?v=resolution-matched-20261007" type="video/mp4">&lt;/video>
&lt;span class="wan-comparison-label left">Condition Video&lt;/span>
&lt;span class="wan-comparison-label right">Baseline&lt;/span>
&lt;span class="wan-comparison-line">&lt;/span>&lt;span class="wan-comparison-handle">↔&lt;/span>
&lt;input class="wan-comparison-range" type="range" min="0" max="100" value="50" aria-label="Compare the condition video with the baseline result">
&lt;/div>
&lt;p class="wan-comparison-note">Drag the slider to compare both videos frame by frame.&lt;/p>
&lt;h2>Condition Video vs. Ours&lt;/h2>
&lt;div class="wan-comparison" data-video-compare data-video-sync data-sync-duration="3.0625">
&lt;video data-sync-master muted playsinline preload="auto" poster="/project/wan-vace-object-removal/condition-poster.png?v=resolution-matched-20261007">&lt;source src="https://liu-yufei.github.io/project/wan-vace-object-removal/condition.mp4?v=resolution-matched-20261007" type="video/mp4">&lt;/video>
&lt;video class="wan-compare-after" muted playsinline preload="auto" poster="/project/wan-vace-object-removal/ours-poster.png?v=resolution-matched-20261007">&lt;source src="https://liu-yufei.github.io/project/wan-vace-object-removal/ours.mp4?v=resolution-matched-20261007" type="video/mp4">&lt;/video>
&lt;span class="wan-comparison-label left">Condition Video&lt;/span>
&lt;span class="wan-comparison-label right">Ours&lt;/span>
&lt;span class="wan-comparison-line">&lt;/span>&lt;span class="wan-comparison-handle">↔&lt;/span>
&lt;input class="wan-comparison-range" type="range" min="0" max="100" value="50" aria-label="Compare the condition video with our result">
&lt;/div>
&lt;p class="wan-comparison-note">Drag the slider to inspect object and shadow removal.&lt;/p>
&lt;/section>
&lt;p>Human evaluation found 2,446 of the 2,500 difficult cases usable, a 97.84% success rate, with improved object-shadow removal and background reconstruction.&lt;/p></description></item><item><title>Clinical Study on the Application of a High-Sensitivity Electronic Nose on Thin-Film Gas Sensor Array Technology Combined with Deep Learning Algorithm for Early Non-Invasive Diagnosis of Chronic Atrophic Gastritis</title><link>https://liu-yufei.github.io/publication/electronic-nose-cag/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/publication/electronic-nose-cag/</guid><description>&lt;p>This study evaluates breath analysis with a thin-film gas sensor array and learning-based models for early, non-invasive diagnosis of chronic atrophic gastritis.&lt;/p></description></item><item><title>TEmory: A Temporal-Memory Approach to Weakly Supervised Colonic Polyp Frame Detection</title><link>https://liu-yufei.github.io/publication/temory/</link><pubDate>Fri, 01 Nov 2024 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/publication/temory/</guid><description>&lt;p>TEmory models relationships between adjacent video frames and stores representative normal and polyp features in parallel memory banks, improving robustness to minority normal structures in colonoscopy videos.&lt;/p></description></item><item><title>Projects</title><link>https://liu-yufei.github.io/projects/</link><pubDate>Sun, 19 May 2024 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/projects/</guid><description/></item><item><title>An Interpretable Approach to the Solutions of High-Dimensional Partial Differential Equations</title><link>https://liu-yufei.github.io/publication/hd-tlgp/</link><pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/publication/hd-tlgp/</guid><description>&lt;p>The method transfers the structure of one-dimensional analytical solutions to higher-dimensional forms, then uses genetic programming and automatic differentiation to search for mathematically interpretable solutions that satisfy the governing equations and boundary conditions.&lt;/p></description></item><item><title>Learn JavaScript</title><link>https://liu-yufei.github.io/teaching/js/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/teaching/js/</guid><description>&lt;p>&lt;a href="https://hugoblox.com" target="_blank" rel="noopener">Hugo Blox Builder&lt;/a> is designed to give technical content creators a seamless experience. You can focus on the content and the Hugo Blox Builder which this template is built upon handles the rest.&lt;/p>
&lt;p>&lt;strong>Embed videos, podcasts, code, LaTeX math, and even test students!&lt;/strong>&lt;/p>
&lt;p>On this page, you&amp;rsquo;ll find some examples of the types of technical content that can be rendered with Hugo Blox.&lt;/p>
&lt;h2 id="video">Video&lt;/h2>
&lt;p>Teach your course by sharing videos with your students. Choose from one of the following approaches:&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/D2vj0WcvH5c?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;p>&lt;strong>Youtube&lt;/strong>:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; youtube w7Ft2ymGmfc &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Bilibili&lt;/strong>:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; bilibili id=&amp;quot;BV1WV4y1r7DF&amp;quot; &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Video file&lt;/strong>&lt;/p>
&lt;p>Videos may be added to a page by either placing them in your &lt;code>assets/media/&lt;/code> media library or in your &lt;a href="https://gohugo.io/content-management/page-bundles/" target="_blank" rel="noopener">page&amp;rsquo;s folder&lt;/a>, and then embedding them with the &lt;em>video&lt;/em> shortcode:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; video src=&amp;quot;my_video.mp4&amp;quot; controls=&amp;quot;yes&amp;quot; &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;h2 id="podcast">Podcast&lt;/h2>
&lt;p>You can add a podcast or music to a page by placing the MP3 file in the page&amp;rsquo;s folder or the media library folder and then embedding the audio on your page with the &lt;em>audio&lt;/em> shortcode:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; audio src=&amp;quot;ambient-piano.mp3&amp;quot; &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;p>Try it out:&lt;/p>
&lt;audio controls >
&lt;source src="https://liu-yufei.github.io/teaching/js/ambient-piano.mp3" type="audio/mpeg">
&lt;/audio>
&lt;h2 id="test-students">Test students&lt;/h2>
&lt;p>Provide a simple yet fun self-assessment by revealing the solutions to challenges with the &lt;code>spoiler&lt;/code> shortcode:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">spoiler&lt;/span> &lt;span class="na">text&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;👉 Click to view the solution&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">You found me!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">spoiler&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
&lt;details class="spoiler " id="spoiler-2">
&lt;summary class="cursor-pointer">👉 Click to view the solution&lt;/summary>
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2">
You found me 🎉
&lt;/div>
&lt;/details>
&lt;h2 id="math">Math&lt;/h2>
&lt;p>Hugo Blox Builder supports a Markdown extension for $\LaTeX$ math. You can enable this feature by toggling the &lt;code>math&lt;/code> option in your &lt;code>config/_default/params.yaml&lt;/code> file.&lt;/p>
&lt;p>To render &lt;em>inline&lt;/em> or &lt;em>block&lt;/em> math, wrap your LaTeX math with &lt;code>{{&amp;lt; math &amp;gt;}}$...${{&amp;lt; /math &amp;gt;}}&lt;/code> or &lt;code>{{&amp;lt; math &amp;gt;}}$$...$${{&amp;lt; /math &amp;gt;}}&lt;/code>, respectively.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">We wrap the LaTeX math in the Hugo Blox &lt;em>math&lt;/em> shortcode to prevent Hugo rendering our math as Markdown.&lt;/span>
&lt;/div>
&lt;p>Example &lt;strong>math block&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-latex" data-lang="latex">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">$$&lt;/span>&lt;span class="nb">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">&lt;/span>&lt;span class="nv">\gamma&lt;/span>&lt;span class="nb">_{n} &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\frac&lt;/span>&lt;span class="nb">{ &lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> | &lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n} &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">} &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb">^T &lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="nv">\nabla&lt;/span>&lt;span class="nb"> F &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\nabla&lt;/span>&lt;span class="nb"> F &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> |}{&lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\|\nabla&lt;/span>&lt;span class="nb"> F&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb">{x}_{n}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\nabla&lt;/span>&lt;span class="nb"> F&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb">{x}_{n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\|&lt;/span>&lt;span class="nb">^&lt;/span>&lt;span class="m">2&lt;/span>&lt;span class="nb">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">&lt;/span>&lt;span class="s">$$&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; /math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
$$\gamma_{n} = \frac{ \left | \left (\mathbf x_{n} - \mathbf x_{n-1} \right )^T \left [\nabla F (\mathbf x_{n}) - \nabla F (\mathbf x_{n-1}) \right ] \right |}{\left \|\nabla F(\mathbf{x}_{n}) - \nabla F(\mathbf{x}_{n-1}) \right \|^2}$$
&lt;p>Example &lt;strong>inline math&lt;/strong> &lt;code>{{&amp;lt; math &amp;gt;}}$\nabla F(\mathbf{x}_{n})${{&amp;lt; /math &amp;gt;}}&lt;/code> renders as $\nabla F(\mathbf{x}_{n})$
.&lt;/p>
&lt;p>Example &lt;strong>multi-line math&lt;/strong> using the math linebreak (&lt;code>\\&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-latex" data-lang="latex">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">$$&lt;/span>&lt;span class="nb">f&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nb">k;p_{&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">}^{&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="nb">}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\begin&lt;/span>&lt;span class="nb">{cases}p_{&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">}^{&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="nb">} &amp;amp; &lt;/span>&lt;span class="nv">\text&lt;/span>&lt;span class="nb">{if }k&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">, &lt;/span>&lt;span class="nv">\\&lt;/span>&lt;span class="nb">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb">p_{&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">}^{&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="nb">} &amp;amp; &lt;/span>&lt;span class="nv">\text&lt;/span>&lt;span class="nb">{if }k&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">.&lt;/span>&lt;span class="nv">\end&lt;/span>&lt;span class="nb">{cases}&lt;/span>&lt;span class="s">$$&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; /math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
$$
f(k;p_{0}^{*}) = \begin{cases}p_{0}^{*} &amp; \text{if }k=1, \\
1-p_{0}^{*} &amp; \text{if }k=0.\end{cases}
$$
&lt;h2 id="code">Code&lt;/h2>
&lt;p>Hugo Blox Builder utilises Hugo&amp;rsquo;s Markdown extension for highlighting code syntax. The code theme can be selected in the &lt;code>config/_default/params.yaml&lt;/code> file.&lt;/p>
&lt;pre>&lt;code>```python
import pandas as pd
data = pd.read_csv(&amp;quot;data.csv&amp;quot;)
data.head()
```
&lt;/code>&lt;/pre>
&lt;p>renders as&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pandas&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">pd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read_csv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;data.csv&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">head&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="inline-images">Inline Images&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&amp;lt;&lt;/span> &lt;span class="nx">icon&lt;/span> &lt;span class="nx">name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s">&amp;#34;python&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;}}&lt;/span> &lt;span class="nx">Python&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
&lt;p>
&lt;span class="inline-block pr-1">
&lt;svg style="height: 1em; transform: translateY(0.1em);" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512" fill="currentColor">&lt;path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/>&lt;/svg>
&lt;/span> Python&lt;/p>
&lt;h2 id="did-you-find-this-page-helpful-consider-sharing-it-">Did you find this page helpful? Consider sharing it 🙌&lt;/h2></description></item><item><title>Learn Python</title><link>https://liu-yufei.github.io/teaching/python/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/teaching/python/</guid><description>&lt;p>&lt;a href="https://hugoblox.com" target="_blank" rel="noopener">Hugo Blox Builder&lt;/a> is designed to give technical content creators a seamless experience. You can focus on the content and the Hugo Blox Builder which this template is built upon handles the rest.&lt;/p>
&lt;p>&lt;strong>Embed videos, podcasts, code, LaTeX math, and even test students!&lt;/strong>&lt;/p>
&lt;p>On this page, you&amp;rsquo;ll find some examples of the types of technical content that can be rendered with Hugo Blox.&lt;/p>
&lt;h2 id="video">Video&lt;/h2>
&lt;p>Teach your course by sharing videos with your students. Choose from one of the following approaches:&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/D2vj0WcvH5c?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;p>&lt;strong>Youtube&lt;/strong>:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; youtube w7Ft2ymGmfc &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Bilibili&lt;/strong>:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; bilibili id=&amp;quot;BV1WV4y1r7DF&amp;quot; &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Video file&lt;/strong>&lt;/p>
&lt;p>Videos may be added to a page by either placing them in your &lt;code>assets/media/&lt;/code> media library or in your &lt;a href="https://gohugo.io/content-management/page-bundles/" target="_blank" rel="noopener">page&amp;rsquo;s folder&lt;/a>, and then embedding them with the &lt;em>video&lt;/em> shortcode:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; video src=&amp;quot;my_video.mp4&amp;quot; controls=&amp;quot;yes&amp;quot; &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;h2 id="podcast">Podcast&lt;/h2>
&lt;p>You can add a podcast or music to a page by placing the MP3 file in the page&amp;rsquo;s folder or the media library folder and then embedding the audio on your page with the &lt;em>audio&lt;/em> shortcode:&lt;/p>
&lt;pre>&lt;code>{{&amp;lt; audio src=&amp;quot;ambient-piano.mp3&amp;quot; &amp;gt;}}
&lt;/code>&lt;/pre>
&lt;p>Try it out:&lt;/p>
&lt;audio controls >
&lt;source src="https://liu-yufei.github.io/teaching/python/ambient-piano.mp3" type="audio/mpeg">
&lt;/audio>
&lt;h2 id="test-students">Test students&lt;/h2>
&lt;p>Provide a simple yet fun self-assessment by revealing the solutions to challenges with the &lt;code>spoiler&lt;/code> shortcode:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">spoiler&lt;/span> &lt;span class="na">text&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;👉 Click to view the solution&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">You found me!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">spoiler&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
&lt;details class="spoiler " id="spoiler-2">
&lt;summary class="cursor-pointer">👉 Click to view the solution&lt;/summary>
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2">
You found me 🎉
&lt;/div>
&lt;/details>
&lt;h2 id="math">Math&lt;/h2>
&lt;p>Hugo Blox Builder supports a Markdown extension for $\LaTeX$ math. You can enable this feature by toggling the &lt;code>math&lt;/code> option in your &lt;code>config/_default/params.yaml&lt;/code> file.&lt;/p>
&lt;p>To render &lt;em>inline&lt;/em> or &lt;em>block&lt;/em> math, wrap your LaTeX math with &lt;code>{{&amp;lt; math &amp;gt;}}$...${{&amp;lt; /math &amp;gt;}}&lt;/code> or &lt;code>{{&amp;lt; math &amp;gt;}}$$...$${{&amp;lt; /math &amp;gt;}}&lt;/code>, respectively.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">We wrap the LaTeX math in the Hugo Blox &lt;em>math&lt;/em> shortcode to prevent Hugo rendering our math as Markdown.&lt;/span>
&lt;/div>
&lt;p>Example &lt;strong>math block&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-latex" data-lang="latex">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">$$&lt;/span>&lt;span class="nb">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">&lt;/span>&lt;span class="nv">\gamma&lt;/span>&lt;span class="nb">_{n} &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\frac&lt;/span>&lt;span class="nb">{ &lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> | &lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n} &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">} &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb">^T &lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="nv">\nabla&lt;/span>&lt;span class="nb"> F &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\nabla&lt;/span>&lt;span class="nb"> F &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb"> x_{n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> |}{&lt;/span>&lt;span class="nv">\left&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\|\nabla&lt;/span>&lt;span class="nb"> F&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb">{x}_{n}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\nabla&lt;/span>&lt;span class="nb"> F&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">\mathbf&lt;/span>&lt;span class="nb">{x}_{n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\right&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\|&lt;/span>&lt;span class="nb">^&lt;/span>&lt;span class="m">2&lt;/span>&lt;span class="nb">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">&lt;/span>&lt;span class="s">$$&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; /math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
$$\gamma_{n} = \frac{ \left | \left (\mathbf x_{n} - \mathbf x_{n-1} \right )^T \left [\nabla F (\mathbf x_{n}) - \nabla F (\mathbf x_{n-1}) \right ] \right |}{\left \|\nabla F(\mathbf{x}_{n}) - \nabla F(\mathbf{x}_{n-1}) \right \|^2}$$
&lt;p>Example &lt;strong>inline math&lt;/strong> &lt;code>{{&amp;lt; math &amp;gt;}}$\nabla F(\mathbf{x}_{n})${{&amp;lt; /math &amp;gt;}}&lt;/code> renders as $\nabla F(\mathbf{x}_{n})$
.&lt;/p>
&lt;p>Example &lt;strong>multi-line math&lt;/strong> using the math linebreak (&lt;code>\\&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-latex" data-lang="latex">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">$$&lt;/span>&lt;span class="nb">f&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nb">k;p_{&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">}^{&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="nb">}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb"> &lt;/span>&lt;span class="nv">\begin&lt;/span>&lt;span class="nb">{cases}p_{&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">}^{&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="nb">} &amp;amp; &lt;/span>&lt;span class="nv">\text&lt;/span>&lt;span class="nb">{if }k&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="nb">, &lt;/span>&lt;span class="nv">\\&lt;/span>&lt;span class="nb">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb">p_{&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">}^{&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="nb">} &amp;amp; &lt;/span>&lt;span class="nv">\text&lt;/span>&lt;span class="nb">{if }k&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="nb">.&lt;/span>&lt;span class="nv">\end&lt;/span>&lt;span class="nb">{cases}&lt;/span>&lt;span class="s">$$&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">{{&lt;/span>&amp;lt; /math &amp;gt;&lt;span class="nb">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
$$
f(k;p_{0}^{*}) = \begin{cases}p_{0}^{*} &amp; \text{if }k=1, \\
1-p_{0}^{*} &amp; \text{if }k=0.\end{cases}
$$
&lt;h2 id="code">Code&lt;/h2>
&lt;p>Hugo Blox Builder utilises Hugo&amp;rsquo;s Markdown extension for highlighting code syntax. The code theme can be selected in the &lt;code>config/_default/params.yaml&lt;/code> file.&lt;/p>
&lt;pre>&lt;code>```python
import pandas as pd
data = pd.read_csv(&amp;quot;data.csv&amp;quot;)
data.head()
```
&lt;/code>&lt;/pre>
&lt;p>renders as&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pandas&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">pd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read_csv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;data.csv&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">head&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="inline-images">Inline Images&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&amp;lt;&lt;/span> &lt;span class="nx">icon&lt;/span> &lt;span class="nx">name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s">&amp;#34;python&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;}}&lt;/span> &lt;span class="nx">Python&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>renders as&lt;/p>
&lt;p>
&lt;span class="inline-block pr-1">
&lt;svg style="height: 1em; transform: translateY(0.1em);" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512" fill="currentColor">&lt;path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/>&lt;/svg>
&lt;/span> Python&lt;/p>
&lt;h2 id="did-you-find-this-page-helpful-consider-sharing-it-">Did you find this page helpful? Consider sharing it 🙌&lt;/h2></description></item><item><title>Paper List</title><link>https://liu-yufei.github.io/paperlist/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://liu-yufei.github.io/paperlist/</guid><description/></item></channel></rss>